Laden...

Outlook 2010 Makro per VSTO Add-In aufrufen

Erstellt von schissern vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.036 Views
S
schissern Themenstarter:in
13 Beiträge seit 2008
vor 13 Jahren
Outlook 2010 Makro per VSTO Add-In aufrufen

Hallo,

ich habe ein sehr komplexes VBA Makro mit UserFormen zur Email Verwaltung das bei uns im Firmennetzwerk auf ca. 50 Clients mit Outlook 2007 verwendet wird.

Wir werden demnächst auf Outlook 2010 umstellen und ich möchte das Makro weiter verwenden. Dies soll jedoch über die Ribbonleiste aufgerufen werden können.

Ich habe mit VS2010 auch ein VSTO Add-In erstellt welches direkt in dem Home Tab mit den selbst erstellten Buttons angezeigt wird. Der Code aus dem Visual Studio Projekt wird auch korrekt ausgeführt.

Da ich jetzt nicht das gesamte Makro in C# umsetzen will, möchte ich bei Betätigung eines Buttons des Add-Ins das Makro aufrufen. Das bekomme ich leider nicht hin.

Die Hilfe http://support.microsoft.com/kb/306683/de hat mir auch nicht geholfen, bzw. auf Outlook bekomme ich es nicht umgesetzt.

Hat jemand eine Idee wie ich über C# und VSTO ein Makro in Outlook ausführen kann?

L
27 Beiträge seit 2011
vor 13 Jahren

Hallo,
in den FAQ's zu VSTO kannst du mehr Details finden. Ich würde auch auf den Aufwand für den Deploy des AddIns hinweisen.

Ich mache den Aufruf in Word (z.B. eines Makro's RandNummerEinfuegen) so:


        private void btnRandnr_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Office.Interop.Word.Application word = null;
            Microsoft.Office.Interop.Word.Document doc = null;
            try
            {
                word = Globals.ThisAddIn.Application;
                doc = word.ActiveDocument;
                object missing = Type.Missing;
                try
                {
                    word.Run("RandNummerEinfuegen", ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

                    //Fokus wieder loswerden
                    doc.ActiveWindow.SetFocus();
                    word.Activate();

                }
                catch
                {
                    MessageBox.Show("Bitte ihre Erfassungs-Dot als Word-AddIn verbinden. Nur dann kann auf die Funktionalität zugegriffen werden.");
                    //Fokus wieder loswerden
                    doc.ActiveWindow.SetFocus();
                    word.Activate();

                }

            }
            catch (COMException ex)
            {
            }
        }


Ich hoffe du kannst das in Richtung Outlook umbauen. Im Prinzip beruht das auf Interop- Automation. Die Run Methode ruft per IDispatch- Interface das betreffende VBA- Makro auf. Parameter wären auch möglich. Mit .net 4 können evtl. die Type.Missing "Dummy"- Parameter wegfallen, wenn ein dynamic- Typ verwendet wird. Habe ich noch nicht gemacht.

S
schissern Themenstarter:in
13 Beiträge seit 2008
vor 13 Jahren
Microsoft.Office.Interop.Outlook.Application

enthält keine Run definition, daher klappt es leider nicht mit der Umsetzung

L
27 Beiträge seit 2011
vor 13 Jahren

aha.
Funktioniert es so? Ohne daß ich das jetzt ausprobiert habe.

using System.Reflection;   //wg. den BindingFlags...

//...

object[] arglist = { "MeinMakroName" }; //hier evtuelle Parameter mit angeben
Application.GetType().InvokeMember("Run", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, Application, arglist);