我不清楚 OP 究竟想在这里做什么。
从反射外部调用反射类型库似乎Application.Run
不可靠,因此该解决方案似乎涉及使用或自动化 VBE。
有两种方法可以实现:
在 Excel 实例中使用反射调用 VBA 函数(我在此处显示的示例),但如果您可以获得对反射 VBE 的引用,则可以反转它并从 Excel 调用反射 VBA。
让 Reflection 从 Excel 的 vbProject(s) 中导出模块,然后将它们导入 Refelction vbProject(s)。
幸运的是,VBA 使这两种方法都成为可能。对于这两种方法,您都需要添加对Excel
和的引用Visual Basic for Applications Extensibility
Application.Run
用于调用另一个 VBA 主机中的函数
使用Application.Run
,我们可以在 Excel 项目中调用函数(我们甚至可以在调试时从一个 VBE跳到另一个 VBE。我们可以传递参数,我们可以接收返回值。
Sub CallExcelUDFFromNonExcelHost()
'Get an existing instance of Excel
Dim appXL As Excel.Application
Set appXL = GetObject(, "Excel.Application")
'Get the already opened Excel workbook
Dim wbk As Excel.Workbook
Set wbk = appXL.Workbooks("MyExcelFunctions.xlsm")
'Call the function in the Excel workbook
Dim result
result = appXL.Run(wbk.VBProject.Name & ".MyFunction", "Some Argument")
End Sub
自动化外部 VBA 主机的 VBE
我没有反射,所以我的代码在 Access 中运行,并从 Excel 导入模块。
Sub ImportVBAModuleFromOtherIDE()
'Get an existing instance of Excel
Dim appXL As Excel.Application
Set appXL = GetObject(, "Excel.Application")
'Get the already opened Excel workbook
Dim wbk As Excel.Workbook
Set wbk = appXL.Workbooks("MyExcelFunctions.xlsm")
'Export a module from Excel
wbk.VBProject.VBComponents("Module1").Export "C:\Temp\Module1.bas"
'Import the module into the Access project
Application.VBE.VBProjects("Database11").VBComponents.Import "C:\Temp\Module1.bas"
End Sub