我有一個宏將VLOOKUP
插入列中。該宏必須以文本形式存儲一個數字並將其轉換爲數字,然後在另一個表單中查找該數字。vba - 宏運行時產生不正確的結果,但是當進入結果正確時
宏始終會產生相同的結果,例如在開始產生錯誤結果之前到達第43行,但是當使用F8
來逐句通過代碼時,不會產生這些錯誤結果。
錯誤的結果是放置在列13中的值不等於存儲爲文本的數字。大多數情況下,好像來自上面和下面行的值,有時候是2行以下的行被插入到列13中。在我看來,似乎2個不同的線程以2種不同的速度運行或者什麼東西?
如果有人可以看看導致錯誤的循環,我將不勝感激,謝謝。
For counter = 2 To NumRowsList
checker = CInt(Sheets("Sheet2").Cells(counter, 3)
Sheets("Sheet2").Cells(counter, 13).Value = checker
'Call WaitFor(0.5)
If checker < 4000 Then
Sheets("Sheet2").Cells(counter, 14) = "=VLOOKUP(M" & counter & ",Sheet4!E2:F126,2,FALSE)"
Else
Sheets("Sheet2").Cells(counter, 14) = "=VLOOKUP(M" & counter & ",Sheet5!B2:C200,2,FALSE)"
End If
Next counter
我曾嘗試此代碼的幾個類似的變化,如使用存儲在欄13中的值,而不是直接在VLOOKUP
使用單元格引用,總是產生相同的結果。
我甚至使用waitfor函數來嘗試創建一個延遲,希望它可以同步操作,但它沒有幫助,並且使用大於0.5的延遲會導致宏的運行時間太長。
更新: 我沒有找到完美的解決方案,只有很長的一段時間。我只是將Vlookups結合到一張紙上,並將存儲爲文本的數字轉換爲vba例程之外的數字。這將誤差從數字計算中刪除(只是col C * 1),然後vlookups查找正確的值。無論如何,謝謝你的幫助。
VBA不支持多線程佔
VlookUp
範圍。我正確地認爲這是問題行:'Sheets(「Sheet2」)。Cells(counter,13).Value = checker'?它從Sheet2列輸入數據3.該列是否包含公式或值? –是的,tbh我只是猜測。沒有列3將文本存儲爲文本。如果它具有.value或不具有相同的結果。 – Mojojojo
是否col C> 32,767中的任何值? –