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