gpt4 book ai didi

excel - VBA:如何为声明语句设置动态库路径?

转载 作者:行者123 更新时间:2023-12-04 19:50:35 25 4
gpt4 key购买 nike

我在 Excel 的 VBA 中有一个程序需要从 DLL 中调用一些方法,这两者在代码开发方面都在我的控制之下。我需要能够选择在运行时应使用的 DLL 库(来自不同版本),但 VBA 的 Declare 语句只允许 Lib 路径中的常量。

目标是多重的​​:

  1. 能够在运行时从一个 Excel 工作簿中选择库版本
  2. 减少代码维护,因为使用了很多库方法,这意味着在更改库路径时需要编辑大量的 Declare 语句
  3. 在运行时从各种预定义位置动态搜索库,以符合部署目的。在开发环境中,库位于开发目录中,但对于最终用户,库可能位于 3 个不同的位置:工作簿路径、计算机上的特定目录或网络驱动器中的特定目录。

我试图在 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 代码,并用正则表达式替换所有出现的字符串,保存 VBA 项目然后执行模块?更正式地说:VBA 代码能否在运行时重写自身?

最佳答案

正如 L8n 所建议的,更改工作目录的解决方案工作正常。

因此,如果库位于工作簿路径的子文件夹中,我们可以在每次调用 DLL native 函数时执行以下过程:

  1. 使用 ChDir() 更改工作目录以进入子文件夹
  2. 执行原生函数
  3. 使用 ChDir() 返回父文件夹

但是,我怀疑频繁调用 ChDir() 可能会减慢 VBA 的执行速度,因为它似乎还会使用 VBA 运行时的一些隐藏变量来更新执行上下文。

关于excel - VBA:如何为声明语句设置动态库路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56748653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com