VBA ScreenUpdate和效率

时间:2013-11-26 13:30:11

标签: excel performance vba excel-vba

我创建了一个“驱动程序”电子表格,用于控制(打开和运行等)其他工作簿上的宏。我努力提高效率,因为我正在使用的文件非常大,无法进一步更改。我已经读过将应用程序屏幕更新设置为false有帮助。我已将驱动程序电子表格屏幕更新设置为false up(然后在整个过程完成后再返回true)。但是,当我运行驱动程序宏时,屏幕会定期更新(看起来它在打开另一个子/宏/工作表时会更新屏幕)。驱动程序打开的其他子/宏/工作簿在启动时也会将屏幕更新设置为false,并在结束时返回true。

对于除驱动程序之外的所有其他工作簿,我可以将屏幕更新设置为false(并且在完成时不会还原为true)吗?我一直在读,我必须总是回归真实...所以它让我担心。

2 个答案:

答案 0 :(得分:2)

只是分享,我使用的方法是这样的:

Sub passiveRoutine()

Dim ScrnMode as Boolean

With Application
  ScrnMode = .Screenupdating
  If ScrnMode then .Screenupdating = False
End with

Do stuff


If ScrnMode then Application.Screenupdating = True
End Sub

Sub activeRoutine()

Dim ScrnMode as Boolean

With Application
  ScrnMode = .Screenupdating
  If Not ScrnMode then .Screenupdating = True
End with

Do stuff


If Not ScrnMode then Application.Screenupdating = False
End Sub

这个想法是为了避免任何不必要的切换,因为有时它使用更多的时间来切换模式,而不是通过关闭它来节省的时间,而且,它往往会减少屏幕的闪烁。

答案 1 :(得分:0)

您需要将要求纳入整体设计中。

假设你创建一个名为 DriverInControl 的全局布尔值,子驱动程序可以设置/清除。将修改每个较低级别的子级以检查该标志。如果Driver设置了标志,Driver会宣布它控制了screenupdating,而较低级别的sub将不会试图控制screenupdating。

如果你没有运行Driver,默认情况下全局将为False,而较低级别的subs将控制screenupdating。