在VBA中将ProgressBar UserForms显示为模态还是无模更好?在VBA中开发进度指标的最佳实践是什么?
无模式用户窗体需要使用Application.Interactive = False
,而模态用户窗体本质上会阻止与应用程序的任何交互,直到核心过程完成或被取消。
但是,如果使用Application.Interactive = False
,则Esc键会中断代码执行,因此在用户窗体和调用过程中都需要使用Application.EnableCancelKey = xlErrorHandler
和错误处理(Err.Number = 18
)。
资源密集型调用过程还可能导致在无模式UserForms中错误触发CommandButton_Click
和UserForm_Activate
事件。
通常,使用模态UserForms的进度指示器看起来更简单,因为正在执行的代码完全包含在UserForm模块中,并且不需要传递变量。
但是,使用模式UserForms作为进度指示器的问题在于,每个需要进度指示器的过程都需要一个单独的UserForm模块,因为调用过程必须在UserForm_Activate过程中。
因此,尽管在无模式UserForm中可以有一个可重复使用的进度指示器,但它比在多个模式UserForm中执行代码的可靠性低。
哪种方法更好?
谢谢!
最佳答案
还有第三种方法,使用Application.StatusBar
。
您甚至可以通过使用U + 25A0和U + 25A1字符序列来模拟真实的进度条。