将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