我有一个Excel 2010宏应用程序,它由多个工作簿文件组成。
FileName(ProjectName)
VFApp.xlsm(VFAppVBA)
VFReportClasses.xlsm(VFReportVBA)
VFImportClasses.xlsm(VFImportVBA)
VFDataClasses.xlsm(VFDataVBA)
ZShared.xlsm(ZSharedVBA)
我试图在App文件关闭时关闭所有引用的文件。这适用于除ZShared.xlsm之外的所有内容。为此,我得到'此工作簿目前由另一个工作簿引用,无法关闭。39> 错误。
我在网上找到的唯一半帮助信息是http://support.microsoft.com/kb/211856 和http://support.microsoft.com/default.aspx?scid=kb;en-us;159794。我在ZShared的所有类中添加了一些日志记录。它的所有实例都被正确终止,并且我没有任何指向ZShared的工作簿对象。
我甚至尝试重命名文件,如(http://www.allquests.com/question/3996335/Upgrading-Add-ins-from-XL2003-to-XL2007.html)。
奇怪的是,如果我在打开VFApp.xlsm之前手动打开VFDataClasses.xlsm,那么ZShared将正确关闭而不会出现错误。如果我只打开VFApp.xlsm并让它打开所有其他引用的文件,我会收到上述错误。
任何人都有任何建议可以找出为什么Excel认为工作簿仍然被引用?
确认:
InitializeGlobalClasses
和TerminateGlobalClasses
m_InstanceId
并调试了所有Class_Initialize
和Class_Terminate
的日志记录,因此我100%确定所有类的实例都正确终止。 我想知道Excel是否有可能基于使用With
语句或某些未正确清除的语句创建对工作簿的隐藏引用。另一方面,只有在应用程序启动时ZShared尚未打开时,才会发生这种情况。
答案 0 :(得分:0)
我从未找到过为什么Excel认为该文件仍被引用的答案。作为解决方案,我最终做了两件事。
如果有人知道如何查看Excel内部的方法以了解其参考垃圾收集无效的原因,我很想知道。