如何防止Excel在宏计算时渲染电子表格?

8

我的宏更新了一个大型的数字电子表格,但由于Excel在计算结果时正在呈现它,所以运行速度非常慢。我该如何停止Excel在宏完成之前呈现输出结果?

5个回答

16

我同时使用这两种方案:

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

2

应用程序.屏幕更新 = 假

当您完成后,即使出现错误,也一定要将其设置回真。例如:

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

我也倾向于同时使用两种提出的解决方案,同时保留用户之前的计算模式。

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

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

1

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

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

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

0

您可以在选项对话框中关闭自动计算,这样它只会在按下F9时进行计算。


我的宏只有在我执行它时才运行,所以在这方面我很好,但我不想看到Excel复制数据(如宏所指定)的过程,只想看到最终结果。 - Oskar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接