Excel VBA:如何为declare语句设置动态库路径?
我在Excel的VBA中有一个程序,需要从DLL调用一些方法,在代码开发方面,这两个方法都在我的控制之下。我需要能够选择在运行时应该使用哪个DLL库(来自各种版本),但是VBA中的Declare语句只允许库路径中的常量 目标是多方面的:Excel VBA:如何为declare语句设置动态库路径?,excel,vba,dynamic,dll,path,Excel,Vba,Dynamic,Dll,Path,我在Excel的VBA中有一个程序,需要从DLL调用一些方法,在代码开发方面,这两个方法都在我的控制之下。我需要能够选择在运行时应该使用哪个DLL库(来自各种版本),但是VBA中的Declare语句只允许库路径中的常量 目标是多方面的: 能够在运行时从一个Excel工作簿中选择库版本 简化代码维护,因为使用了很多库方法,这意味着在库路径更改时需要编辑很多Declare语句 在运行时从各种预定义位置动态搜索库,以符合部署目的。在dev环境中,库位于dev目录中,但对于最终用户,库可以位于3个不同的
' 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替换所有出现的字符串,保存VBA项目,然后执行该模块?更正式地说:VBA代码可以在运行时重写自身吗?正如L8n所建议的,更改工作目录的解决方案可以很好地工作
因此,如果库位于工作簿路径的子文件夹中,每次调用DLL本机函数时,我们都可以执行以下过程:
ChDir()
ChDir()返回父文件夹
但是,我怀疑频繁调用
ChDir()
可能会减慢VBA的执行速度,因为它似乎也会用VBA运行时的一些隐藏变量更新执行上下文。更正式地说:VBA代码是否可以在运行时重写自身?简言之:是的:但这不是真正的建议,因为它是一个潜在的攻击路径。。。此外,防病毒软件可能会标记代码。感谢您的澄清,所以这不是我想要的方式:我的应用程序必须是安全的,并且将在带有公司防病毒软件的计算机上运行,并且我无法管理白名单。也许此解决方案能有所帮助?正在更改工作目录。。。有趣的解决方案,我会试试,谢谢