【问题标题】:Word-VBA Functions "Method Saveas2 of object failed"Word-VBA 函数“对象的方法 Saveas2 失败”
【发布时间】:2020-07-13 21:49:49
【问题描述】:

我有一个使用 word-vba 的 access-vba 应用程序。在我的本地机器上运行应用程序时,它运行良好。一旦它被移动到其他人(相同版本的访问和单词),它会在涉及单词的 vba 部分时崩溃。 document.open 或 .saveas2 等命令失败:例如 Method 'SaveAs2' of object failed

我还注意到任何其他最终用户都需要我在应用程序中引用的库。我习惯于只使用库进行编译,从那时起,它们总是包含在 .jar/.exe/etc 中,但是,当您将应用程序移动到其他计算机时,它似乎总是试图重新编译?

我不太精通 VBA,所以我推测我失败的 word-vba 函数是因为引用错误,还有其他想法吗?

【问题讨论】:

  • 我认为我们将需要查看更多代码并更好地描述您何时收到错误。您是否尝试过单步执行代码?
  • 如果您在 Excel 中设置引用或使用任何其他具有后期绑定的库,则必须将这些库安装在要使用您的电子表格的任何目标计算机上。库不会编译到电子表格中。我认为所有 MS Office 应用程序都使用即时编译。

标签: ms-access ms-word reference vba


【解决方案1】:

VBA 可以引用的“库”实际上是COM objects,通常打包为 DLL 文件。它们是在请求时在运行时动态实例化的对象(如果还没有)。它们由 Windows 加载到内存中,您的程序使用 COM 标准与它们交互,调用方法并获取或设置属性(进程间通信)。通常有两种与它们交互的方式:早期绑定和后期绑定。

使用早期绑定,您可以在编写代码时添加对库的引用,这允许 VBA IDE 提供自动完成和一些编译时错误检查。您可以使用“new”关键字并直接键入对象名称来实例化对象。但是,早期绑定需要您选择特定的 dll,并且可能需要选择特定版本的接口。如果您引用某个用户没有的特定界面版本,这可能会导致问题。

使用后期绑定,您可以使用 CreateObject 或 GetObject 实例化对象,并通过名称从 Windows 请求它们。 Windows 将look the name up 并返回对该对象的引用。代码中的变量只是对象,调用方法有点危险,因为编译器允许您输入所需的任何方法名称,并且不提供编译时警告。这样做的好处是,只要您调用完善的方法并且没有新的或不推荐使用的方法,无论用户的版本如何,代码都可以正常工作。

至于您遇到的错误,您可能需要检查用户计算机上的 Office 版本 - 在 Office 2010 中添加了SaveAs2

【讨论】:

    猜你喜欢
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2015-07-17
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多