从VBA(Excel)访问VSTO应用程序 - 插件类型

Kan*_* Su 14 c# excel vba vsto excel-vba

我们有一个用于Excel的VSTO应用程序插件(不是文档插件),我们希望将事件公开给VBA代码,以便VBA宏可以在插件中触发此事件时执行某些操作.如何让VBA代码能够订阅VSTO application-addin中定义的事件?

我认为,因为addin是在Excel进程中加载​​的,所以这不应该太棘手,但还没有找到方法.

顺便说一句,使用VS 2008和Excel 2007.

谢谢!

Mik*_*lum 12

VSTO不是通常可以从其他DLL调用的DLL.VSTO基本上是暴露于COM的.NET代码,它在一个独立的AppDomain中运行的包装器中运行.虽然您的VSTO加载项在技术上是一个加载到Excel中的DLL,但它的操作更像是顶级EXE而不是暴露给其他调用者的DLL库.

就个人而言,我会创建一个标准的.NET程序集 - 也就是说,避免使用VSTO - 并使用正确的属性将其公开给COM.这个过程在这里得到了很好的解释:COM Interop Exposed - 第2部分,标题为"向.NET公开.NET事件"一节.

如果您真的坚持要求VBA能够调用VSTO,那么您必须Office.COMAddIn.Object通过覆盖该RequestComAddInAutomationService方法启用的属性进行操作.Andrew Whitechapel 在文章VSTO加载项,COMAddIns和RequestComAddInAutomationService中详细讨论了该过程.

我希望这有帮助!

麦克风