我们有一个用于Excel的VSTO应用程序插件(不是文档插件),我们希望将事件公开给VBA代码,以便VBA宏可以在插件中触发此事件时执行某些操作。如何让VBA代码能够订阅VSTO application-addin中定义的事件?
我认为,因为插件是在Excel进程中加载的,所以这不应该太棘手,但还没找到方法。
BTW,使用VS 2008和Excel 2007。
谢谢!
答案 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中详细讨论了该过程。
我希望这有帮助!
麦克