Sub TestMyDll()
Dim xl as New Excel.Application
xl.Workbooks.Open "file"
xl.Run "MyFunctionCall"
xl.Workbooks(1).Close False
xl.Quit
Set xl = Nothing
End Sub
Option Explicit
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
'my.dll is a copy of Winhttp.dll in a directory other than where this workbook is saved.
'Calling this will result in an error unless you call LoadLibrary first
Private Declare Function WinHttpCheckPlatform Lib "my.dll" () As Long
Private Sub Foo()
Dim lb As Long
lb = LoadLibrary("C:\Users\David\Downloads\my.dll")
MsgBox WinHttpCheckPlatform
'I found I had to do repeated calls to FreeLibrary to force the reference count
'to zero so the dll would be unloaded.
Do Until FreeLibrary(lb) = 0
Loop
End Sub
2 回答
你可以使用的一种方法是运行一个单独的excel实例并像这样自动打开/关闭excel ...(这是我在浏览器中输入的伪代码)
第二种方法是动态加载和卸载dll . 这可能是我会使用的方法 . 作为测试,我将Winhttp.dll复制到另一个目录并将其命名为my.dll . 不要将dll放在与包含代码的工作簿相同的目录中,否则excel可能会加载dll .
自动化Excel打开/关闭的另一种方法是使用IDE的功能(如果有的话)为您执行此操作 .
例如,CVF,IVF和CodeBlocks各自提供启动Excel和运行addin / dll(并实时调试)的工具 .
例如,在CodeBlocks中转到Project / Set Program的参数....这将启动一个对话框 . 您将xls文件的完整路径放在Program Arguments(例如C:\ myexceltest.xls)中,然后将paht放入Host Application字段中的Excel(例如D:\ Apps \ MSO \ Office10 \ EXCEL.EXE ... . 或Excel.EXE所在的位置) .
然后只需运行或调试,它就会自动运行 . 您无法在运行时更改DLL,但是显式或从IDE关闭Excel会让您回到源代码,进行更改,只需单击运行或IDE中的任何内容,Bob就是您的叔叔Excel和.xls将自动启动 .
如果您在源代码中设置了断点,那么在IDE中运行Debug将允许您实时调试DLL .
这适用于任何语言(例如,这适用于Fortran DLL等)