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

时间:2009-09-24 21:17:59

标签: c# excel vba excel-vba vsto

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

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

BTW,使用VS 2008和Excel 2007。

谢谢!

1 个答案:

答案 0 :(得分:12)

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

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

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

我希望这有帮助!

麦克