我在Excel的VBA中有一个程序,需要从DLL调用某些方法,在代码开发方面,这两个方法都在我的控制之下。我需要能够选择在运行时应使用的DLL库(来自各个发行版),但是VBA的Declare语句仅允许Lib路径中的常量。
目标是多重的:
我试图在Public Const变量中声明路径,但是它不起作用:
' This work
Private Declare PtrSafe Function addAmplifier Lib "path\to\lib.dll" (...) As Integer
' This don't work
Public Const libPath As String = "path\to\lib.dll"
Private Declare PtrSafe Function addAmplifier Lib libPath (...) As Integer
在Declare语句中是否存在劫持方式使用变量?还是有一种方法可以创建一个VBA模块,该模块能够编辑Declare语句所在的第二个模块的VBA代码,并用regexp替换所有出现的String,保存VBA项目然后执行该模块?更正式地说:VBA代码可以在运行时自行重写吗?
答案 0 :(得分:0)
正如 L8n 所建议的,更改工作目录的解决方案工作正常。
因此,如果库位于工作簿路径中的子文件夹中,我们可以在每次调用 DLL 本机函数时执行以下过程:
ChDir()
更改工作目录以进入子文件夹ChDir()
返回父文件夹但是,我怀疑频繁调用 ChDir()
可能会减慢 VBA 的执行速度,因为它似乎还会使用 VBA 运行时中的一些隐藏变量更新执行上下文。