Я использую простой макрос с Application.Calculation
, установленным на xlCalculationManual
. В цикле (с тысячами итераций) макрос:
- Записывает входные данные для итерации в ячейки на рабочем листе
- Запускает метод
Worksheet.Calculate
- Захватывает значения, возвращаемые формулами на листе
- Записывает эти значения на другой лист
Я всегда предполагал, что Worksheet.Calculate
гарантирует, что значения, возвращаемые моими формулами, будут соответствовать-дата.
Но некоторые недавние отладки предположили, что это может быть не так.
Я нашел их во время исследования этого:
https://social.msdn.microsoft.com/Forums/office/en-US/c25e60f3-fbd6-4ced-9b56-9265ecc95577/vba-applicationcalculate-unreliable-?forum=exceldev
http://dailydoseofexcel.com/archives/2009/07/01/interrupting-calculations/
Но они 'Мне было несколько лет, и я подумал, есть ли какой-нибудь более свежий совет.
Ребята рекомендуют установить Application.CalculationInterruptKey
в xlNoKey
(или xlEscKey
) перед запуском кода, а затем вернутьсяк исходному значению после завершения?
Или помещая Worksheet.Calculate
в цикл while, который проверяет Application.CalculationState = xlDone
?
Или какой-то другой подход?
Есть ли какие-либонюансы или побочные эффекты, которые я должен принимать во внимание (я недавно использовал DoEvents
, чтобы помочь решить проблему, но это привело к возникновению других проблем, поэтому хотелось бы избежать чего-то подобного).
Спасибо всем,
Джим