Как программно вычислить формулы, в т.ч. и пользовательские функции?
Для того, чтобы программно пересчитать формулы, в т.ч. и volatile - пользовательские функции, можно использовать метод Calculate, который позволяет пересчитывать формулы:
- во всех открытых рабочих книгах
- в нужном рабочем листе
- только в определённом диапазоне
Calculate 'Application.Calculate Worksheets(1).Calculate 'Workbooks(...).Worksheets(...) Range("A1:C3").Calculate 'Workbooks(...).Worksheets(...).Range(...)
Для пересчёта же всех формул, включая все пользовательские (собственные) функции, нужно использовать комбинацию клавиш CTRL + ALT + F9, т.е.
Application.SendKeys "^%{F9}" 'SendKeys "^%{F9}"
Актуально только для MS Excel 2000, XP
В этой версии, вместо имитации нажатия горячих клавиш, можно использовать
Application.CalculateFull
Вычисление формул массива : Если формула массива введена в одну
единственную ячейку, то её вычисление ничем не отличается от вычисления
обычной формулы, т.е. Range("A1").Calculate
Если же она введена в несколько ячеек, допустим A1:C1 , то в версиях
95, 97, 2000 для пересчёта всех ячеек можно указать как все ячейки,
содержащие эту формулу, т.е. Range("A1:C1").Calculate так и только часть
ячеек, например, Range("A1").Calculate или Range("C1:C3").Calculate
Однако, уже в MS Excel XP разработчики изменили принцип пересчёта,
о чём, кстати, честно признались на своём сайте, и теперь, необходимо
указывать все ячейки, иначе возникнет ошибка.