將VBA中的ProgressBar用戶窗體顯示爲模態或無模式會更好嗎?在VBA中開發進度指標的最佳實踐是什麼?將VBA中的ProgressBar用戶窗體顯示爲模態或無模式會更好嗎?
無模式用戶窗體需要使用Application.Interactive = False
,而模態用戶窗體本質上阻止與應用程序的任何交互,直到核心過程完成或被取消。
但是,如果使用Application.Interactive = False
,則Esc鍵會中斷代碼執行,因此在用戶窗體和調用過程中都需要使用Application.EnableCancelKey = xlErrorHandler
和錯誤處理(Err.Number = 18
)。
資源密集型調用過程也可能導致CommandButton_Click
和UserForm_Activate
事件在無模式用戶窗體中失火。
通常,使用模式用戶窗體的進度指示器看起來更簡單,因爲正在執行的代碼完全包含在用戶窗體模塊中,並且不需要傳遞變量。
但是,使用用於進度指示器的模式UserForms的問題在於,需要進度指示器的每個過程都需要單獨的UserForm模塊,因爲調用過程必須位於UserForm_Activate過程中。
因此,雖然在無模式UserForm中可能有單個可重用的進度指示器,但它將比從多個模式用戶窗體中執行代碼的可靠性要低。
哪種方式更好?
謝謝!
謝謝GSerg的建議,但我曾嘗試過使用它,但Excel 2007停止更新窗口並在應用程序窗口頂部顯示「Not Responding」。 – Kuyenda 2010-01-31 00:41:27
我對office 2007不太瞭解,但是如果你在給'StatusBar'設置一個值之後立即調用DoEvents呢? – GSerg 2010-01-31 01:09:32
嗯,那工作。哇,這是一個不錯的選擇是不是!謝謝GSerg! – Kuyenda 2010-01-31 01:23:17