介紹各種加速 Excel VBA 程式執行效率的技巧,包含暫停更新畫面與狀態列、暫停事件處理、暫停公式自動計算。
Excel VBA 巨集程式對於處理少量的資料來說,是非常好用的自動化工具,但是如果資料量或計算量非常龐大時,頻繁存取 Excel 試算表的資料,會造成程式效能大幅降低,執行速度變得很慢。
以下我們介紹一些常用來加速 Excel VBA 巨集程式的方法,大部分的情況下使用這些技巧多少都會對程式的執行效能有所幫助。
當 VBA 巨集程式在控制 Excel 進行各種動作時(例如切換工作表等),使用者可以在螢幕上直接看到所有的操作,這樣雖然可以很方便看到 VBA 巨集程式目前執行的進度,但是要一邊執行程式一邊更新畫面,其實是會大幅拖慢執行速度的,這時候如果可以暫時停止更新畫面,等到所有的動作執行完,最後再更新的話,可以讓程式加速非常多。
若要讓某段 VBA 巨集程式在執行時,暫停畫面更新,可以再該程式碼的前後分別加上暫停與恢復畫面更新的設定:
' 暫停畫面更新 Application.ScreenUpdating = False ' 主要程式碼放在這裡 ' 恢復畫面更新 Application.ScreenUpdating = True
這樣一來再主要程式碼執行時,畫面就會暫時停止更新,而等到執行結束後,就會恢復正常,雖然看起來有點像當機的樣子,不過執行速度會快很多。
Excel 狀態列的更新也會多少拖慢執行速度,程式執行時可將其暫時關閉:
' 暫停狀態列更新 Application.DisplayStatusBar = False ' 主要程式碼放在這裡 ' 恢復狀態列更新 Application.DisplayStatusBar = True
事件處理也是一種會拖慢執行速度的 Excel 功能,我們也可以用同樣的方式,暫時將其關閉:
' 暫停事件處理 Application.EnableEvents = False ' 主要程式碼放在這裡 ' 恢復事件處理 Application.EnableEvents = True
Excel 在資料變動時會自動計算資料表中的公式,暫停這個功能也可以加入程式的執行,等待所有的計算完成後,再恢復自動計算功能:
' 暫停公式自動計算 Application.Calculation = xlCalculationManual ' 主要程式碼放在這裡 ' 恢復公式自動計算 Application.Calculation = xlCalculationAutomatic
大部分的情況下,我們可以同時將以上四種會影響執行速度的 Excel 功能都暫停,讓程式以最有效率的方式執行:
' 暫停四個容易拖慢的 Excel 功能 Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False ' 主要程式碼放在這裡 ' 恢復四個容易拖慢的 Excel 功能 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayStatusBar = True Application.EnableEvents = True
在撰寫 VBA 巨集程式時,就把這段程式碼直接貼在子程序(Sub)中,這樣就可以輕鬆提升程式的執行速度了。
參考資料:StackOverflow