好的,所以我正在尝试将我的电子表格使用的 DLL 与 excel 文件打包在一起。我的电子表格将被复制到不同的 PC 并从不同的地方使用,我试图避免每次将工作表(带有 DLL)复制到新 PC 时让用户运行 regasm。我已经使用了一个 shell 命令来在启动时使用 regasm 注册 DLL。这是我的代码:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim strWinCmd As String
Dim retVal As Double
strWinCmd = "cmd.exe %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /u /codebase /tlb """ & Application.ActiveWorkbook.Path & "\JART\JART.dll"""
retVal = Shell(strWinCmd, vbHide)
End Sub
Private Sub Workbook_Open()
Dim strWinCmd As String
Dim retVal As Double
strWinCmd = "cmd.exe /c %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /codebase /tlb """ & Application.ActiveWorkbook.Path & "\JART\JART.dll"""
Call Shell(strWinCmd, vbNormalFocus)
Call Button_Handlers.Sleep(1500)
Call Button_Handlers.Initialize
End Sub
作为参考, Button_Handlers.Sleep 只调用系统睡眠方法,而 Button_Handlers.Initialize 这样做:
Sub Initialize()
'This JART.MainJobControl is the main class in the JART DLL
Set JART_Instance = New JART.MainJobControl
'Use JART_Instance
End Sub
所以基本上我试图在启动时注册 DLL 并在关闭时取消注册。我的问题是,当我在新 PC 上打开电子表格时,Button_Handlers.Initialize 出现错误。它告诉我我正在尝试使用未定义的类 (JART.MainJobControl),就好像没有引用 DLL。如果我尝试重新打开文件一切正常???
我这样做的方式是在已经注册了 regasm 的机器上手动添加对 DLL 的引用。然后我保存这个 excel 文件并将其传输到尚未注册 DLL 的机器上并尝试打开它并运行它。我认为由于引用已经添加到 excel 文件中,所有代码所要做的就是使用 regasm 注册它。有谁知道为什么这不起作用?我是不是睡得不够久。