Сколько делает установку этих свойств, ускоряют Ваш макрос Excel: Приложение. ScreenUpdating, Приложение. DisplayAlerts

какой смысл того, чтобы делать их:

Application.ScreenUpdating = False
Application.DisplayAlerts = False

это действительно экономит так много времени?

6
задан Assad Ebrahim 20 February 2014 в 17:22
поделиться

4 ответа

Совершенно верно. Несколько лет назад у меня был давно работающий макрос, на выполнение которого у меня уходила почти минута. Я установил для ScreenUpdating значение false, и он завершился менее чем за 5 секунд.

Просто убедитесь, что вы сбросили ScreenUpdating на true, когда закончите запуск макроса.

4
ответ дан 8 December 2019 в 03:00
поделиться

Улучшение screenUpdating во многом зависит от того, как написан ваш макрос. Это будет особенно полезно с теми ужасными макросами, которые делает диктофон, полными ненужных «выбрать» и «активировать».

5
ответ дан 8 December 2019 в 03:00
поделиться

Я бы использовал их не для "скорости", а для "функции"

Когда вы не хотите, чтобы пользователь видел обновление экрана:

Application.ScreenUpdating = False

Когда вы не хотите, чтобы пользователь видел каждое лишнее сообщение от приложения:

Application.DisplayAlerts = False 

Особенно последнее, потому что никто не хочет быть забит до смерти сообщениями с вопросом, действительно ли вы хотите обновить, добавить или удалить записи. Я предпочитаю оградить пользователя от таких вещей.

3
ответ дан 8 December 2019 в 03:00
поделиться

Это зависит от того, сколько на самом деле вы обновляете на экране как часть кода (т. Е. Количество обновленных ячеек), и сколько листов там, сколько листов / ячеек ссылается на лист, который обновляется в вашем коде, и как много формул присутствует во всей книге.

Каждый раз, когда вы меняете что-то в таблице, Excel пересчитывает все формулы. Поэтому, если ваш код не обновляет слишком много листов / ячеек, но в вашей книге много формул, отключение обновления экрана может вам вообще не помочь.

Еще одна вещь, которую следует учитывать для повышения производительности, - это свойство Calculation, установите для него значение xlCalculationManual, чтобы отключить автоматическое пересчет и вернуть его в конце к xlCalculationAutomatic.

Application.Calculation = xlCalculationManual

Еще одна вещь, которую следует учитывать, - это события, если на одном или нескольких из этих листов есть обработчики событий Worksheet_Chnage или Worksheet_Calculate, каждое изменение, которое делает ваш код, вызовет их, и ваш код должен ждать, пока они не вернутся. Так что выключите его во время кода.

Application.EnableEvents = False

В большей части моего кода я обычно использую эту

On Error GoTo lblError
Dim bEvents As Boolean, iCalc As Integer, bScrnUpd As Boolean
bEvents = Application.EnableEvents
iCalc = Application.Calculation
bScrnUpd = Application.ScreenUpdating
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

'-----------------------My code

Application.EnableEvents = bEvents
Application.Calculation = iCalc
Application.ScreenUpdating = bScrnUpd
Exit Sub

'reset them even if you are exiting due to error
lblError:
Application.EnableEvents = bEvents
Application.Calculation = iCalc
Application.ScreenUpdating = bScrnUpd
Debug.print Err.Description
14
ответ дан 8 December 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: