使用できる1つの方法は、別のExcelインスタンスを実行し、Excelの開閉を自動化することです...(これはブラウザに入力した擬似コードです)
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
2 つ目の方法は、dll を動的にロードおよびアンロードすることです。これはおそらく私が使用する方法です。テストとして、Winhttp.dll を別のディレクトリにコピーし、my.dll と名付けました。コードを含むワークブックと同じディレクトリに dll を配置しないでください。そうしないと、Excel が dll をロードする可能性があります。
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