excel - 如何实例化命名的 Excel.Application 对象以允许在意外情况发生后进行宏后垃圾回收

标签 excel excel-2003 vba

我是一个相对 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/

相关文章:

vba - Excel 2003 : Active-X bug from Dec 2014 "update" -- still broke. 还有什么要尝试的?

excel - 将 Excel HTML 转换为更清晰的 HTML

vba - 使用 VBA 将错误单元格分隔到另一个工作表

c# - 在 excel 列之间插入列

excel - 无 Do 错误的循环

vba - Excel 2003 - VBA 用于循环遍历行中的每个单元格以提供属性/格式

vba - 如何使用VBA创建并写入txt文件

vba - 在 VBA 中获取最后一个单元格的问题

vba - Excel VBA 在单元格旁边创建一个按钮

vba - 如何在vba宏中检查空数组