2009-09-24 7 views
13

Abbiamo un add-in per applicazione VSTO (non un documento-addin) per Excel e vogliamo esporre un evento al codice VBA in modo che la macro VBA possa fare qualche azione quando questo evento si attiva nell'addin. Come posso ottenere il codice VBA per essere in grado di sottoscrivere un evento definito nell'applicazione-componente VSTO?Accesso a tipi di add-in per applicazioni VSTO da VBA (Excel)

Penso che dal momento che l'addin sia caricato nel processo di Excel, questo non dovrebbe essere troppo complicato, ma non ha ancora trovato un modo.

BTW, utilizzando VS 2008 ed Excel 2007.

Grazie!

risposta

10

VSTO non è una DLL che può essere generalmente chiamata da altre DLL. VSTO è fondamentalmente un codice .NET esposto a COM che opera da un wrapper che funziona da un AppDomain separato. Sebbene il componente aggiuntivo VSTO sia tecnicamente una DLL che viene caricata in Excel, funziona più come un EXE di primo livello piuttosto che come una libreria DLL esposta ad altri chiamanti.

Personalmente, vorrei creare un assembly .NET standard, ovvero evitare l'utilizzo di VSTO per questo, ed esporlo a COM utilizzando gli attributi corretti. Il processo è ben spiegato qui: COM Interop Exposed - Part 2, nella sezione intitolata "Esposizione di eventi .NET a COM".

Se si vuole davvero abilitare VBA a chiamare VSTO, sarà necessario operare tramite la proprietà Office.COMAddIn.Object abilitata sovrascrivendo il metodo RequestComAddInAutomationService. Il processo è discusso in dettaglio nell'articolo VSTO Add-ins, COMAddIns and RequestComAddInAutomationService di Andrew Whitechapel.

Spero che questo aiuti!

Mike

+0

Ho finito per utilizzare il RequestComAddInAutomationService. Grazie. –

+0

Cool, bel lavoro. Sono contento che ha funzionato per te. :-) –

+2

+1 buona domanda, ottima risposta! – Ahmad