Excel - фоновое выполнение
Application.ScreenUpdating = False
т.е. пересчёт листа и выполнение кода VBA идут параллельно - безотносительно к настройкам Excel и VBA самый кондовый способ засунуть на лист какой-нибудь флаг и проверять его значение в VBA в цикле, в надежде, что обновив флаг во время Calculate он обновил до этого нужную тебе ячейку, но для этого надо знать в каком порядке лист персчитывается
в VBA во View - Object Browser глянь справку на Application.CalculationState
Если что, делал так:
Worksheets("Sheets1").Range("I").Value = textboxI.value
' Эта строчка не нужна Worksheets("Sheets2").Calculate
Application.Calculate
While (Aplication.CalculationState <> xlDone)
Wend
Worksheets("Sheets3").Range("J").Value =Worksheets("Sheets2").Range("K").Value
Сперва пробовал пересчитывать только один лист, затем - два, но эксель все время торчал в состоянии xlPending. В итоге грубо и долго, но зато наверняка
Worksheets("Sheets2").Calculate
написал:
Application.Calculate
Оставить комментарий
Alena727
Есть код на VBA, который подставляет значение в ячейку листа, пересчитывает другой лист с зависимыми данными и делает дальше много всего разного. Что-то типа:Возникла такая проблема, что иногда код идет дальше не успевая пересчитать лист.
То есть на лист Sheets3 попадает старое значение ячейки К, что меня естественно совершенно не устраивает. Что делать?
Я пробовал следующие извраты:
1) Засунуть пересчет листа в отдельный макрос
2) Сделать Application.Wait
Не помогло.
На одном из форумов прочитал магическую фразу "Нужно было фоновое обновление запроса для листа таблицы отключить". Но как это сделать не нашёл.
Кто-нибудь сталкивался с таким?