如何防止Excel在我的宏进行计算时呈现电子表格?

时间:2020-03-06 14:49:42  来源:igfitidea点击:

我的宏使用数字更新了一个大型电子表格,但是由于excel在计算结果时会呈现结果,因此运行速度非常慢。在宏完成之前,如何停止excel渲染输出?

解决方案

我们可以在选项对话框中关闭自动计算,将其设置为仅在按F9时才进行计算。

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

我使用两种建议的解决方案:

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

在Joe和SeeR的基础上构建(它使用旧语法,因此与Office 2000的VBA兼容):

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

AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

我也更喜欢同时使用两种建议的解决方案,
而且还保留了用户以前的计算模式。

对于这个特定的应用程序,这可能并不重要,
但是通常最好的做法是让用户在过程完成后恢复其设置:

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

注意如果其他出色代码中发生错误,也值得我们花一些时间插入一些打开Application.ScreenUpdating的错误处理;)
如果我的记忆正确,当ScreenUpdating = false时,Excel将不会显示任何错误消息等。
像这样的东西:

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