COM-Add-In für den VBA-Editor programmieren

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

COM-Add-In für den VBA-Editor programmieren

Der VBA-Editor hinkt Visual Studio um Lichtjahre hinterher. Doch es gibt gute Nachrichten: Mit einem COM-Add-In auf Basis von .NET können Sie auch den VBA-Editor noch um Funktionen erweitern. Das zeigen ja auch andere Werkzeugkästen wie etwa die MZ-Tools. Wir wollen in diesem Artikel einmal zeigen, wie Sie ein COM-Add-In in Visual Studio programmieren, das dann beim Öffnen des VBA-Editors zu seiner Erweiterung zur Verfügung steht.

In diesem Artikel schauen wir uns zunächst an, welche Schritte grundsätzlich zum Erstellen eines COM-Add-Ins für den VBA-Editor nötig sind. Die Funktion des COM-Add-Ins beschränken wir auf das Nötigste – darauf gehen wir dann in einem weiteren Artikel ein und fügen dem Add-In dann nützliche Funktionen hinzu.

Neues Projekt erstellen

Visual Studio 2017 stellt zwar Projektvorlagen für COM-Add-Ins für die Office-Anwendungen Excel, Outlook, Word et cetera bereit, jedoch nicht für Access oder den VBA-Editor der Office-Anwendung. Also müssen wir uns selbst behelfen und die notwendigen Elemente selbst zusammenstellen.

Dazu legen Sie unter Visual Studio zunächst ein neues Projekt mit der Vorlage Visual Basic|Windows Desk­top|Klassenbibliothek an und speichern dieses unter dem Namen VBECOM­AddIn (siehe Bild 1).

Anlegen des neuen Projekts

Bild 1: Anlegen des neuen Projekts

Damit erstellen Sie ein neues Projekt, dass zunächst lediglich die Klasse Class1.vb enthält.

Verweise hinzufügen

Danach fügen wir dem Projekt einige Verweise hinzu, wobei Sie jeweils über den Menüeintrag Projekt|Verweise hinzufügen... starten. Hier wollen wir als einen Verweis auf die Extensibility-Bibliothek hinzufügen. Diese finden wir nur über den Durchsuchen-Dialog des Verweis-Managers, den Sie über die entsprechende Schaltfläche öffnen (siehe Bild 2).

Verwalten der Verweise

Bild 2: Verwalten der Verweise

Hier finden Sie dann etwa unter dem Verzeichnis C:Program Files (x86)Microsoft Visual Studio 14.0Visual Studio Tools for OfficePIACommon die Datei Extensibility.dll (siehe Bild 3).

Auswahl der Datei Extensibility.dll

Bild 3: Auswahl der Datei Extensibility.dll

Achtung: Wenn Sie einfach Extensibility in das Suchfeld eingeben, werden Sie vermutlich die falsche Version erwischen, was dazu führen kann, dass das Add-In nicht geladen werden kann!

Weitere Verweise hinzufügen

Danach ergänzen wir das Projekt um weitere Verweise, wozu wir ebenfalls den Verweis-Manager benötigen. Die weiteren Verweise finden Sie im Bereich Assemblys, wo Sie am einfachsten den passenden Suchbegriff in das Suchen-Feld eingeben. Die erste so zu ergänzende Bibliothek heißt beispielsweise

Sie ist in zwei verschiedenen Verzeichnissen verfügbar, nämlich in C:Program Files (x86)Microsoft Visual Studio 14.0Visual Studio Tools for OfficePIAOffice15 und C:Program Files (x86)Microsoft Visual StudioSharedVisual Studio Tools for OfficePIAOffice15. Wir konnten keinen Unterschied bei den beiden DLLs feststellen. Es spielt also keine Rolle, welche Sie verwenden. Also wählen wir einfach einen der beiden aktuelleren Einträge aus (siehe Bild 4). Warum aber überhaupt einen Verweis auf die Access-Bibliothek, obwohl wir doch ein COM-Add-In für den VBA-Editor erstellen wollen? Ganz einfach: So haben wir auch die Möglichkeit, einmal auf die Objekte der Access-Datenbank zuzugreifen, um gegebenenfalls etwa VBA-Klassen auf Basis von Tabellen oder Formularen erstellen zu lassen. Auf die gleiche Weise fügen wir nun auch noch Verweise auf die Bibliotheken Microsoft.Office.Interop.Access.Dao, Microsoft.VBE.Interop und Microsoft.VBE.Interop.Forms hinzu. Außerdem benötigen wir etwa für die Anzeige von Meldungsfenstern noch den Namespace System.Windows.Forms.

Einbinden des Namespaces Microsoft.Office.Interop.Access

Bild 4: Einbinden des Namespaces Microsoft.Office.Interop.Access

Insgesamt sieht die Liste der Verweise nun wie in Bild 5 aus.

Liste der Verweise des Projekts

Bild 5: Liste der Verweise des Projekts

Klasse Connect erstellen

Nun fügen wir dem Projekt eine neue Klasse namens Connect hinzu. Dazu wählen Sie im Kontextmenü des Eintrags VBECOMAddIn des Projektmappen-Explorers den Befehl Hinzufügen|Klasse... aus.

Für die neue Klasse vergeben Sie im nun erscheinenden Dialog Neues Element hinzufügen den Namen Connect (siehe Bild 6).

Hinzufügen der Klassendatei VBECOMAddIn

Bild 6: Hinzufügen der Klassendatei VBECOMAddIn

Namespaces hinzufügen

Der neuen Klassendatei fügen wir nun zunächst die Verweise auf die Namespaces der soeben hinzugefügten Bibliotheken hinzu, und zwar im Kopf des Moduls:

Imports Microsoft.Office.Interop
Imports Extensibility
Imports Microsoft.Office.Interop.Access
Imports Microsoft.Office.Interop.Access.Dao
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Imports Microsoft.Vbe.Interop
Imports Microsoft.Vbe.Interop.Forms

Extensibility-Schnittstelle implementieren

Danach folgt ein Schritt, mit dem wir die Schnittstelle Extensibility.IDTExtensibility2 für die Klasse Connect implementieren. Dazu fügen wir in der Zeile unterhalb der Zeile Public Class Connect die Anweisung Implements ein und ergänzen dann wie in Bild 7 zu erkennen auf Implements Extensibility.IDTExtensibility2.

Implementieren der Schnittstelle Extensibility.IDTExtensibility2

Bild 7: Implementieren der Schnittstelle Extensibility.IDTExtensibility2

Diese Anweisung wird nun noch rot unterstrichen markiert. Der Grund ist einfach: Wir haben zwar angegeben, dass wir die Schnittstelle implementieren wollen, allerdings haben wir nicht alle Member dieser Schnittstelle implementiert. Einen Hinweis darauf liefert auch die Fehlerliste (siehe Bild 8).

Fehlende Member der Implementierung von Extensibility.IDTExtensibility2

Bild 8: Fehlende Member der Implementierung von Extensibility.IDTExtensibility2

Diesen Fehler können wir allerdings recht schnell beheben. Dazu klicken Sie zunächst mit der rechten Maustaste auf den markierten Code und wählen aus dem Kontextmenü den Eintrag Schnellaktionen und Refactorings... aus. Daraufhin erscheint eine Auswahl mit zwei Möglichkeiten, von denen wir den zweiten Eintrag namens Schnittstelle implementieren auswählen. Dies zeigt alle Member an, die durch diesen Schritt automatisch zur Klasse hinzugefügt würden (siehe Bild 9).

Implementieren per Schnellaktionen und Refactorings

Bild 9: Implementieren per Schnellaktionen und Refactorings

Wählen Sie diesen Eintrag aus, ergänzt diese Schnellaktion die Klasse wie in Bild 10.

Die Klasse mit allen Membern der Implementierung der Schnittstelle Extensibility.IDTExtensibility2

Bild 10: Die Klasse mit allen Membern der Implementierung der Schnittstelle Extensibility.IDTExtensibility2

Neue GUID ermitteln

Nun benötigen wir eine eindeutige GUID, mit der wir das Add-In versehen. Diese ermitteln wir, indem wir den Menüpunkt Extras|GUID erstellen aufrufen. Im nun erscheinenden Dialog wählen wir die letzte Option aus und klicken zum Erstellen der neuen GUID auf die Schaltfläche Neue GUID (siehe Bild 11).

Ermitteln einer neuen GUID

Bild 11: Ermitteln einer neuen GUID

Dann kopieren Sie diese mit der Schaltfläche Kopieren in die Zwischenablage. Die GUID hat nicht exakt die Form, die wir benötigen, sodass wir diese noch etwas anpassen müssen.

Dann fügen wir diese in die Attribut-Klasse ComVisible direkt über der Zeile Public Class Connect ein und legen die ProgID auf VBECOMAddIn.Connect fest, also auf

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.