问题
Declare
语句链接到dll,其路径可以在VBA宏尝试的解决方案
我尝试使用
Declare
动态添加带有ThisDocument.VBProject.CodeModule.AddFromString(code)
语句的代码,该代码在从普通目录加载模板时有效,但是当模板在Word\STARTUP中时,会出现以下错误:当模板位于Word\STARTUP中时,将注册表项“HKEY ___ LOCAL_MACHINE\Software\Microsoft\Office\11.0\Word\Security\AccessVBOM”设置为1并不能解决此问题。
我真的很努力寻找解决方案。如果有人知道这样做的方法,那就太好了。
最佳答案
坦白说,我不知道使用所有这些VBA代码注入(inject),LoadLibrary()调用的程序集生成等问题,以及我见过的用于此简单任务的技术。在我的项目中,我使用简单的代码从与工作簿相同的位置加载dll,如下所示:
Declare Function MyFunc Lib "MyDll.dll" (....) As ...
Sub Test()
....
ChDir ActiveWorkbook.Path
... = MyFunc(....)
End Sub
至少Excel 2003不会从当前路径加载dll,将ChDir设置为您的DLL具有的任何路径都没有问题。您可能还需要更改与当前路径分开的当前驱动器。无论您当前的路径在哪里,您都只需要在第一次函数调用之前执行一次,在此之后DLL保持连接状态,因此您可以在workbook_open中执行一次,而以后不再理会该路径。为此,我在DLL中提供了一个空的伪函数。我认为MS Word在这方面没有什么不同。
Private Declare Sub Dummy Lib "MyDLL.dll" ()
Private Sub Workbook_Open()
ChDrive Left$(Me.Path, 1)
ChDir Me.Path
Dummy
End Sub
关于vba - 在VBA宏中以编程方式设置DLL搜索路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/450177/