2013-11-26 76 views
3

我創建了一個'driver'電子表格,用於控制(打開並運行等)其他工作簿上的宏。由於我正在使用的文件非常大,無法進一步修改,因此我要求提高效率。我讀過應用程序屏幕更新設置爲false幫助。我已經將驅動程序電子表格屏幕更新設置爲false(一旦整個過程完成,則返回true)。但是,當我運行驅動程序宏時,屏幕會定期更新(看起來像打開另一個子/宏/工作表時它會更新屏幕)。驅動程序打開的其他子/宏/工作簿也會在啓動時將屏幕更新設置爲false,並在最後返回true。VBA屏幕更新和效率

除了驅動程序以外的所有其他工作簿,可以將屏幕更新設置爲false(並且在完成時不會恢復爲true)嗎?我一直在閱讀,我必須始終回到真實......所以這讓我擔心。

+1

您是否檢查過關閉屏幕更新是否真的節省您的時間?有時候,就像圖表通過VBA代碼重複更新一樣。但是其他時候它差別很小,根本不值得擔心。 –

+0

我會考慮運行一個VBS或至少一個VBA例程,它可以在一個新的隱藏的Excel實例中完成所有工作 – brettdj

回答

0

您需要將要求納入整體設計。

假設您創建一個全局布爾值,稱爲DriverInControl該子驅動程序可以設置/清除。每個較低級別的潛艇都會被修改來檢查這個標誌。如果驅動程序設置了標誌,則驅動程序宣佈它正在控制屏幕更新,並且較低級別的子程序不會嘗試控制屏幕更新。

如果您沒有運行Driver,則默認情況下全局將爲False,並且較低級別的subs會承擔屏幕更新控制。

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 

這樣做是爲了避免任何不必要的切換,因爲有時它使用更多的時間來切換模式比通過切換其關閉,也保存它傾向於減少屏幕的閃爍。