这与我的另一个问题有些相关。
我一直在使用DLL来创build一个Excel电子表格。 一切正在与DLL和Excel正在使用它就好了。 但是有可能指定一个dll驻留在同一个目录下的excel文件时声明函数?
Declare Sub FortranCall Lib "Fcall.dll" (r1 As Long, ByVal num As String)
不幸的是,这不起作用,我不得不使用类似于:
Declare Sub FortranCall Lib "C:\temp\Fcall.dll" (r1 As Long, ByVal num As String)
这是有效的,但是当分发给我的同事时会引起头痛。 将dll放在c:\ windows \ system32等中也不是真正的选项。
以下是从VBA动态加载/调用DLL的三种可能性 ,包括指向相关信息的链接和一些示例代码。 不能说我曾经不得不使用这里描述的任何解决方案,但是就VBA需要静态路径而言,这似乎是对这些选项的合理探索。
Application.Run
调用来调用它。 需要可信任的编程访问VBIDE API(即,您允许VBA执行生成代码的代码,然后执行…就像宏病毒一样)。 LoadLibrary
Win32 API …现在你已经得到了指针和地址: 这个可怕的代码 (.zip下载)本质上是一个巨大的不可维护的破解,它使用汇编语言来启用API函数的名称调用。 看起来它只适用于受支持的Win32 API函数的一个子集。 这是另一个可能的解决方案 ,建议在调用DLL之前以编程方式更新PATH环境变量。 不是一个坏主意,如果它可以工作,你可以添加到你的工作簿公开事件。
祝你好运!
我通常关心这个的方式是增加:
Dim CurrentPath As String CurrentPath = CurDir() ChDir (ThisWorkbook.Path)
若要:Private Sub Workbook_Open()
ChDir()应该做的伎俩。 它可能无法在网络文件夹上工作。
Declare Sub FortranCall Lib "Fcall.dll" (r1 As Long, ByVal num As String) ... Dim CurrentPath As String CurrentPath = CurDir() ChDir (ThisWorkbook.Path) Call FortranCall(r, n) ChDir (CurrentPath) ' Change back to original directory
现在将您的.dll保存在工作簿所在的文件夹中。
您可以将该DLL放在某个目录中,并将其添加到EnVar路径中。
ActiveWorkbook.Path
为您提供包含当前活动工作簿的文件夹的完整路径。 所以试试这个:
Declare Sub FortranCall Lib ActiveWorkbook.Path & "\Fcall.dll" (r1 As Long, ByVal num As String)