目前尚不清楚对我的OP是什么。正在努力在这里做。
它似乎从反思之外调用时反射式图书馆是不可靠的,因此该解决方案似乎使用Application.Run
或自动化VBE涉及。
有2种方式实现的是:
有反射的Excel(我在这里所示的例子)的实例调用VBA功能,但如果你能得到的反射VBE参考,你可以反转这个并从Excel调用Reflection VBA。
有反射从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,所以在这里我的代码是在访问运行,并导入从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
祝你好运......只有这样,我可以以编程方式获得VBA代码从VBE加载执行是通过实例的主机应用程序,并调用'Application.Run' ...... [其中ISN” t支持所有VBE主机](http://stackoverflow.com/q/31954364/1188513)。如果你有任何进展,[Rubberduck](http://www.rubberduck-vba.com)项目肯定会听到你的意见! (注意,我共同拥有和维护此项目) –
仍然困惑 - 您想将模块的内容写入文本文件(或仅导出.bas文件?),然后将其导入到另一个Office应用程序中?或非Office应用程序? –
您正在使用哪个版本的Reflection?是2011年还是之后呢?我不确定自己完全明白自己想要做什么,但是我对C#有很大的运气,可以与Excel和Reflection(2011)进行交互。 – Hambone