如何实例化一个名为Excel.Application的对象,以允许在意外之后进行宏后垃圾回收

tob*_*and 2 excel vba excel-2003 excel-vba

我是一个相对的VBA新手,设计一个相当复杂的宏,可以在10秒到10分钟之间运行任何东西,它的大部分工作都是在另一个不可见的Excel实例中创建的Dim appDatabaseInstance = New Excel.Application.在代码执行过程中会使用许多函数和子例程,虽然我已经尽力确保appDatabaseInstance.Quit在任何半可预测出错的地方调用它,但有一件事我无法控制 - 用户.

具体来说,如果用户决定程序已崩溃并保持转义,VBA将中断执行,并且由于中断的发生方式,我的垃圾收集程序(我认为)最终都没有发生.

因此,如果我能以某种方式命名我以可预测的方式创建的实例,然后在创建新实例之前尝试找到现有实例并适当地处理它,我会更高兴.这样即使一个不幸的应用程序实例保持打开状态,一旦用户尝试涉及该程序的任何其他内容,它将立即关闭(如果它们没有,那么一个实例不太可能在上下文中引起太多麻烦).

有没有人有什么建议?

bre*_*tdj 6

您可以使用EnableCancelKeyApplication对象的属性来确定用户中断代码时会发生什么

我建议你在迪克的博客看到关于EnableCancelKey的这篇文章.

总结一下,EnableCancelKey有三种可能的设置:

  • xlDisable - 防止用户中断代码
  • xlInterrupt - 正常运行.显示调试器,代码处于调试模式,无论它在中断时发生的是哪一行.
  • xlErrorHandler - 引发错误号18并像任何其他错误一样做出反应.如果您设置了错误处理,则会调用它.