Excel 2007僵尸进程不是COM自动化,而是引用第三方COM对象

Excel 2007僵尸进程不是COM自动化,而是引用第三方COM对象,com,excel,excel-2007,vba,Com,Excel,Excel 2007,Vba,我正在开发一个应用程序,它在前端使用Excel,通过第三方API通过COM访问远程数据。该应用程序直接在Excel VBA中编码(即Excel没有COM自动化)。有时,用户在运行我的应用程序后退出时,Excel不会退出,从而创建一个消耗约50%CPU的僵尸Excel 我已经阅读了现有的“Excel不会退出”答案,所以-它们似乎都与Excel的Interop/COM自动化有关。在这种情况下,有没有关于如何确保Excel退出的建议?我开始相信,由我的代码创建的COM对象没有得到正确处理,从而阻止Ex

我正在开发一个应用程序,它在前端使用Excel,通过第三方API通过COM访问远程数据。该应用程序直接在Excel VBA中编码(即Excel没有COM自动化)。有时,用户在运行我的应用程序后退出时,Excel不会退出,从而创建一个消耗约50%CPU的僵尸Excel


我已经阅读了现有的“Excel不会退出”答案,所以-它们似乎都与Excel的Interop/COM自动化有关。在这种情况下,有没有关于如何确保Excel退出的建议?

我开始相信,由我的代码创建的COM对象没有得到正确处理,从而阻止Excel完全退出。我试图强迫他们获释,导致了这样一个问题:“引用其中一人的话

确实要退出Excel时删除对COM对象的所有引用吗?对于COM对象的每个引用,请确保按如下方式放置线:

obj = Nothing ' Where "obj" is a reference to the COM object
如果这不能解决问题,那么问题也可能是循环引用。COM对象是否存储对您的VBA对象的引用,而VBA对象又保存对COM对象的引用?如果是这样,将创建一个循环引用,并且永远不会释放对象

我现在怀疑循环引用。如果在工作簿关闭事件中将对象本身设置为
Nothing
之前,将某些COM对象属性设置为
Nothing
后问题消失,我将返回并将其标记为已接受的答案

更新


仔细地将对象引用设置为
Nothing
并不能解决问题。我最终创造了一个。对工作簿BeforeClose事件中的COM对象调用dispose似乎已解决此问题。

您可以发布退出应用程序所用的代码吗?如果您是通过VBA退出的,您应该能够确保excel正确终止。如果没有您的代码,我很难猜测问题可能是什么。可能有对Excel应用程序对象的远程引用,或者工作簿或电子表格等。我不会在代码中退出应用程序。当用户通过关闭上次打开的工作簿或通过菜单使用“退出”手动退出excel时,excel会显示为退出,但有时会留下一个僵尸实例运行。在这种情况下,当用户下次打开excel时,将有两个实例在运行,每个实例消耗约50%的CPU。僵尸excel将显示在windows任务管理器的进程列表中,但不显示在应用程序列表中,并一直保持到强制退出为止。