我的宏用数字更新了一个大型电子表格,但它运行得非常慢,因为excel在计算结果时呈现结果。在宏完成之前,如何停止excel渲染输出?
答案 0 :(得分:16)
我使用两种建议的解决方案:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
答案 1 :(得分:2)
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
答案 2 :(得分:2)
我也更喜欢使用两种建议的解决方案, 但也保持用户以前的计算模式。
对于这个特定的应用程序,这可能没什么大不了的, 但通常最好的做法是让用户在完成程序后恢复设置:
Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True
NB。还值得花些时间插入一些错误处理,打开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
答案 3 :(得分:1)
以Joe和SeeR为基础(这使用旧语法,因此它与Office 2000的VBA兼容):
On Error Goto AfterCalculation
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
答案 4 :(得分:0)
您可以在选项对话框中关闭自动计算,它会将其设置为仅在您按F9时计算。