11

将 Microsoft Office 2007 更新到 Office 2010 后,我们软件中嵌入的一些自定义 VBA 脚本无法编译并出现以下错误消息:

对象库无效或包含对无法找到的对象定义的引用。

据我所知,此错误是由 Microsoft 的安全更新(Microsoft 安全公告 960715)引起的。将 ActiveX 控件添加到 VBA 脚本时,有关控件的信息存储在本地硬盘驱动器上的缓存文件(.exd 文件)中。安全更新修改了其中一些控件,但 .exd 文件并未自动更新。当 VBA 脚本尝试加载存储在缓存文件中的旧版本控件时,会发生错误。必须从硬盘驱动器中删除这些缓存文件才能成功加载控件(这将自动创建新的、更新的 .exd 文件)。

我想做的是在我们的软件加载时以编程方式(使用 Visual C++)删除过时的 .exd 文件。使用打开 VBA 项目时,CApcProject::ApcProject.Open我设置了以下标志:axProjectThrowAwayCompiledState.

TestHR(ApcProject.Open(pHost, (MSAPC::AxProjectFlag) (MSAPC::axProjectNormal | MSAPC::axProjectThrowAwayCompiledState)));

根据文档,此标志应导致重新编译 VBA 项目并删除和重建临时文件。我还尝试更新应该具有相同效果的主机应用程序类型库的校验和。然而,这些修复似乎都没有完成这项工作,而且我的想法已经不多了。

4

1 回答 1

2

我前段时间遇到过这个问题,推荐的(和有效的)解决方案确实是删除系统驱动器上的所有 .exd 文件。显然,它们会在需要时重建,因此无需以编程方式触发重建过程。

于 2011-07-11T12:20:40.660 回答