将VBA中的ProgressBar UserForms显示为模态还是无模式更好?

Kuy*_*nda 8 vba modal-dialog modeless userform progress-indicator

将VBA中的ProgressBar UserForms显示为模态还是无模式更好?在VBA中制定进度指标的最佳做法是什么?

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

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

资源密集型调用程序也能导致CommandButton_ClickUserForm_Activate在无模式用户窗体哑火事件.

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

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

因此,虽然在无模式UserForm中可以有一个可重用的进度指示器,但它比在多个模态UserForms中执行代码的可靠性低.

哪种方式更好?

谢谢!

Kuy*_*nda 1

我要结束这个比赛并说莫代尔是胜利者。我已经尝试了这两种方法,但最终你试图用无模式用户表单来堵住太多的漏洞。模态更困难,因为它更严格,但它鼓励您将代码分解成更小的块,从长远来看这更好。