我创建了一个“驱动程序”电子表格,用于控制(打开和运行等)其他工作簿上的宏。我努力提高效率,因为我正在使用的文件非常大,无法进一步更改。我已经读过将应用程序屏幕更新设置为false有帮助。我已将驱动程序电子表格屏幕更新设置为false up(然后在整个过程完成后再返回true)。但是,当我运行驱动程序宏时,屏幕会定期更新(看起来它在打开另一个子/宏/工作表时会更新屏幕)。驱动程序打开的其他子/宏/工作簿在启动时也会将屏幕更新设置为false,并在结束时返回true。
对于除驱动程序之外的所有其他工作簿,我可以将屏幕更新设置为false(并且在完成时不会还原为true)吗?我一直在读,我必须总是回归真实...所以它让我担心。
答案 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。