Каждый раз, когда вы обновляете значение ячейки, Excel выполняет процесс пересчета книги. При работе непосредственно в Excel вы хотите, чтобы это происходило в 99,9% случаев (за исключением случаев, когда вы работаете с очень большой книгой). Однако это может действительно замедлить ваш код VBA. Рекомендуется устанавливать вычисления вручную в начале макроса и восстанавливать вычисления в конце макроса. Если вам нужно пересчитать книгу, вы можете вручную указать Excel для расчета.
Отключить автоматические вычисления
Вы можете отключить автоматический расчет с помощью макроса, установив для него значение xlmanual. Используйте следующий фрагмент кода VBA:
1 | Application.Calculation = xlManual |
Снова включите автоматические вычисления
Чтобы снова включить автоматический расчет с настройкой xlAutomatic:
1 | Application.Calculation = xlAutomatic |
Я рекомендую отключить автоматические вычисления в самом начале процедуры и снова включить автоматические вычисления в конце. Это будет выглядеть так:
Пример макроса "Отключить автоматические вычисления"
12345678 | Sub Auto_Calcs_Example ()Application.Calculation = xlManual'Сделай что-нибудьApplication.Calculation = xlAutomaticКонец подписки |
Расчет вручную
Когда автоматические вычисления отключены, вы можете использовать Рассчитать команда для принудительного пересчета Excel:
1 | Рассчитать |
Вы также можете указать Excel, чтобы он пересчитывал только отдельный рабочий лист:
1 | Рабочие листы ("лист1"). Рассчитать |
Вы также можете указать VBA пересчитать только диапазон (щелкните, чтобы прочитать нашу статью о методах вычисления VBA)
Вот как это может выглядеть внутри макроса:
12345678910111213 | Sub Auto_Calcs_Example_Manual_Calc ()Application.Calculation = xlManual'Сделай что-нибудь'RecalcРассчитать'Делай больше вещейApplication.Calculation = xlAutomaticКонец подписки |
Настройки VBA - код ускорения
Если ваша цель - ускорить код, вам также следует подумать о настройке следующих параметров:
Отключение обновления экрана может существенно повлиять на скорость:
1 | Application.ScreenUpdating = False |
Отключение строки состояния также имеет небольшое значение:
1 | Application.DisplayStatusBar = False |
Если ваша книга содержит события, вам также следует отключить события в начале ваших процедур (чтобы ускорить код и предотвратить бесконечные циклы!):
1 | Application.EnableEvents = False |
Наконец, ваш код VBA может замедлиться, когда Excel пытается повторно вычислить разрывы страниц (Примечание: не все процедуры будут затронуты). Чтобы отключить DisplayPageBreaks, используйте эту строку кода:
1 | ActiveSheet.DisplayPageBreaks = False |