2014-02-12 4 views
3

Я надеялся на некоторое понимание ошибки, которую я не смог воспроизвести.Я случайно создал условие гонки vba?

У меня очень сложный рабочий лист, который меняет многие переменные, чтобы получить определенную ячейку aa5, чтобы вернуть строку. если какое-либо условие не выполняется, оно возвращает 0. формула для этой ячейки является

=IF(SUM(AA2:AA4)=0,SubItem,0) 

, где aa2:aa4 являются условия, которые должны быть 0, чтобы вернуть строку и subitem это именованный диапазон ячеек.

Как только он возвращает строку, у меня есть модуль для вставки ячейки aa5 на другой лист export. Проблема в том, что после запуска программы (она занимает около 20 минут) я нахожу 0 значений в листе export.

Я попытался вручную изменить все переменные на условие, создавшее ошибку, и ни один не появляется. Я также попытался запустить код по очереди и, похоже, не может его реплицировать.

Моя последняя соломинка вставлял в модуле, паст в export лист

If Worksheets("analysis").Range("aa5").Value = 0 Then 
Exit Sub 

И еще у меня есть значения 0 после запуска!

Я не программист, но у меня есть некоторый опыт работы с кодом VBA, возможно ли, что я создал условие гонки, где 0 копируется до того, как обновляется if, но он все еще проходит проверку vba?

ответ

2

Попробуйте рассчитать значение, прежде чем использовать его в VBA:

With Worksheets("analysis").Range("aa5") 
    .Calculate 
    If .Value <> 0 Then 
     Worksheets("export").Range("A1").Value = .Value 
    End If 
End With 
+1

Я побежал это и работает, я попробую еще несколько раз, прежде чем принять. Я бы предположил, что ячейка будет вычисляться во время 'if' в vba. Любая идея, почему этого не может быть? –

+1

Я пытаюсь догадаться, что ваша книга имеет много формул и перерасчет занимает некоторое время. VBA не ждет конца пересчета, пока вы не назовете '.Calculate' явно. Другая возможная проблема - у вас может быть ручной режим расчета для вашей книги –

Смежные вопросы