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

时间:2009-06-09 16:59:43

标签: windows excel dll

这与我的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等中也不是一种选择。

5 个答案:

答案 0 :(得分:3)

以下是用于从VBA动态加载/调用DLL的three possibilities,包括指向相关信息和一些示例代码的链接。不能说我曾经不得不使用那里描述的任何解决方案,但考虑到VBA对静态路径的需求,它似乎是对选项的合理探索。

  1. 使用VBIDE Extensibility API在运行时创建一个新模块(您可以从磁盘导入.bas文件,无需使用字符串文字对模块进行硬编码)。缺点:没有编译时验证;你需要使用字符串类型的Application.Run调用来调用它。需要对VBIDE API进行可信的编程访问(即允许VBA执行生成代码然后执行的代码......就像宏病毒一样)。
  2. 使用LoadLibrary Win32 API ...现在您已经有了指针和地址:this scary code(.zip download)本质上是一个巨大的无法维护的黑客,它使用汇编语言来启用调用API按名称起作用。看起来它只适用于受支持的Win32 API函数的子集。
  3. 更改DLL搜索路径,但需要在运行时添加动态代码,因此不妨使用上述内容。
  4. 这里的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)