У меня есть макрос, который вставляет 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 не поддерживает несколько потоков. Я прав, думая, что это проблема: «Листы (« Лист2 »). Ячейки (счетчик, 13) .Value = checker'? Он издает свои данные из столбца Sheet2. Столбец содержит формулу или значение? –
Да, tbh Я просто догадывался. Нет col 3 имеет номер, сохраненный в виде текста. он дает тот же результат, если он имеет .value или нет. – Mojojojo
Являются ли какие-либо значения в col C> 32,767? –