МЕНЮ САЙТА
КАТЕГОРИИ РАЗДЕЛА
ОПРОСЫ Какой версией Excel Вы пользуетесь? Office 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Excel 2007 Excel 2003 Excel 2002 Excel 2000 Excel 1997 или ранее Mac Excel [ Результаты · Все опросы ] Всего ответов: 55669 |
Отключение обновления экрана для ускорения работы макроса
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ] |
Return to VBA Code Examples
In this Article
- Disable ScreenUpdating
- Enable ScreenUpdating
- VBA ScreenUpdating Example
- ScreenUpdating Refresh
- VBA Settings – Speed Up Code
- VBA Coding Made Easy
As cool as it looks watching your VBA macro manipulate the screen, you can help your Macro run faster if you turn off (disable) ScreenUpdating.
Disable ScreenUpdating
1. To disable ScreenUpdating, At the beginning of your code put this line:
Application.ScreenUpdating = False
Enable ScreenUpdating
2. To re-enable ScreenUpdating, At the end of your code put this line:
Application.ScreenUpdating = True
VBA ScreenUpdating Example
Your procedure will then look like this:
Sub ScreenUpdating_Example()
Application.ScreenUpdating = False
'Do Something
Range("a1").Copy Range("b1")
Range("a2").Copy Range("b2")
Range("a3").Copy Range("b3")
Application.ScreenUpdating = True
End Sub
ScreenUpdating Refresh
Disabling ScreenUpdating will make your VBA code run MUCH faster, but it will also make your work appear more professional. End-users typically don’t want to see the behind the scenes actions of your procedures (especially when the procedure runs slow). Also, you may not want end-users to see the behind the scenes functionality (ex. Hidden Worksheets). I recommend disabling (and re-enabling) ScreenUpdating in virtually all of your procedures.
However, there are some times when you want the screen to refresh. To refresh the screen, you will need to temporarily turn back on ScreenUpdating (there is no screen “refresh” command):
Application.ScreenUpdating = True
'Do Something
Application.ScreenUpdating = False
VBA Settings – Speed Up Code
There are several other settings to play with to improve your code speed.
Disabling Automatic Calculations can make a HUGE difference in speed:
Application.Calculation = xlManual
Disabling the Status Bar will also make a small difference:
Application.DisplayStatusBar = False
If your workbook contains events you should usually disable events at the beginning of your procedure:
Application.EnableEvents = False
Last, your VBA code can be slowed down when Excel tries to re-calculate page breaks (Note: not all procedures will be impacted). To disable displaying page breaks use this line of code:
ActiveSheet.DisplayPageBreaks = False
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
Александр Меркулов
Пользователь
Сообщений: 45
Регистрация: 01.09.2016
#1
19.05.2017 14:09:01
Здравсвуйте, помню натыкался на тему, в которой говорили про возможность ускорить работу макросов путём отключения отображения каждого процесса. Т.е. необходимо сделать так, что бы после нажатия на кнопку были пауза(визуально), после которой выводился уже готовый результат, а не моргание строчек.
Небольшая процедурка, которая умеет вкл/выкл визуализацию работы макроса.
Очень помогает сократить время отработки макроса на больших объемах данных.
Код
Sub Vis(flag As Boolean)
With Application
.Calculation = IIf(flag, xlCalculationAutomatic, xlCalculationManual)
.ScreenUpdating = flag
.EnableEvents = flag
.DisplayStatusBar = flag
.DisplayAlerts = flag
End With
End Sub
Пример вызова
Call Vis(False)
Call Vis(True)
Ну и кусок кода для вывода информационного сообщения в статус бар.
Код
Application.StatusBar = «Текст сообщения»
DoEvents
Содержание
- Отключить обновление экрана
- Включить обновление экрана
- Пример обновления экрана VBA
- Обновление экрана Обновить
Как бы здорово это ни выглядело, наблюдая, как ваш макрос VBA манипулирует экраном, вы можете помочь вашему макросу работать быстрее, если отключите (отключите) ScreenUpdating.
Отключить обновление экрана
1. Чтобы отключить ScreenUpdating, в начале кода поместите эту строку:
1 | Application.ScreenUpdating = False |
Включить обновление экрана
2. Чтобы снова включить ScreenUpdating, в конце кода поместите эту строку:
1 | Application.ScreenUpdating = True |
Тогда ваша процедура будет выглядеть так:
1234567891011 | Sub ScreenUpdating_Example ()Application.ScreenUpdating = False’Сделай что-нибудьДиапазон («a1»). Копировать диапазон («b1»)Диапазон («a2»). Копировать диапазон («b2»)Диапазон («a3»). Копировать диапазон («b3»)Application.ScreenUpdating = TrueКонец подписки |
Обновление экрана Обновить
Отключение ScreenUpdating заставит ваш код VBA работать НАМНОГО быстрее, но это также сделает вашу работу более профессиональной. Конечные пользователи обычно не хотят видеть закулисные действия ваших процедур (особенно, когда процедура выполняется медленно). Кроме того, вы можете не захотеть, чтобы конечные пользователи видели скрытые функции (например, скрытые рабочие листы). Я рекомендую отключить (и снова включить) ScreenUpdating практически во всех ваших процедурах.
Однако бывают случаи, когда вы хотите, чтобы экран обновился. Чтобы обновить экран, вам нужно будет временно снова включить ScreenUpdating (нет команды «обновить» экрана):
123 | Application.ScreenUpdating = True’Сделай что-нибудьApplication.ScreenUpdating = False |
Настройки VBA — код ускорения
Есть несколько других настроек, с которыми можно поиграть, чтобы улучшить скорость вашего кода.
Отключение автоматических вычислений может ОГРОМНО изменить скорость:
1 | Application.Calculation = xlManual |
Отключение строки состояния также имеет небольшое значение:
1 | Application.DisplayStatusBar = False |
Если ваша рабочая книга содержит события, вам обычно следует отключать события в начале процедуры:
1 | Application.EnableEvents = False |
Наконец, ваш код VBA может замедлиться, когда Excel пытается повторно вычислить разрывы страниц (Примечание: не все процедуры будут затронуты). Чтобы отключить отображение разрывов страниц, используйте эту строку кода:
1 | ActiveSheet.DisplayPageBreaks = False |