如何在与excel文件相同的目录中使用dll

Roo*_*ook 8 windows dll excel

这与我的其他问题有些相关.

我一直在使用dll来编写excel电子表格.目前一切都在使用dll,而excel正在使用它.但是在声明函数时是否可以指定dll与excel文件位于同一目录中?

Declare Sub FortranCall Lib "Fcall.dll" (r1 As Long, ByVal num As String)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,我必须使用类似的东西:

Declare Sub FortranCall Lib "C:\temp\Fcall.dll" (r1 As Long, ByVal num As String)
Run Code Online (Sandbox Code Playgroud)

这有效,但在分发给我的办公室伙伴时会引起麻烦.将dll放在c:\ windows\system32等中也不是一个真正的选择.

ewb*_*wbi 4

以下是从 VBA 动态加载/调用 DLL 的三种可能性,包括相关信息的链接和一些示例代码。不能说我曾经使用过其中描述的任何解决方案,但鉴于 VBA 对静态路径的需求,这似乎是对选项的合理探索。

  1. 使用 VBIDE Extensibility API 在运行时创建一个新模块(您可以从磁盘导入 .bas 文件,无需使用字符串文字对模块进行硬编码)。缺点:没有编译时验证;您需要使用字符串类型的Application.Run调用来调用它。需要对 VBIDE API 进行可信的编程访问(即,您允许 VBA 执行生成代码的代码,然后再执行...就像宏病毒那样)。
  2. 使用LoadLibraryWin32 API...现在您已经获得了指针和地址:这个可怕的代码(.zip 下载)本质上是一个巨大的、难以维护的 hack,它使用汇编语言来通过名称调用 API 函数。不过,看起来它仅适用于受支持的 Win32 API 函数的子集。
  3. 更改 DLL 搜索路径,但这需要在运行时添加动态代码,所以不妨采用上面的方法。

这是另一个潜在的解决方案,建议在调用 DLL 之前以编程方式更新 PATH 环境变量。如果可行的话,这不是一个坏主意,因为您可以将其添加到工作簿打开事件中。

祝你好运!