在VBA中将ProgressBar UserForms显示为模态还是无模更好?在VBA中开发进度指标的最佳实践是什么?

无模式用户窗体需要使用Application.Interactive = False,而模态用户窗体本质上会阻止与应用程序的任何交互,直到核心过程完成或被取消。

但是,如果使用Application.Interactive = False,则Esc键会中断代码执行,因此在用户窗体和调用过程中都需要使用Application.EnableCancelKey = xlErrorHandler和错误处理(Err.Number = 18)。

资源密集型调用过程还可能导致在无模式UserForms中错误触发CommandButton_ClickUserForm_Activate事件。

通常,使用模态UserForms的进度指示器看起来更简单,因为正在执行的代码完全包含在UserForm模块中,并且不需要传递变量。

但是,使用模式UserForms作为进度指示器的问题在于,每个需要进度指示器的过程都需要一个单独的UserForm模块,因为调用过程必须在UserForm_Activate过程中。

因此,尽管在无模式UserForm中可以有一个可重复使用的进度指示器,但它比在多个模式UserForm中执行代码的可靠性低。

哪种方法更好?

谢谢!

最佳答案

还有第三种方法,使用Application.StatusBar
您甚至可以通过使用U + 25A0和U + 25A1字符序列来模拟真实的进度条。

09-26 23:25