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

Posted

技术标签:

【中文标题】转换为 Office 2013 后在 VBA 脚本中搜索引用的文件 Excel.exe【英文标题】:Searching for referenced file Excel.exe in VBA script after converting to Office 2013 【发布时间】:2015-01-12 15:53:56 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

当您在 Access 2010 中开发和使用数据库时,该引用最初是 14.0。在 Access 2013 中打开时,Access 将引用调整为可用版本 (15.0)。不幸的是,当您尝试在 Access 2010 中再次使用 db 时,Microsoft Excel 15.0 对象库 对该 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 命名常量,您需要用常量的值替换它们的名称,或者在代码中声明常量。

【讨论】:

Tony Toews 创建了一个页面,其中包含有关后期绑定的更多详细信息:Late Binding in Microsoft Access 谢谢 - 我完全错过了系统为我更新了参考的事实。我做了这个改变,我的 Word 引用也是一样的。现在我正在尝试为“Dim fd As FileDialog”这一行找到未定义用户类型的修复 - 我认为它会类似。 FileDialog 由 Office 类型库提供。我也为那个使用后期绑定。 example

以上是关于转换为 Office 2013 后在 VBA 脚本中搜索引用的文件 Excel.exe的主要内容,如果未能解决你的问题,请参考以下文章

使用Excel VBA发送带有图表对象的电子邮件 - Office 2013

怎么才能关闭这个office2013版本的vba工程提示?每次保存文件时候都会有如下提示,很不喜欢

MS Office 2013 - VBA 密码安全 [重复]

更新到 Office 2016 后的 VBA 脚本错误 (CreateObject("System.Collections.ArrayList"))

Access 2013 VBA 自动化 Excel 丢失窗口

office2013零售版怎样转成vol版,求详细解答并提供软件