Как программно вычислить формулы, в т.ч. и пользовательские функции?

Для того, чтобы программно пересчитать формулы, в т.ч. и volatile - пользовательские функции, можно использовать метод Calculate, который позволяет пересчитывать формулы:

  • во всех открытых рабочих книгах
  • в нужном рабочем листе
  • только в определённом диапазоне
code: #vba
Calculate 'Application.Calculate

Worksheets(1).Calculate 'Workbooks(...).Worksheets(...)

Range("A1:C3").Calculate 'Workbooks(...).Worksheets(...).Range(...)

Для пересчёта же всех формул, включая все пользовательские (собственные) функции, нужно использовать комбинацию клавиш CTRL + ALT + F9, т.е.

code: #vba
Application.SendKeys "^%{F9}" 'SendKeys "^%{F9}"

Актуально только для MS Excel 2000, XP

В этой версии, вместо имитации нажатия горячих клавиш, можно использовать

code: #vba
Application.CalculateFull

Вычисление формул массива : Если формула массива введена в одну единственную ячейку, то её вычисление ничем не отличается от вычисления обычной формулы, т.е. Range("A1").Calculate Если же она введена в несколько ячеек, допустим A1:C1 , то в версиях 95, 97, 2000 для пересчёта всех ячеек можно указать как все ячейки, содержащие эту формулу, т.е. Range("A1:C1").Calculate так и только часть ячеек, например, Range("A1").Calculate или Range("C1:C3").Calculate
Однако, уже в MS Excel XP разработчики изменили принцип пересчёта, о чём, кстати, честно признались на своём сайте, и теперь, необходимо указывать все ячейки, иначе возникнет ошибка.

Поделиться:

Похожие статьи: