Ms access “VBA功能”一词;对象的方法Saveas2失败“;

Ms access “VBA功能”一词;对象的方法Saveas2失败“;,ms-access,ms-word,reference,vba,Ms Access,Ms Word,Reference,Vba,我有一个access vba应用程序,它也使用word vba。在本地机器上运行应用程序时,它运行良好。一旦它被移动到其他版本(access和word的相同版本),它将在word的vba部分崩溃。document.open或.saveas2等命令失败:例如,对象的方法“saveas2”失败 我还注意到,我在应用程序中引用的库是任何其他最终用户所必需的。我习惯于使用库进行编译,从那时起,它们总是包含在.jar/.exe/等中,但是,当你将应用程序移动到其他计算机时,它似乎总是试图重新编译 我不太熟

我有一个access vba应用程序,它也使用word vba。在本地机器上运行应用程序时,它运行良好。一旦它被移动到其他版本(access和word的相同版本),它将在word的vba部分崩溃。document.open或.saveas2等命令失败:例如,对象的方法“saveas2”失败

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

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

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

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

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


至于您收到的错误,您可能需要检查用户计算机上的Office版本,该版本是在Office 2010中添加的。

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