Mario  Meir-HuberVon VBA nach VSTO: Viele Wege führen nach ... .Net


In der Office Entwicklung ist VBA eines der häufiger vorkommenden Dinge. Viel alter Code ist bereits vorhanden und muss gewartet werden. Oft ist die Umstellung auf .Net deshalb mit sehr viel Mühen und Kosten verbunden. Jedoch gibt es auch die Möglichkeit, VBA Code in VSTO und somit .Net zu verwenden. In diesem Eintrag will ich mal die Execute-Methode vorstellen, welche auf VBA Code zugreift. Somit kann man beide Welten verwenden: Alten VBA Code ausführen, von dem man weiß dass dieser läuft und neue Klassen und Objektorientierung in der Office Entwicklung einführen.

Dieses Beispiel greift auf einem VBA Makro aus einem Xlsm (Macro Enabled Excel Workbook) zu. Der Zugriff sollte auch über eine neue Technologie, nämlich dem Ribbon, funktionieren. Hierfür wird ein neues Projekt mit einem Ribbon erstellt. Ferner wird die Xlsm Datei benötigt. Diese soll einen Makro enthalten.

1. Schritt: Makro erstellen

In der Xlsm Datei wird ein neuer Makro erstellt. Im Modul "Module1" wird eine neue "add()" Funktion hinzugefügt. Dort könnte beliebiger Code stehen. Im aktuellen Fall ist es jedoch "nur" eine MsgBox, die "Hello from VBA" ausgibt.

image

2. Schritt: Makro von VSTO aus starten

Auch dies ist sehr einfach - versprochen. Hierfür benötigt man lediglich den Run Aufruf. Das einzige Problem dürfte für C#-Entwickler entstehen, da für die Übergabeparameter alles als optionale Parameter übergeben wird. Dies bedeutet das der Methodenaufruf 31 Parameter hat, wovon wir jedoch nur 1 benötigen - und 30 mal "System.Type.Missing" angeben.

Das ganze funktioniert durch einen Klick auf den Ribbon Button:

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    Globals.ThisAddIn.Application.Run("Interop.xlsm!Module1.add", System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                            System.Type.Missing, System.Type.Missing, System.Type.Missing);

}
War doch einfach, nicht wahr?


Kategorien: 27.08.2008 15:15:19


 


Neuen Kommentar einfügen:

  Titel:   
  Name:
  E-Mail:
  Kommentar:

 
 


Kommentare




© Copyright 2008 ppedv AG