2009-09-24 10 views
13

Nous avons une application VSTO-addin (pas un document-addin) pour Excel, et nous voulons exposer un événement au code VBA afin que la macro VBA peut faire action lorsque cet événement se déclenche dans l'addin. Comment puis-je obtenir le code VBA pour pouvoir m'abonner à un événement défini dans l'application VSTO?Accéder à une application VSTO - ajouter des types à partir de VBA (Excel)

Je pense que puisque l'addin est chargé dans le processus Excel, cela ne devrait pas être trop compliqué, mais n'a pas encore trouvé de solution.

BTW, en utilisant VS 2008 et Excel 2007.

Merci! VSTO n'est pas une DLL qui peut généralement être appelée à partir d'autres DLL.

Répondre

10

VSTO est essentiellement un code .NET s'exposant COM s'exécutant à partir d'un wrapper fonctionnant à partir d'un AppDomain distinct. Bien que votre complément VSTO soit techniquement une DLL en cours de chargement dans Excel, il fonctionne plus comme un EXE de niveau supérieur plutôt que comme une bibliothèque DLL exposée à d'autres appelants.

Personnellement, je créerais un assembly .NET standard - c'est-à-dire, évitez d'utiliser VSTO pour cela - et l'exposerais à COM en utilisant les attributs corrects. Le processus est bien expliqué ici: COM Interop Exposed - Part 2, sous la section intitulée "Exposing .NET Events to COM". Si vous insistez vraiment pour que VBA puisse appeler VSTO, vous devrez opérer via la propriété Office.COMAddIn.Object qui est activée en remplaçant la méthode RequestComAddInAutomationService. Le processus est discuté en détail dans l'article VSTO Add-ins, COMAddIns and RequestComAddInAutomationService par Andrew Whitechapel.

J'espère que cela aide!

Mike

+0

J'ai fini par utiliser le RequestComAddInAutomationService. Merci. –

+0

Cool, bon travail. Content que ça a marché pour toi. :-) –

+2

+1 bonne question, bonne réponse! – Ahmad

Questions connexes