Всеки път, когато актуализирате стойност на клетка, Excel преминава през процес за преизчисляване на работната книга. Когато работите директно в Excel, искате това да се случва 99,9% от времето (изключението е, ако работите с изключително голяма работна книга). Това обаче може наистина да забави вашия VBA код. Добра практика е да настроите изчисленията си на ръчни в началото на макросите и да възстановите изчисленията в края на макросите. Ако трябва да преизчислите работната книга, можете ръчно да кажете на Excel да изчисли.
Изключете автоматичните изчисления
Можете да изключите автоматичното изчисление с макрос, като го зададете на xlmanual. Използвайте следния код на VBA:
1 | Application.Calculation = xlManual |
Включете отново автоматичните изчисления
За да включите отново автоматичното изчисление с настройката xlAutomatic:
1 | Приложение.Изчисляване = xlАвтоматично |
Препоръчвам да деактивирате автоматичните изчисления в самото начало на вашата процедура и да активирате отново автоматичните изчисления в края. Ще изглежда така:
Деактивиране на пример за макрос за автоматични изчисления
12345678 | Sub Auto_Calcs_Example ()Application.Calculation = xlManual'Направи нещоПриложение.Изчисляване = xlАвтоматичноEnd Sub |
Ръчно изчисление
Когато автоматичните изчисления са деактивирани, можете да използвате Изчисли команда за принуждаване на Excel да преизчисли:
1 | Изчисли |
Можете също така да кажете на Excel да преизчисли само отделен работен лист:
1 | Работни листове ("лист1"). Изчислете |
Можете също така да кажете на VBA да преизчисли само диапазон (кликнете, за да прочетете нашата статия за методите за изчисляване на VBA)
Ето как това може да изглежда в макроса:
12345678910111213 | Sub Auto_Calcs_Example_Manual_Calc ()Application.Calculation = xlManual'Направи нещо- ПреизчислиИзчисли„Правете повече нещаПриложение.Изчисляване = xlАвтоматичноEnd Sub |
Настройки на VBA - Код за ускоряване
Ако целта ви е да ускорите кода си, трябва да помислите и за коригиране на тези други настройки:
Деактивирането на актуализацията на екрана може да направи огромна разлика в скоростта:
1 | Application.ScreenUpdating = False |
Изключването на лентата на състоянието също ще има малка разлика:
1 | Application.DisplayStatusBar = False |
Ако вашата работна книга съдържа събития, трябва също да деактивирате събития в началото на вашите процедури (за да ускорите кода и да предотвратите безкрайни цикли!):
1 | Application.EnableEvents = False |
И накрая, вашият VBA код може да бъде забавен, когато Excel се опитва да преизчисли прекъсванията на страниците (Забележка: не всички процедури ще бъдат засегнати). За да изключите DisplayPageBreaks, използвайте този ред код:
1 | ActiveSheet.DisplayPageBreaks = False |