我是一个相对 VBA 新手,正在设计一个相当复杂的宏,可以运行 10 秒到 10 分钟之间的任何时间,它的大部分工作在由 Dim appDatabaseInstance = New 创建的另一个不可见的 Excel 实例中完成Excel.Application
。在代码执行过程中会使用许多函数和子例程,虽然我已尽力确保每当出现任何半可预测的错误时都会调用 appDatabaseInstance.Quit
,但我无法控制一件事 - 用户。
具体来说,如果用户确定程序已崩溃并保留转义,VBA 将中断执行,并且由于中断发生的方式,我的垃圾收集例程(我认为)最终都不会发生。
因此,如果我能够以可预测的方式命名我创建的实例,然后在创建新实例之前尝试找到现有实例并适当处理它,我会更高兴。这样,即使不幸的应用程序实例保持打开状态,只要用户尝试涉及该程序的任何其他操作,它就会立即关闭(如果他们不这样做,那么一个实例不太可能在上下文中引起太多麻烦)。
有人有什么建议吗?
最佳答案
您可以使用 Application 对象的 EnableCancelKey
属性来确定当用户中断您的代码时会发生什么
我建议你看看this post on EnableCancelKey在迪克的博客。
总而言之,EnableCancelKey
具有三种可能的设置:
- xlDisable – 防止用户中断代码
- xlInterrupt – 正常操作。将显示调试器,并且代码在中断时所在的行处处于 Debug模式。
- xlErrorHandler – 引发错误号 18 并像任何其他错误一样使用react。如果您设置了错误处理,则会调用它。
关于excel - 如何实例化命名的 Excel.Application 对象以允许在意外情况发生后进行宏后垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949934/