我有一个access-vba应用程序也使用word-vba。在我的本地计算机上运行应用程序时,它运行良好。一旦它被移动到其他人(相同版本的访问和单词),它将在单词的vba部分崩溃。诸如document.open或.saveas2之类的命令失败:例如Method 'SaveAs2' of object failed
。
我还注意到,我在应用程序中引用的库是任何其他最终用户都需要的。我习惯于只使用库进行编译,从那时起它们总是包含在.jar / .exe / etc中,但是,当你将应用程序移动到其他人的计算机时,它似乎总是试图重新编译?
我不熟悉VBA,所以我推测我失败的word-vba函数是由于引用错误,还是其他任何想法?
答案 0 :(得分:2)
VBA可以引用的“库”实际上是COM objects,通常打包为DLL文件。它们是在请求时在运行时动态实例化的对象(如果它们尚未存在)。它们由Windows加载到内存中,程序使用COM标准与它们交互,调用方法以及获取或设置属性(进程间通信)。通常有两种与它们相互作用的方式:早期结合和晚期结合。
使用早期绑定,您在编写代码时添加对库的引用,这允许VBA IDE提供自动完成和一些编译时错误检查。使用“new”关键字实例化对象并直接键入对象名称。但是,早期绑定需要您选择特定的dll以及可能的特定版本的接口。如果您引用某个用户没有的特定界面版本,则可能会出现问题。
使用后期绑定,您可以使用CreateObject或GetObject实例化对象,从Windows请求名称。 Windows将look the name up并返回对该对象的引用。代码中的变量只是对象,调用方法有点危险,因为编译器允许您输入所需的任何方法名称,并且不提供编译时警告。这样做的好处是,只要您调用已建立的方法并且没有任何新方法或弃用,代码将无论用户的版本如何都能正常工作。
至于您收到的错误,您可能希望检查用户计算机上的Office版本 - Office 2010中添加了SaveAs2。