将 VBA 中的 ProgressBar UserForms 显示为模态还是非模态更好?在 VBA 中开发进度指标的最佳实践是什么?
无模式用户窗体需要使用Application.Interactive = False
,而模态用户窗体本质上会阻止与应用程序的任何交互,直到核心过程完成或被取消。
Application.Interactive = False
但是,如果使用 Esc 键会中断代码执行,因此在 UserForm 和调用过程中都需要使用Application.EnableCancelKey = xlErrorHandler
和错误处理 ( )。Err.Number = 18
资源密集型调用过程也可能导致无模式用户窗体中的事件失败CommandButton_Click
。UserForm_Activate
一般来说,使用模式 UserForms 的进度指示器看起来更简单,因为正在执行的代码完全包含在 UserForm 模块中,并且不需要传递变量。
然而,使用模式 UserForms 作为进度指示器的问题是,每个需要进度指示器的过程都需要一个单独的 UserForm 模块,因为调用过程必须在 UserForm_Activate 过程中。
因此,虽然可以在无模式用户窗体中拥有一个可重用的进度指示器,但它的可靠性不如从多个模式用户窗体中执行代码。
哪种方式更好?
谢谢!