在VBA中将ProgressBar UserForms显示为有模式或无模式哪一个更好?在VBA中开发进度指示器的最佳实践是什么?
无模式UserForms需要使用Application.Interactive = False,而模态UserForms的本质是阻止与应用程序的任何交互,直到核心过程完成或被取消。
但是,如果使用Application.Interactive = False,Esc键会中断代码执行,因此在UserForm和调用过程中都需要使用Application.EnableCancelKey = xlErrorHandler和错误处理(Err.Number = 18)。
资源密集型调用过程还可能导致CommandButton_Click和UserForm_Activate事件在无模式UserForms中无法触发。
通常,使用模态UserForms的进度指示器看起来更简单,因为正在执行的代码完全包含在UserForm模块中,并且不需要传递变量。
但是,将模态UserForms用于进度指示器的问题是,每个需要进度指示器的过程都需要一个单独的UserForm模块,因为调用过程必须在UserForm_Activate过程内。
因此,虽然在非模态UserForm中可以有单个可重用的进度指示器,但它的可靠性不如从多模态UserForms中执行代码。
哪种方式更好?
谢谢!
发布于 2010-02-03 00:53:57
我将结束这一个,并说Modal是胜利者。这两种方法我都试过了,但是你最终还是试图用非模态用户表单来堵塞太多的漏洞。Modal更难,因为它更严格,但它鼓励您将代码拆分成更小的块,这在长期运行中会更好。
发布于 2010-01-31 08:29:54
还有第三种方法,使用Application.StatusBar。您甚至可以使用U+25A0和U+25A1字符序列来模拟真正的进度条。
发布于 2010-11-29 08:24:28
绝对是莫代尔。如果你打算考虑无模式,你应该在单独的进程外线程上运行它,而不是在Excel.exe主线程上。
https://stackoverflow.com/questions/2169975
复制相似问题