我們爲Excel創建了VSTO application-addin(不是文檔插件),我們希望將事件暴露給VBA代碼,以便VBA宏可以執行一些操作此事件在插件中觸發時採取行動。我怎樣才能讓VBA代碼能夠訂閱VSTO應用程序中定義的事件插件?從VBA(Excel)訪問VSTO應用程序插件類型
我認爲,因爲在Excel過程中加載插件,這應該不是太棘手,但還沒有找到方法。
BTW,使用VS 2008和Excel 2007
謝謝!
我們爲Excel創建了VSTO application-addin(不是文檔插件),我們希望將事件暴露給VBA代碼,以便VBA宏可以執行一些操作此事件在插件中觸發時採取行動。我怎樣才能讓VBA代碼能夠訂閱VSTO應用程序中定義的事件插件?從VBA(Excel)訪問VSTO應用程序插件類型
我認爲,因爲在Excel過程中加載插件,這應該不是太棘手,但還沒有找到方法。
BTW,使用VS 2008和Excel 2007
謝謝!
VSTO不是一般可以從其他DLL調用的DLL。 VSTO基本上是COM接口的.NET代碼,它是從一個單獨的AppDomain中運行的包裝器中運行的。雖然您的VSTO加載項在技術上是一個正在加載到Excel中的DLL,但它更像頂級EXE而不是其他調用者的DLL庫。
就我個人而言,我會創建一個標準的.NET程序集 - 也就是避免使用VSTO - 並使用正確的屬性將其公開給COM。這個過程在這裏得到了很好的解釋:COM Interop Exposed - Part 2,標題爲「將.NET事件公開給COM」。
如果你真的堅持要讓VBA能夠調用VSTO,那麼你必須通過Office.COMAddIn.Object
屬性來操作,該屬性通過覆蓋RequestComAddInAutomationService
方法來啓用。 Andrew Whitechapel在文章VSTO Add-ins, COMAddIns and RequestComAddInAutomationService中詳細討論了該過程。
我希望這有助於!
Mike
我結束了使用RequestComAddInAutomationService。謝謝。 – 2009-09-27 14:44:37
很酷,很好的工作。很高興它對你有效。 :-) – 2009-09-27 16:18:31
+1好問題,很好的回答! – Ahmad 2010-04-02 18:28:08