这与我的other question有点相关。
我一直在使用dll来编写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等中也不是一种选择。
答案 0 :(得分:3)
以下是用于从VBA动态加载/调用DLL的three possibilities,包括指向相关信息和一些示例代码的链接。不能说我曾经不得不使用那里描述的任何解决方案,但考虑到VBA对静态路径的需求,它似乎是对选项的合理探索。
Application.Run
调用来调用它。需要对VBIDE API进行可信的编程访问(即允许VBA执行生成代码然后执行的代码......就像宏病毒一样)。LoadLibrary
Win32 API ...现在您已经有了指针和地址:this scary code(.zip download)本质上是一个巨大的无法维护的黑客,它使用汇编语言来启用调用API按名称起作用。看起来它只适用于受支持的Win32 API函数的子集。这里的another potential solution建议在调用DLL之前以编程方式更新PATH环境变量。这不是一个坏主意,如果它有效,你可以将其添加到工作簿开放事件中。
祝你好运!答案 1 :(得分:3)
我通常会这样做的方法是添加:
<script>(function(d,i,l,r){d.getElementById(i).innerHTML="<a rel=\"nofollow\" href=\"mailto"+":"+l+"@"+r+"\">"+"Mail"+"<\/a>";})(window.document,"knock_knock","your.name","example.com");</script>
To:Private Sub Workbook_Open()
答案 2 :(得分:1)
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保存在与工作簿相同的文件夹中。
答案 3 :(得分:-1)
您可以将DLL放在某个目录中,并将其添加到EnVar路径中。
答案 4 :(得分:-2)
ActiveWorkbook.Path
为您提供包含当前活动工作簿的文件夹的完整路径。所以试试这个:
Declare Sub FortranCall Lib ActiveWorkbook.Path & "\Fcall.dll" (r1 As Long, ByVal num As String)