VBA ScreenUpdate和效率

我创build了一个“驱动程序”电子表格,用于控制(打开并运行等)其他工作簿上的macros。 由于我正在使用的文件非常大,不能进一步修改,因此我要求效率。 我读过应用程序屏幕更新设置为false帮助。 我已经将驱动程序电子表格屏幕更新设置为false(一旦整个过程完成,则返回true)。 但是,当我运行驱动macros,屏幕会定期更新(看起来像打开另一个子/macros/工作表时更新屏幕)。 驱动程序打开的其他子/macros/工作簿也会在启动时将屏幕更新设置为false,并在最后返回true。

除了驱动程序之外,是否可以将屏幕更新设置为false(而不是在完成时还原为true)? 我一直在阅读,我必须始终回到真实…所以这让我担心。

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

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 

这个想法是为了避免任何不必要的切换,因为有时切换模式需要更多的时间,而不是通过closures切换来节省时间,而且还会减less屏幕的闪烁。

您需要将该要求纳入您的整体devise。

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

如果你没有运行Driver,默认情况下全局为False,而下层的子控件将控制screenupdating。