Обеспечение обновления вызовов Excel во время выполнения кода VBA - PullRequest
0 голосов
/ 25 октября 2019

Я использую простой макрос с 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, чтобы помочь решить проблему, но это привело к возникновению других проблем, поэтому хотелось бы избежать чего-то подобного).

Спасибо всем,

Джим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...