{"id":55001307,"date":"2021-06-01T00:00:00","date_gmt":"2021-07-31T10:14:25","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1307"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"twinBASIC_COMAddIns_fuer_den_VBAEditor","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/","title":{"rendered":"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/8206a9beca3d4cb6b48c3aece8d50ba0\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Neben COM-Add-Ins f&uuml;r Access selbst (und nat&uuml;rlich auch f&uuml;r die &uuml;brigen Office-Anwendungen) k&ouml;nnen Sie mit twinBASIC auch COM-Add-Ins f&uuml;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&uuml;r unseren Anwendungszweck anpassen. Anders als bei COM-Add-Ins f&uuml;r Access k&ouml;nnen Sie die Funktionen von COM-Add-Ins f&uuml;r den VBA-Editor nicht per Ribbon-Eintrag aufrufen, sondern ben&ouml;tigen einen Men&uuml;leisteneintrag daf&uuml;r. Wir erl&auml;utern, wie dieser erzeugt wurd und wie Sie dann auf die Elemente des VBA-Editors zugreifen k&ouml;nnen.<\/b><\/p>\n<h2>twinBASIC<\/h2>\n<p>Im Beitrag <b>twinBASIC &#8211; VB\/VBA mit moderner Umgebung <\/b>(<b>www.access-im-unternehmen.de\/1303<\/b>) 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 <b>vbWatchDog <\/b>kennen. Sie k&ouml;nnen damit aktuell EXE-Dateien ohne Benutzeroberfl&auml;che erstellen oder DLLs, die Sie in Access-VBA-Projekte einbinden &#8211; siehe <b>COM-DLLs mit twinBASIC <\/b>(<b>www.access-im-unternehmen.de\/1304<\/b>). Au&szlig;erdem k&ouml;nnen Sie damit COM-Add-Ins erstellen. Im Beitrag <b>twinBASIC &#8211; COM-Add-Ins f&uuml;r Access <\/b>(<b>www.access-im-unternehmen.de\/1306<\/b>) erfahren Sie, wie Sie COM-Add-Ins f&uuml;r Access-Anwendungen programmieren.<\/p>\n<h2>Wozu COM-Add-Ins f&uuml;r den VBA-Editor<\/h2>\n<p>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&ouml;hnt, dass er nichts vermisst. Wer jedoch gelegentlich &uuml;ber den Tellerrand schaut und sieht, welche M&ouml;glichkeiten andere Entwicklungsumgebungen bieten, w&uuml;rde sich vielleicht doch &uuml;ber die eine oder andere Weiterentwicklung freuen. Nun ist die Benutzeroberfl&auml;che von Access an sich seit der Version 2010 nicht mehr weiterentwickelt worden &#8211; bis auf einige unbedeutende &Auml;nderungen. Der Funktionsumfang wurde hingegen eher eingeschr&auml;nkt &#8211; man denke an die Replikation und das Sicherheitssystem. Ein &auml;hnliches Bild liefert der VBA-Editor. Genau genommen liegen hier die letzten &Auml;nderungen noch l&auml;nger zur&uuml;ck.<\/p>\n<p>Gelegentlich hat ein Entwickler Ideen, wie er den VBA-Editor verbessern k&ouml;nnte, was theoretisch auch mit .NET-COM-Add-Ins m&ouml;glich w&auml;re. Es gibt einige Vorlagen, mit denen man Word-, Excel- oder Outlook-Erweiterungen programmieren kann. F&uuml;r Access oder auch f&uuml;r den VBA-Editor gibt es jedoch keine Projektvorlagen, also m&uuml;sste man schon komplett selbst herausfinden, an welchen Stellen in den Vorlagen f&uuml;r die anderen Office-Anwendungen man schrauben m&uuml;sste.<\/p>\n<p>Da ist es doch erfrischend, dass Wayne Philips eine M&ouml;glichkeit bietet, COM-Add-Ins in einer neuen, alternativen Entwicklungsumgebung zum VBA-Editor und zu Visual Studio (.NET) zu entwickeln &#8211; von Visual Studio 6 reden wir erst gar nicht mehr, da damit nur die Entwicklung von Programmen auf Basis von 32-Bit m&ouml;glich ist.<\/p>\n<p>Mit twinBASIC k&ouml;nnen Sie jedoch, wie auf den folgenden Seiten beschrieben, auch COM-Add-Ins f&uuml;r den VBA-Editor entwickeln und es ist sogar geplant, dass dies auch f&uuml;r die 64-Bit-Version von Office m&ouml;glich sein soll (aktuell ist twinBASIC noch in einem fr&uuml;hen Entwicklungsstadium, Features wie die Programmierung von Userinterfaces beispielsweise folgen erst sp&auml;ter).<\/p>\n<h2>Projektvorlage umwandeln<\/h2>\n<p>Auf der Webseite von Wayne Philips finden Sie unter dem Link <b>https:\/\/twinbasic.com\/preview.html <\/b>einige Beispiele, darunter auch das Beispiel eines COM-Add-Ins. Dieses verwenden wir als Basis f&uuml;r unser erstes eigenes COM-Add-In f&uuml;r den VBA-Editor.<\/p>\n<p>Der Ordner in der Zip-Datei enth&auml;lt vier Dateien:<\/p>\n<ul>\n<li><b>myVBEAddin.code-workspace<\/b>: Datei mit den Workspace-Einstellungen<\/li>\n<li><b>myVBEAddin.twinproj<\/b>: Datei mit den eigentlichen Projektdaten<\/li>\n<li><b>RegisterAddin32.reg<\/b>: Datei mit Informationen zum Registrieren des COM-Add-Ins<\/li>\n<li><b>UnregisterAddin32.reg<\/b>: Datei mit Informationen zum Entfernen der Registrierung des COM-Add-Ins<\/li>\n<\/ul>\n<p>Die beiden ersten Dateien m&uuml;ssen immer den gleichen Namen aufweisen. Sie &ouml;ffnen ein Projekt, indem Sie die Datei mit der Dateiendung <b>code-workspace <\/b>&ouml;ffnen (gegebenenfalls m&uuml;ssen Sie die Dateiendung noch mit Visual Studio Code verkn&uuml;pfen).<\/p>\n<p>Dies liefert im nun erscheinenden Visual Studio Code die Ansicht aus Bild 1. Um weitere Dateien m&uuml;ssen Sie sich noch keine Gedanken machen, aktuell reicht eine Projektdatei mit dem Code v&ouml;llig aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_001.png\" alt=\"Entwicklungsumgebung mit dem Code des COM-Add-Ins f&uuml;r den VBA-Editor\" width=\"700\" height=\"385,8974\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Entwicklungsumgebung mit dem Code des COM-Add-Ins f&uuml;r den VBA-Editor<\/span><\/b><\/p>\n<h2>Einstellungen anpassen<\/h2>\n<p>Au&szlig;erdem finden Sie noch Einstellungen, die wir uns nun ansehen und gegebenenfalls erweitern. Klicken Sie auf den Bereich <b>Settings<\/b>, finden Sie einige interessante Eigenschaften vor, die wir an dieser Stelle kurz vorstellen wollen (siehe Bild 2):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_002.png\" alt=\"Einstellungen f&uuml;r das Projekt\" width=\"649,559\" height=\"509,6295\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Einstellungen f&uuml;r das Projekt<\/span><\/b><\/p>\n<ul>\n<li><b>Project: Name<\/b>: Name des Projekts. Erscheint jedoch im Gegensatz zu COM-DLLs nirgends.<\/li>\n<li><b>COM Type Library \/ ActiveX References<\/b>: Liste der Verweise des Projekts, die Sie erweitern k&ouml;nnen.<\/li>\n<li><b>Project: GUID<\/b>: GUID des Projekts. Diese sollten Sie anpassen, wenn Sie ein neues Projekt auf Basis dieser Vorlage erstellen.<\/li>\n<li><b>Project: Build Output Path<\/b>: Pfad mit Platzhaltern, der angibt, wo die zu erstellende Datei gespeichert werden soll.<\/li>\n<li><b>Project: Description<\/b>: Beschreibung des Projekts. Erscheint jedoch im Gegensatz zu COM-DLLs nirgends.<\/li>\n<\/ul>\n<p>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&uuml;r das COM-Add-In f&uuml;r den VBA-Editor einstellen und wo es dann erscheint, lesen Sie weiter unten.<\/p>\n<h2>Code des COM-Add-Ins f&uuml;r den VBA-Editor<\/h2>\n<p>Wenn Sie das Modul <b>HelloWorld.twin <\/b>ansehen, finden Sie eine Klasse vor, welche die Schnittstelle <b>IDTExtensibility2 <\/b>implementiert. Das bedeutet, dass die <b>Class<\/b>-Anweisung den Zusatz <b>Implements IDEXTENSIBILITY2 <\/b>enth&auml;lt und dass die Klasse alle Elemente dieser Schnittstelle implementieren muss, was bedeutet, dass die in der Klasse enthaltenen Methoden vorliegen m&uuml;ssen (siehe Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Class<\/span> MyVBEAddin\r\n     Implements IDTExtensibility2\r\n     <span style=\"color:blue;\">Private <\/span>_VBE<span style=\"color:blue;\"> As Object<\/span> ''VBIDE.VBE\r\n     <span style=\"color:blue;\">Private <\/span>_AddIn<span style=\"color:blue;\"> As Object<\/span> ''VBIDE.AddIn\r\n    \r\n     Sub OnConnection(ByVal Application<span style=\"color:blue;\"> As Object<\/span>, ByVal ConnectMode<span style=\"color:blue;\"> As <\/span>ext_ConnectMode, ByVal AddInInst<span style=\"color:blue;\"> As Object<\/span>, _\r\n             ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) Implements IDTExtensibility2.OnConnection\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"myVBEAddin.OnConnection\"\r\n         <span style=\"color:blue;\">Set<\/span> _VBE = Application\r\n         <span style=\"color:blue;\">Set<\/span> _AddIn = AddInInst\r\n     End Sub\r\n     \r\n     Sub OnDisconnection(ByVal RemoveMode<span style=\"color:blue;\"> As <\/span>ext_DisconnectMode, ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) _\r\n             Implements IDTExtensibility2.OnDisconnection\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"myVBEAddin.OnDisconnection\"\r\n     End SUb\r\n     \r\n     Sub OnAddInsUpdate(ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) Implements IDTExtensibility2.OnAddInsUpdate\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"myVBEAddin.OnAddInsUpdate\"\r\n     End SUb\r\n     \r\n     Sub OnStartupComplete(ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) Implements IDTExtensibility2.OnStartupComplete\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"myVBEAddin.OnStartupComplete\"\r\n     End Sub\r\n     \r\n     Sub OnBeginShutdown(ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) Implements IDTExtensibility2.OnBeginShutdown\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"myVBEAddin.OnBeginShutdown\"\r\n     End Sub\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Aufbau der Klasse des COM-Add-Ins f&uuml;r den VBA-Editor<\/span><\/b><\/p>\n<p>In den Methoden finden Sie zun&auml;chst nur jeweils eine <b>MsgBox<\/b>-Anweisung, die nur dazu dient, die grundlegende Funktion des COM-Add-Ins f&uuml;r den VBA-Editor zu demonstrieren, solange Sie noch keine echte Funktionalit&auml;t eingebaut haben.<\/p>\n<p>Au&szlig;erdem enth&auml;lt die Klasse die Deklaration zweier Variablen:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>_VBE<span style=\"color:blue;\"> As Object<\/span> ''VBIDE.VBE\r\n<span style=\"color:blue;\">Private <\/span>_AddIn<span style=\"color:blue;\"> As Object<\/span> ''VBIDE.AddIn<\/pre>\n<p>Diese sind noch mit dem Datentyp <b>Object <\/b>ausgestattet, damit das Add-In flexibel mit verschiedenen Hosts eingesetzt werden kann. Wir ersetzen dies gleich, ben&ouml;tigen aber zuvor zwei weitere Verweise. Diese f&uuml;gen wir im Bereich Settings unter <b>COM Type Library \/ ActiveX References <\/b>zwei neue Verweise hinzu, n&auml;mlich <b>Microsoft Visual Basic For Applications Extensibility 5.3 <\/b>und <b>Microsoft Office 16.0 Object Library <\/b>(siehe Bild 3). Anschlie&szlig;end m&uuml;ssen Sie die &Auml;nderungen an den Einstellungen speichern, was Sie beispielsweise mit der Tastenkombination <b>Strg + S <\/b>erledigen k&ouml;nnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_004.png\" alt=\"Hinzuf&uuml;gen einiger Verweise auf Projektbibliotheken\" width=\"499,5589\" height=\"358,8981\" \/><\/p>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Hinzuf&uuml;gen einiger Verweise auf Projektbibliotheken<\/span><\/b><\/p>\n<p>Danach k&ouml;nnen Sie die Deklaration der beiden Variablen wie folgt &auml;ndern:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>_VBE<span style=\"color:blue;\"> As <\/span>VBIDE.VBE\r\n<span style=\"color:blue;\">Private <\/span>_AddIn<span style=\"color:blue;\"> As <\/span>VBIDE.AddIn<\/pre>\n<p>Diese werden in der Prozedur <b>OnConnection<\/b> gef&uuml;llt:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>OnConnection(ByVal Application<span style=\"color:blue;\"> As Object<\/span>, _\r\n         ByVal ConnectMode<span style=\"color:blue;\"> As <\/span>ext_ConnectMode, _\r\n         ByVal AddInInst<span style=\"color:blue;\"> As Object<\/span>, _\r\n         ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) _\r\n         Implements IDTExtensibility2.OnConnection\r\n     <span style=\"color:blue;\">MsgBox<\/span> \"myVBEAddin.OnConnection\"\r\n     <span style=\"color:blue;\">Set<\/span> _VBE = Application\r\n     <span style=\"color:blue;\">Set<\/span> _AddIn = AddInInst\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Erstellen des COM-Add-Ins f&uuml;r den VBA-Editor<\/h2>\n<p>Damit k&ouml;nnen wir das COM-Add-In nun erstellen. Dazu klicken Sie im Bereich <b>TWINBASIC<\/b> auf die in Bild 4 markierte Schaltfl&auml;che.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_005.png\" alt=\"Erstellen des Projekts\" width=\"700\" height=\"115,4291\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Erstellen des Projekts<\/span><\/b><\/p>\n<p>Die Ausgabe im Debugging-Bereich sollte danach wie in der gleichen Abbildung aussehen.<\/p>\n<p>Wenn nicht, kann es daran liegen, dass das Projekt nicht kompiliert werden kann oder das noch ein VBA-Editor ge&ouml;ffnet ist, der das bereits erstellte COM-Add-In noch nutzt und dadurch einen Schreibschutz auf die Datei legt.<\/p>\n<p>In letzterem Fall hilft meist das Schlie&szlig;en aller Office-Anwendungen, deren VBA-Editor innerhalb der aktuellen Session bereits einmal ge&ouml;ffnet war.<\/p>\n<h2>Registrieren des COM-Add-Ins f&uuml;r den VBA-Editor<\/h2>\n<p>Danach f&uuml;hren Sie die Datei <b>Register-Addin32.reg <\/b>aus, um die notwendigen Registry-Eintr&auml;ge hinzuzuf&uuml;gen. Das sind nicht alle Eintr&auml;ge &#8211; einige Eintr&auml;ge legt bereits twinBASIC beim Erstellen des COM-Add-Ins an. Die Registrierungsdatei enth&auml;lt lediglich diejenigen, die f&uuml;r das Erkennen des COM-Add-Ins beim &Ouml;ffnen des VBA-Editors notwendig sind.<\/p>\n<p>Anschlie&szlig;end ist das Add-In registriert und beim &Ouml;ffnen des VBA-Editors einer beliebigen Office-Anwendung sollten die Meldungsfenster erscheinen, die in den verschiedenen Prozeduren definiert wurden.<\/p>\n<p>Den Inhalt der Registrierungsdatei sehen Sie in Bild 5. Hier sollten Sie noch Anpassungen vornehmen, und zwar f&uuml;r die beiden Eigenschaften <b>FriendlyName <\/b>und <b>Description<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_003.png\" alt=\"Registrierungsdatei f&uuml;r das COM-Add-In f&uuml;r den VBA-Editor\" width=\"574,559\" height=\"289,6668\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Registrierungsdatei f&uuml;r das COM-Add-In f&uuml;r den VBA-Editor<\/span><\/b><\/p>\n<p>Diese beiden tauchen n&auml;mlich im Add-In-Manager des VBA-Editors, den Sie mit dem Men&uuml;eintrag <b>Add-Ins|Add-In-Manager&#8230; <\/b>&ouml;ffnen, wie in Bild 6 auf. Hier finden Sie die Werte der Eigenschaften <b>FriendlyName <\/b>und <b>Description <\/b>wieder.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_006.png\" alt=\"Das COM-Add-In im Add-In-Manager des VBA-Editors\" width=\"449,5589\" height=\"353,8282\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Das COM-Add-In im Add-In-Manager des VBA-Editors<\/span><\/b><\/p>\n<p>Falls Sie sich wundern, warum in der Registry-Datei alle Informationen scheinbar doppelt abgebildet werden: Der erste Eintrag ist f&uuml;r den VBA-Editor, der zweite f&uuml;r ein eventuell vorhandes Visual Studio 6.<\/p>\n<h2>Men&uuml;eintrag f&uuml;r das COM-Add-In hinzuf&uuml;gen<\/h2>\n<p>Nun kommt ein wichtiger Punkt: Bisher gibt es noch keine Gelegenheit, Funktionen des COM-Add-Ins &uuml;ber den VBA-Editor aufzurufen. Dazu f&uuml;gen wir diesem nun einen Men&uuml;eitrag hinzu, mit denen der Benutzer die Funktionen aufrufen kann.<\/p>\n<p>Hier haben wir verschiedene M&ouml;glichkeiten. Wir k&ouml;nnen eine bestehende Symbolleiste verwenden und dieser einen Men&uuml;eintrag hinzuf&uuml;gen.<\/p>\n<p>Oder wir f&uuml;gen diesen zu einem Kontextmen&uuml; hinzu. Schlie&szlig;lich k&ouml;nnen wir auch eine komplett neue Symbolleiste erstellen und diese mit den Befehlen unseres COM-Add-Ins f&uuml;r den VBA-Editor f&uuml;llen.<\/p>\n<p>Letzteres ist am einfachsten, also schauen wir uns dies zun&auml;chst an.<\/p>\n<h2>Men&uuml;leisten, Symbolleisten und Kontextmen&uuml;s<\/h2>\n<p>Da Access und die &uuml;brigen Office-Programme seit der Version 2007 das Ribbon und Kontextmen&uuml;s als Men&uuml; verwenden, w&auml;hrend Men&uuml;leisten und Symbolleisten nur noch vom VBA-Editor genutzt werden, hier noch eine kurze Einordnung der verschiedenen Men&uuml;arten im VBA-Editor:<\/p>\n<ul>\n<li><b>Men&uuml;leiste<\/b>: Hauptmen&uuml; des VBA-Editors mit Men&uuml;punkten wie Datei, Bearbeiten oder Ansicht, die aufklappbare Untermen&uuml;s mit den eigentlichen Befehlen enthalten. Es gibt nur eine Men&uuml;leiste.<\/li>\n<li><b>Symbolleisten<\/b>: Men&uuml;s, die ihre Befehle &uuml;berwiegend als Schaltfl&auml;chen mit Icons darstellen und von denen es zus&auml;tzlich zur Men&uuml;leiste mehrere geben kann. Sie k&ouml;nnen mehrere Symbolleisten in einer Zeile anordnen.<\/li>\n<li><b>Kontextmen&uuml;s<\/b>: Men&uuml;s, die per Rechtsklick im Kontext mit bestimmten Objekten eingeblendet werden<\/li>\n<\/ul>\n<h2>Neue Symbolleiste mit neuer Schaltfl&auml;che erstellen<\/h2>\n<p>Eine neue Symbolleiste mit einer Schaltfl&auml;che m&uuml;ssen wir per VBA-Code hinzuf&uuml;gen. Die ben&ouml;tigten Objekte, Eigenschaften und Befehle stellt die Bibliothek <b>Microsoft Office 16.0 Object Library <\/b>zur Verf&uuml;gung, die wir bereits weiter oben referenziert haben.<\/p>\n<p>Die notwendigen Anweisungen wollen wir gleich in der Ereignisprozedur <b>OnConnection <\/b>unterbringen, die beim Starten des VBA-Editors als erste der Ereignisprozeduren des COM-Add-Ins f&uuml;r den VBA-Editor aufgerufen wird.<\/p>\n<p>Hier f&uuml;gen wir als Erstes die Deklaration einer Variablen namens <b>cbr <\/b>mit dem Datentyp <b>CommandBar <\/b>zum Referenzieren der neuen Symbolleiste hinzu:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>OnConnection(ByVal Application<span style=\"color:blue;\"> As Object<\/span>, _\r\n         ByVal ConnectMode<span style=\"color:blue;\"> As <\/span>ext_ConnectMode, _\r\n         ByVal AddInInst<span style=\"color:blue;\"> As Object<\/span>, _\r\n         ByRef custom<span style=\"color:blue;\"> As Variant<\/span>()) _\r\n         Implements IDTExtensibility2.OnConnection\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar<\/pre>\n<p>Danach folgen die beiden Anweisungen zum Speichern der mit den Parametern <b>Application <\/b>und <b>AddInInst <\/b>gelieferten Verweise:<\/p>\n<pre>     <span style=\"color:blue;\">Set<\/span> _VBE = Application\r\n     <span style=\"color:blue;\">Set<\/span> _AddIn = AddInInst<\/pre>\n<p>Gerade <b>_VBE <\/b>mit dem Verweis auf den VBA-Editor ben&ouml;tigen wir gleich danach. Falls zuvor bereits eine Symbolleiste mit dem Namen <b>aiuCOMAddIn <\/b>angelegt wurde, wollen wir diese wieder l&ouml;schen. Da wir nicht wissen, ob diese bereits vorliegt, schalten wir die Fehlerbehandlung vor dem L&ouml;schen dieser Symbolleiste aus und rufen dann die <b>Delete<\/b>-Methode f&uuml;r das entsprechende Element der <b>CommandBars<\/b>-Auflistung auf:<\/p>\n<pre>     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     _VBE.CommandBars(\"aiuCOMAddIn\").Delete\r\n     On Error Goto 0<\/pre>\n<p>Danach legen wir mit der <b>Add<\/b>-Methode der <b>CommandBars<\/b>-Auflistung ein neues Element namens <b>aiuCOM-Add-In <\/b>an, das oben erscheinen soll (<b>msoBarTop<\/b>):<\/p>\n<pre>     <span style=\"color:blue;\">Set<\/span> cbr = _VBE.CommandBars.Add(\"aiuCOMAddIn\", msoBarTop)<\/pre>\n<p>Schlie&szlig;lich f&uuml;gen wir noch ein neues <b>CommandBarButton<\/b>-Element hinzu. Dazu nutzen wir die <b>Add<\/b>-Methode der <b>Controls<\/b>-Auflistung des <b>CommandBar<\/b>-Objekts und &uuml;bergeben <b>msoControlButton <\/b>als Typ des anzulegenden Elements:<\/p>\n<pre>     <span style=\"color:blue;\">Set<\/span> cbb = cbr.Controls.Add(msoControlButton)<\/pre>\n<p>Danach weisen wir den Text zu, legen eines der eingebauten Icons als Symbol fest und stellen den Stil so ein, dass Icon und Text angezeigt werden. Schlie&szlig;lich soll noch ein ToolTip-Text erscheinen, wenn der Benutzer die Schaltfl&auml;che mit der Maus &uuml;berf&auml;hrt:<\/p>\n<pre>     cbb.Style = msoButtonIconAndCaption\r\n     cbb.Caption=\"aiuBeispiel\"\r\n     cbb.FaceId = 67\r\n     cbb.ToolTipText = \"Beispiel-Button eines COM-Add-Ins\"<\/pre>\n<p>Schlie&szlig;lich machen wir die neue Symbolleiste mit <b>Visible = True <\/b>sichtbar:<\/p>\n<pre>     cbr.Visible = <span style=\"color:blue;\">True<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Aufmerksame Leser haben gesehen, dass wir die hier verwendete Variable <b>cbb <\/b>f&uuml;r die Schaltfl&auml;che noch gar nicht deklariert haben. Das haben wir noch nicht getan, weil diese im allgemeinen Teil der Klasse deklariert werden muss. Au&szlig;erdem legen wir f&uuml;r diese das Schl&uuml;sselwort <b>WithEvents <\/b>fest, damit wir in dieser Klasse auch das durch die Schaltfl&auml;che ausgel&ouml;ste Ereignis implementieren k&ouml;nnen:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>WithEvents cbb<span style=\"color:blue;\"> As <\/span>CommandBarButton<\/pre>\n<p>Dieses Ereignis programmieren wir schlie&szlig;lich wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cbb_Click(_\r\n         ByVal Ctrl<span style=\"color:blue;\"> As <\/span>Office.CommandBarButton, _\r\n         CancelDefault<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     <span style=\"color:blue;\">MsgBox<\/span> \"Click\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur soll lediglich ein Meldungsfenster anzeigen.<\/p>\n<h2>Men&uuml;schaltfl&auml;che testen<\/h2>\n<p>Damit ist der Zeitpunkt gekommen, das COM-Add-In f&uuml;r den VBA-Editor auszuprobieren. Dazu speichern Sie die &Auml;nderungen und bet&auml;tigen die <b>Build<\/b>-Schaltfl&auml;che. Wenn der Debugging-Bereich die erfolgreiche Erstellung anzeigt, starten Sie danach Access und &ouml;ffnen den VBA-Editor.<\/p>\n<p>Die neue Symbolleiste erscheint dann etwa wie in Bild 7. Wenn Sie diese anklicken, zeigt der VBA-Editor die angegebene Meldung an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_007.png\" alt=\"Die neue Symbolleiste samt Befehl\" width=\"700\" height=\"113,5338\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Die neue Symbolleiste samt Befehl<\/span><\/b><\/p>\n<h2>Schaltfl&auml;che zu bestehender Symbolleiste hinzuf&uuml;gen<\/h2>\n<p>Etwas komplizierter wird es, wenn Sie eine Symbolleiste zu einer bestehenden Symbolleiste hinzuf&uuml;gen wollen. Der VBA-Editor enth&auml;lt n&auml;mlich eine ganze Reihe von CommandBar-Elementen. Diese k&ouml;nnen wir mit der folgenden Prozedur, die wir einfach in ein Modul einer Access-Datenbank eintragen, ermitteln:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AlleSymbolleisten()\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n     For Each cbr In VBE.CommandBars\r\n         <span style=\"color:blue;\">Debug.Print<\/span> cbr.Name\r\n     <span style=\"color:blue;\">Next<\/span> cbr\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies liefert das Ergebnis aus Bild 8 &#8211; auch unsere soeben erstellte Symbolleiste wird hier aufgef&uuml;hrt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_008.png\" alt=\"Ausgabe der CommandBar-Elemente\" width=\"282,7714\" height=\"489,4756\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Ausgabe der CommandBar-Elemente<\/span><\/b><\/p>\n<p>Aber sind das alles Symbolleisten Nein, denn wir finden hier auch einen Eintrag namens <b>Men&uuml;leiste<\/b>.<\/p>\n<p>Und es sind gegebenenfalls auch Kontextmen&uuml;s darunter. Also ermitteln wir das etwas genauer und geben jeweils die &uuml;ber die Eigenschaft <b>Type <\/b>ermittelte Art mithilfe der <b>Choose<\/b>-Funktion &uuml;bersetzt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>AlleSymbolleisten()\r\n     <span style=\"color:blue;\">Dim <\/span>cbr<span style=\"color:blue;\"> As <\/span>CommandBar\r\n     For Each cbr In VBE.CommandBars\r\n         <span style=\"color:blue;\">Debug.Print<\/span> Choose(cbr.Type + 1, \"Symbolleiste\",  \"Men&uuml;leiste\", \"Kontextmen&uuml;\"), cbr.Name\r\n     <span style=\"color:blue;\">Next<\/span> cbr\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Nun sehen wir wie in Bild 9, dass die Anzahl der Symbolleisten &uuml;berschaubar ist und wir durchaus die richtige auf diese einfache Weise ermitteln k&ouml;nnen. Bei den Kontextmen&uuml;s sind die Bezeichnungen auch durchaus aussagekr&auml;ftig &#8211; diese ben&ouml;tigen wir allerdings erst im n&auml;chsten Abschnitt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_009.png\" alt=\"Ausgabe aller CommandBar-Elemente mit Typ\" width=\"374,5589\" height=\"489,4897\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Ausgabe aller CommandBar-Elemente mit Typ<\/span><\/b><\/p>\n<p>Die Namen der Symbolleisten h&auml;tten Sie &uuml;brigens auch einfacher ermitteln k&ouml;nnen &#8211; indem Sie den Men&uuml;eintrag <b>Ansicht|Symbolleisten <\/b>aufrufen.<\/p>\n<p>Dieser zeigt alle Symbolleisten in einem weiteren Untermen&uuml; zur Auswahl an (siehe Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_010.png\" alt=\"Anzeige der Symbolleisten\" width=\"549,4755\" height=\"430,3586\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Anzeige der Symbolleisten<\/span><\/b><\/p>\n<h2>Schaltfl&auml;che zu bestehendem Kontextmen&uuml; hinzuf&uuml;gen<\/h2>\n<p>Da wir nun die Namen aller Kontextmen&uuml;s ermittelt haben, k&ouml;nnen wir eine ausw&auml;hlen, der wir eine Schaltfl&auml;che hinzuf&uuml;gen wollen. Wir entscheiden uns f&uuml;r die standardm&auml;&szlig;ig angezeigte Symbolleiste <b>Voreinstellung<\/b>. Daf&uuml;r legen wir zun&auml;chst eine neue Variable f&uuml;r die Schaltfl&auml;che an und eine entsprechende Ereignisprozedur:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>WithEvents cbb1<span style=\"color:blue;\"> As <\/span>CommandBarButton\r\n<span style=\"color:blue;\">Private Sub <\/span>cbb1_Click( ByVal Ctrl<span style=\"color:blue;\"> As <\/span>Office.CommandBarButton,  CancelDefault<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     <span style=\"color:blue;\">MsgBox<\/span> \"Click aus einer eingebauten Symbolleiste\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Au&szlig;erdem f&uuml;gen wir der Prozedur <b>OnConnection <\/b>einige weitere Zeilen hinzu:<\/p>\n<pre><span style=\"color:blue;\">Sub <\/span>OnConnection(...) Implements IDTExtensibility2.OnConnection\r\n    ...\r\n     <span style=\"color:blue;\">Set<\/span> cbr = _VBE.CommandBars(\"Voreinstellung\")\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     cbr.Controls(\"aiuBeispiel1\").Delete\r\n     On Error Goto 0\r\n     <span style=\"color:blue;\">Set<\/span> cbb1 = cbr.Controls.Add(msoControlButton)\r\n     cbb1.Caption = \"aiuBeispiel1\"\r\n     cbb1.BeginGroup = <span style=\"color:blue;\">True<\/span>\r\n     cbb1.FaceID = 68\r\n     cbb1.Style=msoButtonIconAndCaption\r\n     cbb1.ToolTipText = \"Beispiel-Button in eingebauter Symbolleiste\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Damit erhalten wir eine weitere Schaltfl&auml;che, diesmal in einer bereits existierenden Symbolleiste (siehe Bild 11).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_011.png\" alt=\"Schaltfl&auml;che in eingebauter Symbolleiste\" width=\"649,4755\" height=\"96,81625\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Schaltfl&auml;che in eingebauter Symbolleiste<\/span><\/b><\/p>\n<p>Auf diese Weise k&ouml;nnen Sie beliebig viele Steuerelemente zu neuen oder vorhandenen Symbolleisten hinzuf&uuml;gen.<\/p>\n<h2>Eintr&auml;ge zu Kontextmen&uuml;s hinzuf&uuml;gen<\/h2>\n<p>Wenn Sie einem Kontextmen&uuml; einen Eintrag hinzuf&uuml;gen m&ouml;chten, ben&ouml;tigen Sie zuerst einmal den Namen des betroffenen Kontextmen&uuml;s. Dieser ist nicht so leicht zu finden wie bei den Symbolleisten und es gibt auch noch eine gr&ouml;&szlig;ere Anzahl Kontexmen&uuml;s.<\/p>\n<p>Allerdings haben wir die Bezeichnungen ja weiter oben bereits im Direktbereich des VBA-Editors ausgeben lassen. Damit l&auml;sst sich leicht darauf schlie&szlig;en, in welchem Kontext ein Kontextmen&uuml; beim Klick mit der rechten Maustaste angezeigt wird.<\/p>\n<p>Wir wollen einen Eintrag hinzuf&uuml;gen, der im Kontextmen&uuml; beim Rechtsklick in das Code-Fenster erscheint. Der Name dieses Men&uuml;s ist leicht zu finden &#8211; er lautet <b>Code Window<\/b>.<\/p>\n<p>Wir definieren wieder eine Objektvariable f&uuml;r die anzulegtende Schaltfl&auml;che sowie eine Ereignisprozedur f&uuml;r das <b>Click<\/b>-Ereignis:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>WithEvents cbb2<span style=\"color:blue;\"> As <\/span>CommandBarButton\r\n<span style=\"color:blue;\">Private Sub <\/span>cbb2_Click( _\r\n         ByVal Ctrl<span style=\"color:blue;\"> As <\/span>Office.CommandBarButton, _\r\n         CancelDefault<span style=\"color:blue;\"> As Boolean<\/span>)\r\n     <span style=\"color:blue;\">MsgBox<\/span> \"Click aus einem Kontextmen&uuml;\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Au&szlig;erdem erweitern wir den Code der Prozedur <b>OnConnection <\/b>mit diesen Zeilen:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> cbr = _VBE.CommandBars(\"Code Window\")\r\nOn Error Resume <span style=\"color:blue;\">Next<\/span>\r\ncbr.Controls(\"aiuBeispiel2\").Delete\r\nOn Error Goto 0\r\n<span style=\"color:blue;\">Set<\/span> cbb2 = cbr.Controls.Add(msoControlButton)\r\ncbb2.Caption = \"aiuBeispiel2\"\r\ncbb2.BeginGroup = <span style=\"color:blue;\">True<\/span>\r\ncbb2.FaceID = 69\r\ncbb2.Style=msoButtonIconAndCaption\r\ncbb2.ToolTipText = \"Beispiel-Button in Kontextmen&uuml;\"<\/pre>\n<p>Damit erhalten wir dann den neuen Kontextmen&uuml;-Eintrag aus Bild 12.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_03\/pic_1307_012.png\" alt=\"Der neue Kontextmen&uuml;-Eintrag\" width=\"424,5589\" height=\"439,9974\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Der neue Kontextmen&uuml;-Eintrag<\/span><\/b><\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Mit den hier vorgestellten Techniken k&ouml;nnen Sie Befehle zum VBA-Editor hinzuf&uuml;gen, die der Entwickler &uuml;ber entsprechende Men&uuml;punkte aufrufen kann.<\/p>\n<p>Beispiele f&uuml;r Anwendungen zeigen wir Ihnen in weiteren Beitr&auml;gen in den folgenden Ausgaben von <b>Access im Unternehmen<\/b>.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>twinBASIC_myVBEAddin.zip<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/B807D054-5D15-43DC-B68E-A26E5CBFA4F6\/aiu_1307.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neben COM-Add-Ins f&uuml;r Access selbst (und nat&uuml;rlich auch f&uuml;r die &uuml;brigen Office-Anwendungen) k&ouml;nnen Sie mit twinBASIC auch COM-Add-Ins f&uuml;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&uuml;r unseren Anwendungszweck anpassen. Anders als bei COM-Add-Ins f&uuml;r Access k&ouml;nnen Sie die Funktionen von COM-Add-Ins f&uuml;r den VBA-Editor nicht per Ribbon-Eintrag aufrufen, sondern ben&ouml;tigen einen Men&uuml;leisteneintrag daf&uuml;r. Darum k&uuml;mmern wir uns ebenso wie darum, wie Sie auf die Elemente des VBA-Editors zugreifen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662021,66032021,44000025],"tags":[],"class_list":["post-55001307","post","type-post","status-publish","format-standard","hentry","category-662021","category-66032021","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor\" \/>\n<meta property=\"og:description\" content=\"Neben COM-Add-Ins f&uuml;r Access selbst (und nat&uuml;rlich auch f&uuml;r die &uuml;brigen Office-Anwendungen) k&ouml;nnen Sie mit twinBASIC auch COM-Add-Ins f&uuml;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&uuml;r unseren Anwendungszweck anpassen. Anders als bei COM-Add-Ins f&uuml;r Access k&ouml;nnen Sie die Funktionen von COM-Add-Ins f&uuml;r den VBA-Editor nicht per Ribbon-Eintrag aufrufen, sondern ben&ouml;tigen einen Men&uuml;leisteneintrag daf&uuml;r. Darum k&uuml;mmern wir uns ebenso wie darum, wie Sie auf die Elemente des VBA-Editors zugreifen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-31T10:14:25+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/8206a9beca3d4cb6b48c3aece8d50ba0\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"16\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor\",\"datePublished\":\"2021-07-31T10:14:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/\"},\"wordCount\":2800,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/8206a9beca3d4cb6b48c3aece8d50ba0\",\"articleSection\":[\"2021\",\"3\\\/2021\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/\",\"name\":\"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/8206a9beca3d4cb6b48c3aece8d50ba0\",\"datePublished\":\"2021-07-31T10:14:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/8206a9beca3d4cb6b48c3aece8d50ba0\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/8206a9beca3d4cb6b48c3aece8d50ba0\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/twinBASIC_COMAddIns_fuer_den_VBAEditor\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/","og_locale":"de_DE","og_type":"article","og_title":"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor","og_description":"Neben COM-Add-Ins f&uuml;r Access selbst (und nat&uuml;rlich auch f&uuml;r die &uuml;brigen Office-Anwendungen) k&ouml;nnen Sie mit twinBASIC auch COM-Add-Ins f&uuml;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&uuml;r unseren Anwendungszweck anpassen. Anders als bei COM-Add-Ins f&uuml;r Access k&ouml;nnen Sie die Funktionen von COM-Add-Ins f&uuml;r den VBA-Editor nicht per Ribbon-Eintrag aufrufen, sondern ben&ouml;tigen einen Men&uuml;leisteneintrag daf&uuml;r. Darum k&uuml;mmern wir uns ebenso wie darum, wie Sie auf die Elemente des VBA-Editors zugreifen.","og_url":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-07-31T10:14:25+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/8206a9beca3d4cb6b48c3aece8d50ba0","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"16\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor","datePublished":"2021-07-31T10:14:25+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/"},"wordCount":2800,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/8206a9beca3d4cb6b48c3aece8d50ba0","articleSection":["2021","3\/2021","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/","url":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/","name":"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/8206a9beca3d4cb6b48c3aece8d50ba0","datePublished":"2021-07-31T10:14:25+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/8206a9beca3d4cb6b48c3aece8d50ba0","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/8206a9beca3d4cb6b48c3aece8d50ba0"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/twinBASIC_COMAddIns_fuer_den_VBAEditor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"twinBASIC: COM-Add-Ins f&uuml;r den VBA-Editor"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001307"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001307\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}