如何防止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