我的宏更新了一个大型的数字电子表格,但由于Excel在计算结果时正在呈现它,所以运行速度非常慢。我该如何停止Excel在宏完成之前呈现输出结果?
我的宏更新了一个大型的数字电子表格,但由于Excel在计算结果时正在呈现它,所以运行速度非常慢。我该如何停止Excel在宏完成之前呈现输出结果?
我同时使用这两种方案:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = 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
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
在 Joe 和 SeeR 的基础上构建(这使用旧语法,因此与 Office 2000 的 VBA 兼容):
On Error Goto AfterCalculation
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
您可以在选项对话框中关闭自动计算,这样它只会在按下F9时进行计算。