在将 Microsoft Office 2007 更新为 Office 2010 后,一些嵌入在我们软件中的自定义 VBA 脚本无法编译,出现以下错误信息:
对象库无效或包含指向找不到的对象定义的引用。
据我所知,这个错误是由于来自 Microsoft 的安全更新(Microsoft Security Advisory 960715)导致的。在向 VBA 脚本添加 ActiveX 控件时,有关这些控件的信息存储在本地硬盘上的缓存文件中(.exd 文件)。安全更新修改了其中一些控件,但 .exd 文件没有自动更新。当 VBA 脚本尝试加载存储在缓存文件中的旧版控件时,就会出现错误。必须从硬盘中删除这些缓存文件,才能成功加载控件(这将自动创建新的、更新过的 .exd 文件)。
我想要做的是,在我们的软件加载时以编程方式(使用 Visual C++)删除过期的 .exd 文件。CApcProject::ApcProject.Open
使用以下标志打开 VBA 项目:axProjectThrowAwayCompiledState
。
TestHR(ApcProject.Open(pHost, (MSAPC::AxProjectFlag) (MSAPC::axProjectNormal | MSAPC::axProjectThrowAwayCompiledState)));
根据文档,此标志应导致重新编译VBA项目,并删除并重建临时文件。我也尝试更新宿主应用程序类型库的校验和,这应该具有相同的效果。但是,这些修复措施似乎都不起作用了,我已经没有更多想法了。