twinBASIC: COM-Add-Ins für den VBA-Editor

Neben COM-Add-Ins für Access selbst (und natürlich auch für die übrigen Office-Anwendungen) können Sie mit twinBASIC auch COM-Add-Ins für den VBA-Editor programmieren. Dieser Beitrag beleuchtet detailliert, welche Schritte dazu notwendig sind. Dabei beginnen wir mit einer COM-Add-In-Vorlage, die wir für unseren Anwendungszweck anpassen. Anders als bei COM-Add-Ins für Access können Sie die Funktionen von COM-Add-Ins für den VBA-Editor nicht per Ribbon-Eintrag aufrufen, sondern benötigen einen Menüleisteneintrag dafür. Wir erläutern, wie dieser erzeugt wurd und wie Sie dann auf die Elemente des VBA-Editors zugreifen können.

twinBASIC

Im Beitrag twinBASIC – VB/VBA mit moderner Umgebung (www.access-im-unternehmen.de/1303) zeigen wir, was twinBASIC ist und wie Sie es installieren. twinBASIC ist eine Programmierumgebung auf Basis von Visual Studio Code mit einer Erweiterung von Wayne Philips, den manche vielleicht schon als Entwickler des Fehlerbehandlungstools vbWatchDog kennen. Sie können damit aktuell EXE-Dateien ohne Benutzeroberfläche erstellen oder DLLs, die Sie in Access-VBA-Projekte einbinden – siehe COM-DLLs mit twinBASIC (www.access-im-unternehmen.de/1304). Außerdem können Sie damit COM-Add-Ins erstellen. Im Beitrag twinBASIC – COM-Add-Ins für Access (www.access-im-unternehmen.de/1306) erfahren Sie, wie Sie COM-Add-Ins für Access-Anwendungen programmieren.

Wozu COM-Add-Ins für den VBA-Editor

Wer immer nur mit Access programmiert und keine anderen Entwicklungsumgebungen als den VBA-Editor nutzt, hat sich vielleicht schon so sehr an die recht betagte Entwicklungsumgebung gewöhnt, dass er nichts vermisst. Wer jedoch gelegentlich über den Tellerrand schaut und sieht, welche Möglichkeiten andere Entwicklungsumgebungen bieten, würde sich vielleicht doch über die eine oder andere Weiterentwicklung freuen. Nun ist die Benutzeroberfläche von Access an sich seit der Version 2010 nicht mehr weiterentwickelt worden – bis auf einige unbedeutende Änderungen. Der Funktionsumfang wurde hingegen eher eingeschränkt – man denke an die Replikation und das Sicherheitssystem. Ein ähnliches Bild liefert der VBA-Editor. Genau genommen liegen hier die letzten Änderungen noch länger zurück.

Gelegentlich hat ein Entwickler Ideen, wie er den VBA-Editor verbessern könnte, was theoretisch auch mit .NET-COM-Add-Ins möglich wäre. Es gibt einige Vorlagen, mit denen man Word-, Excel- oder Outlook-Erweiterungen programmieren kann. Für Access oder auch für den VBA-Editor gibt es jedoch keine Projektvorlagen, also müsste man schon komplett selbst herausfinden, an welchen Stellen in den Vorlagen für die anderen Office-Anwendungen man schrauben müsste.

Da ist es doch erfrischend, dass Wayne Philips eine Möglichkeit bietet, COM-Add-Ins in einer neuen, alternativen Entwicklungsumgebung zum VBA-Editor und zu Visual Studio (.NET) zu entwickeln – von Visual Studio 6 reden wir erst gar nicht mehr, da damit nur die Entwicklung von Programmen auf Basis von 32-Bit möglich ist.

Mit twinBASIC können Sie jedoch, wie auf den folgenden Seiten beschrieben, auch COM-Add-Ins für den VBA-Editor entwickeln und es ist sogar geplant, dass dies auch für die 64-Bit-Version von Office möglich sein soll (aktuell ist twinBASIC noch in einem frühen Entwicklungsstadium, Features wie die Programmierung von Userinterfaces beispielsweise folgen erst später).

Projektvorlage umwandeln

Auf der Webseite von Wayne Philips finden Sie unter dem Link https://twinbasic.com/preview.html einige Beispiele, darunter auch das Beispiel eines COM-Add-Ins. Dieses verwenden wir als Basis für unser erstes eigenes COM-Add-In für den VBA-Editor.

Der Ordner in der Zip-Datei enthält vier Dateien:

  • myVBEAddin.code-workspace: Datei mit den Workspace-Einstellungen
  • myVBEAddin.twinproj: Datei mit den eigentlichen Projektdaten
  • RegisterAddin32.reg: Datei mit Informationen zum Registrieren des COM-Add-Ins
  • UnregisterAddin32.reg: Datei mit Informationen zum Entfernen der Registrierung des COM-Add-Ins

Die beiden ersten Dateien müssen immer den gleichen Namen aufweisen. Sie öffnen ein Projekt, indem Sie die Datei mit der Dateiendung code-workspace öffnen (gegebenenfalls müssen Sie die Dateiendung noch mit Visual Studio Code verknüpfen).

Dies liefert im nun erscheinenden Visual Studio Code die Ansicht aus Bild 1. Um weitere Dateien müssen Sie sich noch keine Gedanken machen, aktuell reicht eine Projektdatei mit dem Code völlig aus.

Entwicklungsumgebung mit dem Code des COM-Add-Ins für den VBA-Editor

Bild 1: Entwicklungsumgebung mit dem Code des COM-Add-Ins für den VBA-Editor

Einstellungen anpassen

Außerdem finden Sie noch Einstellungen, die wir uns nun ansehen und gegebenenfalls erweitern. Klicken Sie auf den Bereich Settings, finden Sie einige interessante Eigenschaften vor, die wir an dieser Stelle kurz vorstellen wollen (siehe Bild 2):

Einstellungen für das Projekt

Bild 2: Einstellungen für das Projekt

  • Project: Name: Name des Projekts. Erscheint jedoch im Gegensatz zu COM-DLLs nirgends.
  • COM Type Library / ActiveX References: Liste der Verweise des Projekts, die Sie erweitern können.
  • Project: GUID: GUID des Projekts. Diese sollten Sie anpassen, wenn Sie ein neues Projekt auf Basis dieser Vorlage erstellen.
  • Project: Build Output Path: Pfad mit Platzhaltern, der angibt, wo die zu erstellende Datei gespeichert werden soll.
  • Project: Description: Beschreibung des Projekts. Erscheint jedoch im Gegensatz zu COM-DLLs nirgends.

Sie haben nun schon an zwei Stellen gelesen, dass Eigenschaften nirgends erscheinen. Das ist ein Unterschied zu COM-DLLs, bei denen die hier angegebenen Informationen zum Beispiel im Verweise-Dialog erscheinen. Wo und wie Sie den Namen für das COM-Add-In für den VBA-Editor einstellen und wo es dann erscheint, lesen Sie weiter unten.

Code des COM-Add-Ins für den VBA-Editor

Wenn Sie das Modul HelloWorld.twin ansehen, finden Sie eine Klasse vor, welche die Schnittstelle IDTExtensibility2 implementiert. Das bedeutet, dass die Class-Anweisung den Zusatz Implements IDEXTENSIBILITY2 enthält und dass die Klasse alle Elemente dieser Schnittstelle implementieren muss, was bedeutet, dass die in der Klasse enthaltenen Methoden vorliegen müssen (siehe Listing 1).

Class MyVBEAddin
     Implements IDTExtensibility2
     Private _VBE As Object ''VBIDE.VBE
     Private _AddIn As Object ''VBIDE.AddIn
    
     Sub OnConnection(ByVal Application As Object, ByVal ConnectMode As ext_ConnectMode, ByVal AddInInst As Object, _
             ByRef custom As Variant()) Implements IDTExtensibility2.OnConnection
         MsgBox "myVBEAddin.OnConnection"
         Set _VBE = Application
         Set _AddIn = AddInInst
     End Sub
     
     Sub OnDisconnection(ByVal RemoveMode As ext_DisconnectMode, ByRef custom As Variant()) _
             Implements IDTExtensibility2.OnDisconnection
         MsgBox "myVBEAddin.OnDisconnection"
     End SUb
     
     Sub OnAddInsUpdate(ByRef custom As Variant()) Implements IDTExtensibility2.OnAddInsUpdate
         MsgBox "myVBEAddin.OnAddInsUpdate"
     End SUb
     
     Sub OnStartupComplete(ByRef custom As Variant()) Implements IDTExtensibility2.OnStartupComplete
         MsgBox "myVBEAddin.OnStartupComplete"
     End Sub
     
     Sub OnBeginShutdown(ByRef custom As Variant()) Implements IDTExtensibility2.OnBeginShutdown
         MsgBox "myVBEAddin.OnBeginShutdown"
     End Sub
End Class

Listing 1: Aufbau der Klasse des COM-Add-Ins für den VBA-Editor

In den Methoden finden Sie zunächst nur jeweils eine MsgBox-Anweisung, die nur dazu dient, die grundlegende Funktion des COM-Add-Ins für den VBA-Editor zu demonstrieren, solange Sie noch keine echte Funktionalität eingebaut haben.

Außerdem enthält die Klasse die Deklaration zweier Variablen:

Private _VBE As Object ''VBIDE.VBE
Private _AddIn As Object ''VBIDE.AddIn

Diese sind noch mit dem Datentyp Object ausgestattet, damit das Add-In flexibel mit verschiedenen Hosts eingesetzt werden kann. Wir ersetzen dies gleich, benötigen aber zuvor zwei weitere Verweise. Diese fügen wir im Bereich Settings unter COM Type Library / ActiveX References zwei neue Verweise hinzu, nämlich Microsoft Visual Basic For Applications Extensibility 5.3 und Microsoft Office 16.0 Object Library (siehe Bild 3). Anschließend müssen Sie die Änderungen an den Einstellungen speichern, was Sie beispielsweise mit der Tastenkombination Strg + S erledigen können.

Hinzufügen einiger Verweise auf Projektbibliotheken

Bild 3: Hinzufügen einiger Verweise auf Projektbibliotheken

Danach können Sie die Deklaration der beiden Variablen wie folgt ändern:

Private _VBE As VBIDE.VBE
Private _AddIn As VBIDE.AddIn

Diese werden in der Prozedur OnConnection gefüllt:

Sub OnConnection(ByVal Application As Object, _
         ByVal ConnectMode As ext_ConnectMode, _
         ByVal AddInInst As Object, _
         ByRef custom As Variant()) _
         Implements IDTExtensibility2.OnConnection
     MsgBox "myVBEAddin.OnConnection"
     Set _VBE = Application
     Set _AddIn = AddInInst
End Sub

Erstellen des COM-Add-Ins für den VBA-Editor

Damit können wir das COM-Add-In nun erstellen. Dazu klicken Sie im Bereich TWINBASIC auf die in Bild 4 markierte Schaltfläche.

Erstellen des Projekts

Bild 4: Erstellen des Projekts

Die Ausgabe im Debugging-Bereich sollte danach wie in der gleichen Abbildung aussehen.

Wenn nicht, kann es daran liegen, dass das Projekt nicht kompiliert werden kann oder das noch ein VBA-Editor geöffnet ist, der das bereits erstellte COM-Add-In noch nutzt und dadurch einen Schreibschutz auf die Datei legt.

In letzterem Fall hilft meist das Schließen aller Office-Anwendungen, deren VBA-Editor innerhalb der aktuellen Session bereits einmal geöffnet war.

Registrieren des COM-Add-Ins für den VBA-Editor

Danach führen Sie die Datei Register-Addin32.reg aus, um die notwendigen Registry-Einträge hinzuzufügen. Das sind nicht alle Einträge – einige Einträge legt bereits twinBASIC beim Erstellen des COM-Add-Ins an. Die Registrierungsdatei enthält lediglich diejenigen, die für das Erkennen des COM-Add-Ins beim Öffnen des VBA-Editors notwendig sind.

Anschließend ist das Add-In registriert und beim Öffnen des VBA-Editors einer beliebigen Office-Anwendung sollten die Meldungsfenster erscheinen, die in den verschiedenen Prozeduren definiert wurden.

Den Inhalt der Registrierungsdatei sehen Sie in Bild 5. Hier sollten Sie noch Anpassungen vornehmen, und zwar für die beiden Eigenschaften FriendlyName und Description.

Registrierungsdatei für das COM-Add-In für den VBA-Editor

Bild 5: Registrierungsdatei für das COM-Add-In für den VBA-Editor

Diese beiden tauchen nämlich im Add-In-Manager des VBA-Editors, den Sie mit dem Menüeintrag Add-Ins|Add-In-Manager… öffnen, wie in Bild 6 auf. Hier finden Sie die Werte der Eigenschaften FriendlyName und Description wieder.

Das COM-Add-In im Add-In-Manager des VBA-Editors

Bild 6: Das COM-Add-In im Add-In-Manager des VBA-Editors

Falls Sie sich wundern, warum in der Registry-Datei alle Informationen scheinbar doppelt abgebildet werden: Der erste Eintrag ist für den VBA-Editor, der zweite für ein eventuell vorhandes Visual Studio 6.

Menüeintrag für das COM-Add-In hinzufügen

Nun kommt ein wichtiger Punkt: Bisher gibt es noch keine Gelegenheit, Funktionen des COM-Add-Ins über den VBA-Editor aufzurufen. Dazu fügen wir diesem nun einen Menüeitrag hinzu, mit denen der Benutzer die Funktionen aufrufen kann.

Hier haben wir verschiedene Möglichkeiten. Wir können eine bestehende Symbolleiste verwenden und dieser einen Menüeintrag hinzufügen.

Oder wir fügen diesen zu einem Kontextmenü hinzu. Schließlich können wir auch eine komplett neue Symbolleiste erstellen und diese mit den Befehlen unseres COM-Add-Ins für den VBA-Editor füllen.

Letzteres ist am einfachsten, also schauen wir uns dies zunächst an.

Menüleisten, Symbolleisten und Kontextmenüs

Da Access und die übrigen Office-Programme seit der Version 2007 das Ribbon und Kontextmenüs als Menü verwenden, während Menüleisten und Symbolleisten nur noch vom VBA-Editor genutzt werden, hier noch eine kurze Einordnung der verschiedenen Menüarten im VBA-Editor:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar