转换为 Office 2013 后在 VBA 脚本中搜索引用文件 Excel.exe

Searching for referenced file Excel.exe in VBA script after converting to Office 2013

我有一个与其他用户共享的 Access 应用程序。我们在 Sharepoint 站点上共享数据库,每个人都将其检出/下载以进行编辑,然后将其放回 Sharepoint 并重新检入。我们这样做是因为如果我们在服务器上共享相同的副本,则响应时间是不可接受的,我们只需要一个人在任何时候都可以访问。那不是我现在的问题。

上周,我的旧电脑坏了,我换了一台新电脑。旧电脑是 Windows7,32 位,装有 Office 2010。新电脑也是 Windows7,但 64 位,装有 Office 2013。据我所知,我没有将数据库格式更改为新版本的 Access 或进行任何其他更改。数据库在我的新电脑上仍然可以正常工作。

VBA 脚本将数据库与 Excel 工作簿集成并将数据导出到 Excel。我选择的一个参考是 Microsoft Excel 15.0 Object Library - 我一直使用的相同参考。现在,当我将数据库加载回服务器并且其他用户下载它时,他们可以打开数据库,但会收到一条错误消息 "Searching for reference file Excel.exe",然后是“表达式中未定义的函数‘Format’”。

其他用户的 PC 的配置方式与我的旧 PC 相同,在我转换为 Office 13 并将我的副本保存回服务器之前,他们能够毫无问题地使用数据库。

所以我的问题是 - 是什么原因造成的,更重要的是,我能做些什么来解决它?

"...参考我选择的是 Microsoft Excel 15.0 Object Library ..."

Microsoft Excel 15.0 Object Library 是 Office 2013 的版本。对于 Office 2010,版本是 Microsoft Excel 14.0 对象库.

您在Access 2010中开发和使用数据库时,引用最初是14.0。在Access 2013中打开时,Access将引用调整为可用版本(15.0)。不幸的是,当您尝试在 Access 2010 中再次使用数据库时,Microsoft Excel 15.0 Object Library 对该 Access 版本没有意义,因此它不知道使用 Microsoft Excel 14.0 对象库 代替。

解决方法是删除该引用并将您的代码转换为使用后期绑定。

这里是后期绑定的一个简单例子,复制自Using early binding and late binding in Automation

' Declare the object as a late-bound object
  Dim oExcel As Object

  Set oExcel = CreateObject("Excel.Application")

请注意,如果您的代码使用 Excel 命名常量,您将需要用常量的值替换它们的名称,或者在您的代码中声明这些常量。