8

我的宏用数字更新了一个大型电子表格,但它运行非常缓慢,因为 excel 在计算结果时会渲染结果。如何在宏完成之前停止 excel 渲染输出?

4

5 回答 5

16

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

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
于 2008-09-27T18:11:49.177 回答
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
于 2008-09-27T18:05:28.693 回答
2

我也更喜欢使用这两种建议的解决方案,但也保持用户以前的计算模式。

对于这个特定的应用程序,这可能没什么大不了的,但通常最好的做法是让用户在您的过程完成后恢复他们的设置:

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
于 2009-01-17T00:30:38.473 回答
1

基于 Joe 和 SeeR(这使用旧语法,因此它与 Office 2000 的 VBA 兼容):

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

AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
于 2008-09-27T18:49:53.733 回答
0

您可以在选项对话框中关闭自动计算,它将其设置为仅在您按 F9 时计算。

于 2008-09-27T18:03:17.030 回答