Как запретить Excel отображать электронную таблицу, так как мой макрос вычисляет ее? - PullRequest
8 голосов
/ 27 сентября 2008

Мой макрос обновляет большую таблицу с числами, но она работает очень медленно, так как Excel отображает результат при его вычислении. Как мне остановить Excel от рендеринга вывода до завершения макроса?

Ответы [ 5 ]

16 голосов
/ 27 сентября 2008

Я использую оба предложенных решения:

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
2 голосов
/ 17 января 2009

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

Для этого конкретного приложения это может быть не важно, но обычно рекомендуется разрешить пользователям восстанавливать свои настройки после завершения вашей процедуры:

Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
   ...  
   ...
   ...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True

NB. Также стоит потратить некоторое время на вставку обработки ошибок, которая включает Application.ScreenUpdating, если в вашем другом блестящем коде произойдет ошибка; Если память мне не изменяет, Excel не будет отображать сообщения об ошибках и т. Д., Когда ScreenUpdating = false. Как то так:

Sub DoSomeThing


On Error Goto DisplayError

Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
   ...  
   ...
   ...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True

Exit Sub

DisplayError:
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True

MsgBox Err.Description
End 'This stops execution of macro, in some macros this might not be what you want'
    '(i.e you might want to close files etc)'
End Sub
2 голосов
/ 27 сентября 2008

Application.ScreenUpdating = False

И, конечно, снова установите значение True, когда вы закончите, даже если возникла ошибка. Пример:

Public Sub MyMacro
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False
    ... do my stuff that might raise an error
    Application.ScreenUpdating = True
    Exit Sub
ErrHandler:
    Application.ScreenUpdating = True
    ... Do something with the error, e.g. MsgBox       
End Sub
1 голос
/ 27 сентября 2008

Опираясь на Джо и SeeR (используется старый синтаксис, поэтому он совместим с VBA Office 2000):

On Error Goto AfterCalculation
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...

AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
0 голосов
/ 27 сентября 2008

Вы можете отключить автоматический расчет в диалоговом окне параметров, он устанавливает его так, что он рассчитывает только при нажатии клавиши F9.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...