{"id":55000278,"date":"2005-06-01T00:00:00","date_gmt":"2020-05-06T15:18:00","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=278"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Erweitern_des_VBAEditors","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/","title":{"rendered":"Erweitern des VBA-Editors"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg03.met.vgwort.de\/na\/30933e593b6f4a8f9b1b5597bc2d9074\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Andr&eacute; Minhorst, Duisburg und Sascha Trowitzsch, Berlin<\/b><\/p>\n<p><b>Je ernsthafter man mit Access arbeitet, desto mehr verlagert sich der Schwerpunkt der Arbeit vom Access-Fenster auf die VBA-Entwicklungsumgebung. Und wie es mit einem Arbeitsplatz so ist, sollte man ihn sich so angenehm wie m&ouml;glich gestalten &#8211; das gilt auch f&uuml;r die Programme, mit denen man arbeitet. Und das umso mehr, wenn sich tats&auml;chlich die M&ouml;glichkeit dazu ergibt. Die VBA-Entwicklungsumgebung l&auml;sst sich beliebig erweitern, wenn man das Know-how dazu besitzt. Das finden Sie hier und ein praktisches Beispiel gleich dazu: Ab jetzt k&ouml;nnen Sie durch den Code springen, wie Sie m&ouml;chten &#8211; mit dem CodeHistory-Tool finden Sie schnell wieder zur&uuml;ck.<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Die Beispieldateien befinden sich in der .zip-Datei AIU_CodeHistory.zip. Zwei Verzeichnisse enthalten je eine Version des Quellcodes mit und eine ohne Kommentare. Sie finden die Datei auf der Heft-CD oder im Internet unter http:\/\/www.access-im-unternehmen.de unter dem Shortlink 278. Grundlagen und verwandte Themen finden Sie in den Beitr&auml;gen Per VBA auf VBA-Code zugreifen, Shortlink 277 und Erweitern der VBA-Entwicklungsumgebung, Shortlink 237. <\/p>\n<p>Die VBA-Entwicklungsumgebung l&auml;sst sich um verschiedene Elemente erweitern. Bei diesen Elementen handelt es sich um COM-AddIns, die nach ihrer Installation beim Start der Entwicklungsumgebung automatisch erkannt und den Voreinstellungen entsprechend entweder direkt geladen werden oder erst &uuml;ber den Add-In-Manager aktiviert werden m&uuml;ssen.<\/p>\n<h2>Erweiterungsm&ouml;glichkeiten<\/h2>\n<p>F&uuml;r die VBA-Entwicklungsumgebung gibt es mehrere M&ouml;glichkeiten, eine Erweiterung zu integrieren. Interessant sind dabei die Varianten zum Starten beziehungsweise Anzeigen des Add-Ins und wie es sich in die Entwicklungsumgebung einf&uuml;gt. Die einfachste Variante ist ein Add-In, das nach dem Laden im Add-Ins-Men&uuml; zur Verf&uuml;gung steht und eine Operation ausf&uuml;hrt, f&uuml;r die keine Benutzeroberfl&auml;che ben&ouml;tigt wird &#8211; beispielsweise das automatische Hinzuf&uuml;gen von Code anstelle der Einf&uuml;gemarke.<\/p>\n<p>Dar&uuml;ber hinaus gibt es sowohl f&uuml;r den Aufruf als auch f&uuml;r den Grad der Interaktion mit dem Benutzer einige Varianten. F&uuml;r den Aufruf eines Add-Ins bietet sich neben dem Add-Ins-Men&uuml; ein Eintrag in ein anderes bestehendes Men&uuml; (dabei kann es sich auch um ein Kontextmen&uuml; handeln) oder gar die Erstellung einer eigenen Men&uuml;leiste an.<\/p>\n<p>Was die Interaktion mit dem Benutzer betrifft, so gibt es neben den Add-Ins, die ihren Dienst ohne R&uuml;ckfragen erledigen, solche, die zus&auml;tzliche Benutzereingaben f&uuml;r ihre Arbeit ben&ouml;tigen. Dabei kann die Art der Interaktion von Meldungsfenster und Eingabefenster bis hin zu mehreren Benutzerformularen reichen.<\/p>\n<p>Immer pr&auml;sent (wenn nicht gerade ausgeblendet) sind die &#8222;Toolwindows&#8220;. Sie kennen bereits einige Beispiele f&uuml;r diese in der Entwicklungsumgebung verankerbaren Fenster: Das Direktfenster ist eines und auch der Projekt-Explorer, das &uuml;berwachungsfenster und das Eigenschaftsfenster sind Toolwindows.<\/p>\n<p>Diese Fenster haben gemeinsam, dass sie sowohl frei schweben als auch an den Rahmen des Editorfensters oder andere Toolwindows angedockt werden k&ouml;nnen. Der wichtigste Unterschied zu den Benutzerformularen ist die st&auml;ndige Sichtbarkeit dieser Fenster.<\/p>\n<p><IMG height=\"377\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic001.png\" width=\"483\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Festlegen des Ladeverhaltens von COM-Add-Ins<\/span><\/b><\/p>\n<p><IMG height=\"85\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Aktivieren des CodeHistory-Tools<\/span><\/b><\/p>\n<h2>Toolwindows<\/h2>\n<p>Toolwindows sind das Thema dieses Beitrags: Sie erfahren, wie Sie diese erstellen, installieren und aktivieren oder deaktivieren. Leider lassen sich Toolwindows nicht mit Access erstellen; Sie ben&ouml;tigen dazu Microsoft Visual Basic 6 (Visual Studio 6). Sollten Sie nicht in Besitz dieses Tools sein, k&ouml;nnen Sie immerhin das hier vorgestellte Tool f&uuml;r die Entwicklung mit der VBA-Entwicklungsoberfl&auml;che verwenden.<\/p>\n<p>Der Entwicklungsprozess eines Toolwindows l&auml;sst sich grob in die Erstellung des Ger&uuml;sts mit den grundlegenden Elementen, das unter anderem die Funktionalit&auml;t zum Einklinken in die Benutzeroberfl&auml;che sowie ein jungfr&auml;uliches Toolwindow enth&auml;lt und das Aufsetzen der eigentlichen Funktionalit&auml;t aufteilen.<\/p>\n<p>Den ersten Teil haben wir bereits f&uuml;r Sie erledigt: Auf der Heft-CD finden Sie ein VB-Projekt mit dem Quellcode f&uuml;r das Ger&uuml;st eines Toolwindows. Der erste Teil dieses Beitrags enth&auml;lt eine Beschreibung der enthaltenen Komponenten. Auch f&uuml;r die Schritte vom leeren Ger&uuml;st zum fertigen Toolwindow ist gesorgt: Sie finden sowohl das komplette Projekt im Quellcode als auch die fertige .dll f&uuml;r den Soforteinsatz auf der Heft-CD. Leider, und das ist die schlechte Nachricht, w&uuml;rde eine ausf&uuml;hrliche Vorstellung des Tools mit dem enthaltenen Quellcode circa ein bis zwei komplette Magazine verschlingen, sodass wir den Quellcode nur auszugweise im Beitrag vorstellen k&ouml;nnen. Der in den Beispieldateien enthaltene Quellcode ist allerdings sehr gut dokumentiert.<\/p>\n<p>In den nachfolgenden Abschnitten erfahren Sie, wie Sie COM-Add-Ins verf&uuml;gbar machen und wie das Beispiel-Add-In funktioniert.<\/p>\n<h2>Add-Ins verf&uuml;gbar machen<\/h2>\n<p>Den Add-In-Manager k&ouml;nnen Sie in der VBA-Entwicklungsumgebung &uuml;ber den Men&uuml;eintrag Add-Ins\/Add-In-Manager&#8230; starten.<\/p>\n<p>Der Add-In-Manager aus Bild 1 zeigt bereits das weiter unten in diesem Beitrag vorgestellte VBA-CodeHistory-Tool an. Um das Tool zu aktivieren, das hei&szlig;t, es in der VBA-Entwicklungsumgebung sichtbar zu machen, sind zwei Schritte n&ouml;tig: Aktivieren Sie die Option Geladen\/Entladen und w&auml;hlen Sie nach dem Schlie&szlig;en des Dialogs den neuen Eintrag im Add-Ins-Men&uuml; aus (siehe Bild 2).<\/p>\n<p><IMG height=\"441\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic003.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Anzeigen der Definition einer Prozedur<\/span><\/b><\/p>\n<p><IMG height=\"166\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic004.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4:  Liste bereits besuchter Codestellen<\/span><\/b><\/p>\n<h2>Funktionen des CodeHistory-Tools<\/h2>\n<p>M&ouml;glicherweise kennen Sie selbst das Dilemma: Sie durchforsten die Prozeduren und Module einer VBA-Anwendung, um zu verstehen, wie diese funktioniert. Egal ob es sich um eine eigene Entwicklung oder um das Produkt eines anderen Entwicklers handelt &#8211; wenn Sie l&auml;nger nicht mehr oder noch gar nicht hineingeschaut haben, m&uuml;ssen Sie sich zuerst in die Struktur einarbeiten. Sie starten also mit einer Prozedur, die durch eine bestimmte Schaltfl&auml;che aufgerufen wird und untersuchen dessen Funktion. Dabei finden Sie mehrere weitere Prozeduraufrufe &#8211; also schnell hinterher und die entsprechenden Module in weiteren Codefenstern aufrufen. Die Entwicklungsumgebung stellt geeignete Mittel daf&uuml;r zur Verf&uuml;gung &#8211; etwa den Kontextmen&uuml;eintrag Definition beim Rechtsklick auf den Aufruf der gew&uuml;nschten Prozedur (siehe Bild 3).<\/p>\n<p>Das ganze Spiel machen Sie noch zwei oder drei Mal, dann m&ouml;chten Sie vielleicht zur Ausgangprozedur zur&uuml;ckkehren &#8211; aber in welchem Modul war die noch Mal Hier kommt das CodeHistory-Tool ins Spiel. Es speichert Positionen im Code so, dass Sie m&uuml;helos per Mausklick auf einen Eintrag zur entsprechenden Stelle zur&uuml;ckkehren k&ouml;nnen.<\/p>\n<h2>Aufzeichnen von Positionen<\/h2>\n<p>Das CodeHistory-Tool zeichnet Informationen &uuml;ber Code-Zeilen auf, die Sie mit der Maus &#8222;besucht&#8220; haben und gibt diese in einer Liste aus (siehe Bild 4). Mit einem Mausklick auf einen der Eintr&auml;ge &ouml;ffnen Sie das Modul mit der entsprechenden Codestelle und zeigen diese an.<\/p>\n<p>Das Toolwindow mit der Liste der gemerkten Positionen im Code zeigt den Namen des Projekts, den Modulnamen, die Zeile und den Prozedurnamen an. Zus&auml;tzlich finden Sie ganz links ein Sternchen (*) &#8211; auf diese Weise markierte Eintr&auml;ge werden dauerhaft gespeichert und bei der n&auml;chsten Sitzung wieder geladen.<\/p>\n<p>Die Schaltfl&auml;chen im oberen Bereich haben folgende Funktionen:<\/p>\n<li>Zur&uuml;ck: Bewegt die Markierung in der Liste um einen Eintrag nach oben und springt zu der entsprechenden Stelle im Code.<\/li>\n<li>Vorw&auml;rts: F&uuml;hrt die obige Aktion in die andere Richtung aus.<\/li>\n<li>Liste l&ouml;schen: Leert die Liste und damit auch alle dauerhaft gespeicherten Eintr&auml;ge.<\/li>\n<li>Einstellungen: &ouml;ffnet den Dialog zum Festlegen der Einstellungen<\/li>\n<li>Aufklappen\/Zuklappen: Blendet die Liste ein und aus<\/li>\n<h3>Wann wird eine Position gespeichert<\/h3>\n<p>Wenn jede Zeile, in die Sie die Einf&uuml;gemarke setzen, zur Liste hinzugef&uuml;gt w&uuml;rde, w&auml;re diese bald voll. Der Sinn dieses Tools ist vielmehr, markante Spr&uuml;nge zu speichern und das Zur&uuml;ckspringen an diese Stellen zu erm&ouml;glichen. Das Speichern einer Position erfolgt in folgenden F&auml;llen, wobei Sie die ersten beiden Optionen im entsprechenden Dialog deaktivieren k&ouml;nnen:<\/p>\n<li>Sie markieren erstmalig eine Zeile in einem neu aktivierten Modul.<\/li>\n<li>Sie klicken im gleichen Modul auf eine weitere Zeile, die mehr als n Zeilen von der vorher markierten Zeile entfernt ist, wobei Sie den Wert f&uuml;r n in den Optionen des Tools einstellen k&ouml;nnen.<\/li>\n<li>Sie klicken mit der rechten Maustaste auf die zu speichernde Position und w&auml;hlen den Kontextmen&uuml;eintrag Codehistory: Stelle merken (siehe Bild 5).<\/li>\n<li>Sie verwenden die Tastenkombination Strg + Umschalt + S.<\/li>\n<p><IMG height=\"122\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic005.png\" width=\"220\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5:  Kontextmen&uuml;eintr&auml;ge des CodeHistory-Tools<\/span><\/b><\/p>\n<h2>Navigieren zwischen den Positionen<\/h2>\n<p>Nachdem Sie einige Positionen aufgezeichnet haben, m&ouml;chten Sie gezielt zu der einen oder anderen zur&uuml;ckspringen &#8211; vielleicht m&ouml;chten Sie aber auch einfach den zur&uuml;ckgelegten Weg nachvollziehen. Das Tool bietet einige M&ouml;glichkeiten zum Navigieren an:<\/p>\n<li>Mausklick auf ein Eintrag in der Positionsliste im Toolwindow<\/li>\n<li>Verwenden der Schaltfl&auml;chen Zur&uuml;ck und Vorw&auml;rts im Toolwindow<\/li>\n<li>Ausw&auml;hlen der Eintr&auml;ge CodeHistory: Zur&uuml;ck und CodeHistory: Vorw&auml;rts im Kontextmen&uuml; des Codefensters<\/li>\n<li>Auswahl des Eintrags CodeHistory: Gehe zu Stelle &#8230; und anschlie&szlig;ende Verwendung des erscheinenden Dialogs (siehe Bild 6)<\/li>\n<li>Verwenden der Tastaturkombinationen Strg + Umschalt + L (Gehe zu Codestelle&#8230;), Strg + Umschalt + Z (Zur&uuml;ck) oder Strg + Umschalt + V (Vorw&auml;rts)<\/li>\n<p><IMG height=\"306\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic006.png\" width=\"406\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6:  Diese Schnellauswahl zeigen Sie per Kontextmen&uuml; an.<\/span><\/b><\/p>\n<h2>Optionen des Tools<\/h2>\n<p>Mit der Schaltfl&auml;che Einstellungen des Toolwindows k&ouml;nnen Sie einen Dialog zum &auml;ndern der Einstellungen &ouml;ffnen (siehe Bild 7).<\/p>\n<p>Die erste Option legt fest, wie viele Zeilen eine Zeile von der zuvor gespeicherten Position entfernt sein muss, damit das Tool diese automatisch speichert. Die standardm&auml;&szlig;ig eingestellten 40 Zeilen entsprechen ungef&auml;hr einer Bildschirmseite, somit wird eine Zeile, die mehr als eine Bildschirmseite als die vorherige entfernt liegt, automatisch gespeichert. Der kleinste einstellbare Wert, den dieses Optionsfeld annimmt, ist 3.<\/p>\n<p><!--30percent--><\/p>\n<p>Mit der zweiten Option legen Sie fest, wie viele Positionen sich das Tool merken soll. Ist die angegebene Anzahl erreicht, schmei&szlig;t das Tool die &auml;ltesten Eintr&auml;ge aus der Liste. Mit der Option Sprungstellen automatisch merken geben Sie an, ob das Tool sich Positionen automatisch entsprechend Ihrer Angabe in f&uuml;r die Option Anzahl Codezeilen merken oder dies nur nach Aufforderung &uuml;ber den entsprechenden Kontextmen&uuml;befehl oder die daf&uuml;r vorgesehene Tastenkombination tun soll.<\/p>\n<p>Mit der Option Sprungstellen dauerhaft merken legen Sie fest, dass die automatisch vermerkten Stellen &uuml;ber die aktuelle Sitzung hinaus gespeichert werden sollen, so dass sie beim n&auml;chsten Laden des VBA-Projekts wieder verf&uuml;gbar sind. Diese Codestellen sind dann in der Liste mit einem Sternchen versehen. Dieses dauerhafte Speichern l&auml;sst sich auch ausschalten, indem der Haken bei der Option Sprungstellen beim Beenden speichern deaktiviert wird.<\/p>\n<h3>Praxis-Tipp<\/h3>\n<p>Das CodeHistory-Tool speichert die Eintr&auml;ge zu jeder Datenbank in einer eigenen Textdatei im gleichen Verzeichnis, in dem sich auch die .dll-Datei befindet. Da dies bei h&auml;ufigem Arbeiten mit Access schnell eine gr&ouml;&szlig;ere Menge von Dateien hervorrufen kann, w&auml;hlen Sie f&uuml;r die Installation des Tools besser ein eigenes Verzeichnis &#8211; und zwar ein anderes, als das f&uuml;r .dll-Dateien &uuml;bliche Verzeichnis c:\\windows\\system32. <\/p>\n<p><IMG height=\"0\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic007.png\" width=\"0\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7:  Einstellungen des CodeHistory-Tools<\/span><\/b><\/p>\n<p>F&uuml;r die Erstellung von Toolwindows ben&ouml;tigen Sie Microsoft Visual Studio und Visual Basic-Kenntnisse. Wenn Sie bisher nur mit Access und VBA gearbeitet haben, m&uuml;ssen Sie sich ein wenig umstellen: Die Entwicklung mit Visual Basic scheint weniger intuitiv zu sein und das Erstellen von Benutzerformularen geht anfangs nicht so flott von der Hand wie unter Access. Die mit der nachfolgend beschriebenen Technik erstellten Toolwindows lassen sich mit der VBA-Entwicklungsumgebung ab Version 2000 verwenden &#8211; Sie erinnern sich, das war der Start einer gemeinsamen VBA-Entwicklungsoberfl&auml;che f&uuml;r alle Office-Anwendungen. Dementsprechend k&ouml;nnen Sie COM-Add-Ins auch in Word, Excel und Co. verwenden &#8211; allerdings nur, wenn diese nicht speziell auf den Einsatz mit Access ausgelegt sind. F&uuml;r das hier vorgestellte CodeHistory-Tool gilt das nicht, es ist universell einsetzbar.<\/p>\n<h2>Programmierung von COM-Add-Ins f&uuml;r den VBA-Editor<\/h2>\n<p>F&uuml;r die Entwicklung von COM-Add-Ins gibt es in Microsoft Visual Basic eine spezielle Vorlage namens Addin. Wenn Sie ein neues Projekt auf Basis dieser Vorlage erstellen, legt Visual Basic direkt Verweise auf einige ben&ouml;tigte Bibliotheken an (Men&uuml;eintrag Projekt\/Verweise, s. Abb. 8).<\/p>\n<p><IMG height=\"364\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic008.png\" width=\"435\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8:  Notwendige Verweise f&uuml;r COM-Add-Ins<\/span><\/b><\/p>\n<p>Au&szlig;erdem stellt diese Vorlage bereits zwei Objekte bereit, die Sie im Projektexplorer vorfinden (Strg + R, s. Abb. 9).<\/p>\n<p>Mit dem Connect-Objekt finden Sie dort auch schon das f&uuml;r die Verwendung eines COM-Add-Ins wichtigste Element. Um dessen Funktionsweise zu erl&auml;utern, sind einige Vorbemerkungen erforderlich:<\/p>\n<p>Beim Erzeugen der .dll-Datei mit dem Men&uuml;befehl Datei ( MyAddin.dll erstellen&#8230; (der Name der .dll-Datei entspricht dem Projektnamen und kann leicht ge&auml;ndert werden) wird auf dem aktuellen Rechner direkt ein Eintrag &uuml;ber das COM-Add-In in der Registry vorgenommen.<\/p>\n<p>Anwendungen, die grunds&auml;tzlich COM-Add-Ins einbinden (Visual Studio, Visual Studio for Applications, Access &#8230;), durchsuchen beim Start den Bereich in der Registry, in dem die COM-Add-Ins eingetragen sind, und laden die f&uuml;r sie vorgesehenen Add-Ins. Die COM-Add-Ins sind dann &uuml;ber den jeweiligen Add-In-Manager aufrufbar &#8211; in der VBA-Entwicklungsumgebung etwa wie in Bild 1.<\/p>\n<p><IMG height=\"185\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic009.png\" width=\"274\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9:  Per Vorlage bereitgestellte Objekte<\/span><\/b><\/p>\n<h3>Interaktion<\/h3>\n<p>Nun sollen die COM-Add-Ins ja nicht irgendwelche nebenl&auml;ufigen Aufgaben erledigen, sondern konkret mit der jeweiligen Benutzungsumgebung zusammenh&auml;ngende Unterst&uuml;tzung bieten.<\/p>\n<p>Dazu ist eine bestimmte Art von Interaktion zwischen der Benutzungsoberfl&auml;che und dem COM-Add-In erforderlich. Die Benutzungsoberfl&auml;che muss dem COM-Add-In beim Aufruf mitteilen, wer sie ist, damit das COM-Add-In seine Dienste dort anbieten kann.<\/p>\n<p>Das erfolgt etwa &uuml;ber Eintr&auml;ge in bestehenden oder neuen Men&uuml;leisten (wie bereits im Beitrag Erweiterung der VBA-Entwicklungsumgebung in Ausgabe 5\/2004 beschrieben) oder durch Bereitstellung eines Toolwindows, das nachfolgend beschrieben wird.<\/p>\n<p>Neben diesen Bedienelementen l&ouml;st das COM-Add-In nat&uuml;rlich entsprechende Ereignisse aus, die beim Bet&auml;tigen der Bedienelemente ausgel&ouml;st werden.<\/p>\n<p>Das Anlegen der Bedienelemente und der Ereignisse erfolgt &#8211; und damit schlie&szlig;t sich der Kreis &#8211; in oben erw&auml;hntem Connect-Modul.<\/p>\n<h2>Das Connect-Modul eines COM-Add-Ins<\/h2>\n<p>Das Connect-Modul hat zwei Ansichten: ein spezielles Eigenschaftsfenster und ein herk&ouml;mmliches Code-Fenster. Ersteres dient zum Einstellen folgender wichtiger Eigenschaften (siehe Bild 10):<\/p>\n<li>Anwendung: Legt fest, welche Anwendung das COM-Add-In einbindet (f&uuml;r die VBA-Entwicklungsumgebung: Visual Basic for Applications IDE).<\/li>\n<li>Anf&auml;ngliches Ladeverhalten: Legt fest, ob das COM-Add-In direkt beim Start der Anwendung initialisiert wird (Startup) oder erst beim konkreten Aufruf (None).<\/li>\n<p><IMG height=\"428\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic010.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10:  Eigenschaften des Connect-Objekts<\/span><\/b><\/p>\n<p>Das Code-Modul legt mit einigen Ereignisprozeduren fest, wie sich das COM-Add-In in verschiedenen Situationen verhalten soll.<\/p>\n<h3>Starten des COM-Add-Ins<\/h3>\n<p>Das Ereignis OnConnection ruft die Ereignisprozedur AddinInstance_OnConnection auf. Das Ereignis wird ausgel&ouml;st, wenn das anf&auml;ngliche Ladeverhalten auf Startup eingestellt ist und die VBA-Entwicklungsumgebung gestartet wird oder wenn das anf&auml;ngliche Ladeverhalten auf None eingestellt ist und Sie die Option Geladen\/Entladen im Add-In-Manager aktivieren (siehe Bild 1).<\/p>\n<h3>Was passiert im OnConnection-Ereignis<\/h3>\n<p>Das OnConnection-Ereignis enth&auml;lt den Code beziehungsweise den Aufruf weiterer Routinen, die das Add-In betriebsbereit machen. Das kann verschiedene Aktionen umfassen:<\/p>\n<li>Anlegen von neuen Men&uuml;s<\/li>\n<li>Anlegen von Schaltfl&auml;chen in bestehenden und neuen Men&uuml;s<\/li>\n<li>Zuweisen der Ereignisse f&uuml;r eventuell angelegte Schaltfl&auml;chen<\/li>\n<li>Erstellen eines f&uuml;r das Add-In ben&ouml;tigten Toolwindows und gegebenenfalls Anzeigen dieses Toolwindows (abh&auml;ngig davon, ob es beim letzten Schlie&szlig;en angezeigt wurde)<\/li>\n<p>Eventuell ben&ouml;tigen Men&uuml;leisten, Schaltfl&auml;chen oder Toolwindows weitere Daten &#8211; beispielsweise weil das Toolwindow projekt- oder datenbankabh&auml;ngige Informationen anzeigen soll.<\/p>\n<p>Die dazu notwendigen Routinen werden von dem f&uuml;r das Toolwindow verwendeten VB-Benutzerdokument selbst gestartet.<\/p>\n<h3>Sauberes Beenden des COM-Add-Ins<\/h3>\n<p>Wenn es eine Ereignisprozedur gibt, die beim Verbinden der VBA-Entwicklungsumgebung mit dem COM-Add-In gestartet wird, muss es nat&uuml;rlich auch ein Pendant f&uuml;r das Beenden der Verbindung geben. Das entsprechende Ereignis hei&szlig;t OnDisconnection und l&ouml;st die Ereignisprozedur AddinInstance_OnDisconnection aus.<\/p>\n<p>In diesem Ereignis k&ouml;nnen Sie Code und Routinenaufrufe f&uuml;r das Wiederherstellen des vorgefundenen Zustands unterbringen. Dazu geh&ouml;ren die folgenden Aktionen:<\/p>\n<li>L&ouml;schen der angelegten Schaltfl&auml;chen in Men&uuml;leisten<\/li>\n<li>L&ouml;schen angelegter Men&uuml;leisten<\/li>\n<li>Speichern von Informationen, die beim n&auml;chsten Start ben&ouml;tigt werden, wie etwa der Zustand eines Toolwindows (sichtbar\/nicht sichtbar)<\/li>\n<li>Abbau eventuell im Addin erstellter Objektbez&uuml;ge\/-variablen<\/li>\n<li>Schlie&szlig;en des Toolwindows<\/li>\n<p>Beim Schlie&szlig;en des Toolwindows sind gegebenenfalls weitere Aktionen notwendig, um &auml;nderungen an den im Toolwindow angezeigten Daten zu speichern.<\/p>\n<p>Die entsprechenden Routinen k&ouml;nnen in der Terminate-Ereignisprozedur des Codemoduls des Toolwindows untergebracht werden.<\/p>\n<h2>Men&uuml;s und Schaltfl&auml;chen<\/h2>\n<p>Je nach der Art des COM-Add-Ins sind spezielle Men&uuml;s und Schaltfl&auml;chen mehr oder weniger wichtig f&uuml;r dessen Verwendung.<\/p>\n<p>Wenn Sie ein COM-Add-In verwenden, das nicht &uuml;ber eine st&auml;ndig sichtbare Benutzungsoberfl&auml;che wie ein Toolwindow verf&uuml;gt, k&ouml;nnen Sie dessen Funktionen praktisch nur &uuml;ber Men&uuml;schaltfl&auml;chen aufrufen (Tastenkombinationen sind nat&uuml;rlich auch m&ouml;glich, aber gute Ergonomie setzt daf&uuml;r erstmal eine Schaltfl&auml;che voraus).<\/p>\n<p>Wenn ein Toolwindow vorhanden ist, wird dieses die ben&ouml;tigten Steuerelemente bereitstellen; m&ouml;glicherweise ist das Anbieten weiterer M&ouml;glichkeiten zum Aufrufen der vorhandenen Funktionen sinnvoll &#8211; Men&uuml;schaltfl&auml;chen speziell in den entsprechenden Kontextmen&uuml;s sind hier besonders geeignet.<\/p>\n<h3>Anlegen neuer Elemente<\/h3>\n<p>Das Anlegen von Men&uuml;s und Schaltfl&auml;chen erfolgt per Code. Dabei verwendet man die gleichen Methoden wie auch beim Anlegen von Men&uuml;elementen in der Access-Umgebung. Ausf&uuml;hrliche Hinweise dazu finden Sie im Beitrag Dynamische Men&uuml;s mit VBA, Ausgabe 4\/2003.<\/p>\n<p>Der gro&szlig;e Unterschied zwischen dem Anlegen von Men&uuml;s auf die im genannten Beitrag beschriebene Art und in COM-Add-Ins ist folgender:<\/p>\n<p>In einer Datenbank-Anwendung speichern Sie die beim Klicken auf die Men&uuml;schaltfl&auml;chen auszuf&uuml;hrenden Routinen einfach als &ouml;ffentliche Function-Prozeduren.<\/p>\n<p>Beim Einbinden eines COM-Add-Ins w&auml;re das auch m&ouml;glich. Allerdings m&ouml;chten Sie ja keine in der Datenbank gespeicherte Prozedur aufrufen, sondern eine, die das COM-Add-In bereitstellt &#8211; und auf die darin enthaltenen Methoden k&ouml;nnen Sie von Access aus nicht so einfach zugreifen.<\/p>\n<p>Deshalb legen Sie im Code des COM-Add-Ins Ereignisse und entsprechende Ereignisprozeduren an, die auf das Bet&auml;tigen der Men&uuml;schaltfl&auml;chen &#8222;lauschen&#8220;.<\/p>\n<p>In der Praxis sieht das folgenderma&szlig;en aus:<\/p>\n<p>Zun&auml;chst legen Sie eine neue (Men&uuml;-) Schaltfl&auml;che an, beispielsweise die f&uuml;r das Aufrufen des Toolwindows des CodeHistory-Tools (siehe Bild 2). Das Anlegen dieses Eintrags erfolgt mit den Methoden der Office-Objektbibliothek.<\/p>\n<p>Nun m&uuml;ssen Sie das COM-Add-In nur noch dazu bewegen, dass es beim Klick auf diese Schaltfl&auml;che die gew&uuml;nschte Methode des COM-Add-Ins ausf&uuml;hrt.<\/p>\n<p>Dazu deklarieren Sie zun&auml;chst eine entsprechende Objektvariable f&uuml;r das Ereignis im Kopf des Codemoduls des Connect-Objekts:<\/p>\n<pre>Public WithEvents menEvent As VBIDE.CommandBarEvents<\/pre>\n<p>In der Routine, die beim Verbinden der VBA-Entwicklungsumgebung mit dem COM-Add-In aufgerufen wird, m&uuml;ssen Sie das Event-Objekt nun noch dem richtigen Steuerelement der Men&uuml;leiste zuweisen:<\/p>\n<pre>Set cmbmen = AddCmbButton(strTB, _   \"Add-&Ins\", strTitle, 103, True)\r\nSet Me.menEvent = _   VBAApp.Events.CommandBarEvents(cmbmen)<\/pre>\n<p>Hier sind einige Erl&auml;uterungen notwendig. Die AddCmbButton-Methode ist eine Hilfsfunktion, die das Anlegen eines Men&uuml;elements kapselt. Sie erwartet den Namen des Hauptmen&uuml;s, des Untermen&uuml;s, in das die Schaltfl&auml;che eingef&uuml;gt werden soll, die Beschriftung der Schaltfl&auml;che sowie Angaben &uuml;ber das anzuzeigende Symbol, ob die Schaltfl&auml;che standardm&auml;&szlig;ig aktiviert ist und ob die Schaltfl&auml;che die erste einer neuen Gruppe ist.<\/p>\n<p>AddCmbButton liefert einen Objektverweis auf das Schaltfl&auml;chenobjekt zur&uuml;ck und speichert ihn in der Variablen cmdmen.<\/p>\n<p>Die folgende Anweisung sorgt daf&uuml;r, dass die Ereignisse der Schaltfl&auml;che an das weiter oben deklarierte Event-Objekt weitergeleitet werden. Dadurch k&ouml;nnen Sie im Code des COM-Add-Ins die entsprechenden Ereignisprozeduren festlegen.<\/p>\n<p>F&uuml;r die Schaltfl&auml;che, die Sie mit obigen Anweisungen im Add-Ins-Men&uuml; erstellt haben, verwenden Sie etwa folgende Ereignisprozedur:<\/p>\n<pre>Private Sub menEvent_Click( _    ByVal CommandBarControl As Object, _    handled As Boolean, _    CancelDefault As Boolean)\r\n    tWindow.Visible = True\r\nEnd Sub<\/pre>\n<p>Die einzige Anweisung dieser Prozedur stellt die Sichtbarkeit des Toolwindows auf True ein.<\/p>\n<p>Die Ereignisprozeduren m&uuml;ssen Sie &uuml;brigens jeweils in dem Modul als &#8222;Private&#8220;-Routinen speichern, in dem auch die Events selbst deklariert sind.<\/p>\n<p><IMG height=\"642\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic011.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11:  Per COM-Add-In erstellte Eintr&auml;ge im Kontextmen&uuml; des Codefensters<\/span><\/b><\/p>\n<h3>Neue Eintr&auml;ge in Kontextmen&uuml;s<\/h3>\n<p>Auf &auml;hnliche Weise werden weitere Anweisungen erstellt, mit denen Sie innerhalb des aktuellen Codefensters die Befehle des CodeHistory-Tools aufrufen k&ouml;nnen (siehe Bild 11). Wenn Sie selbst weitere Eintr&auml;ge in Kontextmen&uuml;s erzeugen m&ouml;chten, m&uuml;ssen Sie lediglich den Namen des jeweiligen Kontextmen&uuml;s herausfinden. Der Name des Kontextmen&uuml;s f&uuml;r das Codefenster lautet beispielsweise Code Window. Wenn Sie die Hilfsfunktion AddCmbButton aus dem Beispiel-Add-In verwenden m&ouml;chten, m&uuml;ssten Sie folgende Anweisungen verwenden, um diesem Kontextmen&uuml; einen neuen Eintrag hinzuzuf&uuml;gen:<\/p>\n<pre>Set cmbmen = AddCmbButton( _   \"Code Window\", \"\", strPopup1, 103, _   True, True)\r\nSet Me.popupEvent1 = _   VBAApp.Events.CommandBarEvents(cmbmen)<\/pre>\n<p>Sie k&ouml;nnen jedem COM-Add-In beliebig viele VB-Benutzerformulare hinzuf&uuml;gen und damit beispielsweise f&uuml;r die Durchf&uuml;hrung der Funktionen notwendige Informationen sammeln.<\/p>\n<p>Bei manchen Anwendungen macht es allerdings Sinn, dass deren Benutzungsschnittstelle die ganze Zeit sichtbar ist. Das ist zum Beispiel bei dem Prozedurbrowser so, den Sie gegebenenfalls im Beitrag Prozedurbrowser f&uuml;r den VBA-Editor kennen gelernt haben (weitere Hinweise auf der ersten Seite dieses Beitrags).<\/p>\n<p>Dieses Tool zeigt s&auml;mtliche modulweiten Deklarationen sowie die Namen der Function-, Sub- und Property-Prozeduren des aktuellen Moduls an und springt bei Bedarf auf das entsprechende Element im Codemodul.<\/p>\n<h3>Toolwindow erstellen<\/h3>\n<p>Um ein Toolwindow zu verwenden, m&uuml;ssen Sie ein so genanntes Benutzerdokument zum Projekt hinzuf&uuml;gen. Dazu verwenden Sie den Kontextmen&uuml;eintrag Hinzuf&uuml;gen\/Benutzerdokument. <\/p>\n<p>Ein Benutzerdokument l&auml;sst sich genauso wie ein herk&ouml;mmliches Formular mit Steuerelementen und Code best&uuml;cken und enth&auml;lt auch die gleichen Ereignisse (siehe Bild 12).<\/p>\n<p>Zum Toolwindow wird das Benutzerdokument erst durch eine Spezialbehandlung: Zun&auml;chst deklarieren Sie f&uuml;r diesen Bestandteil der Benutzeroberfl&auml;che eine &ouml;ffentliche Variable in einem Standardmodul:<\/p>\n<pre>Public tWindow As VBIDE.Window<\/pre>\n<p><IMG height=\"237\" src=\"..\/fileadmin\/_temp_\/{D9EC351A-2B00-4B15-9A53-A53CAB9C318B}\/pic012.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12:  Beispiel f&uuml;r ein Userdocument<\/span><\/b><\/p>\n<p>Anschlie&szlig;end verwenden Sie etwa folgende Anweisung, um das Benutzerdokument in ein Toolwindow einzuh&uuml;llen (in einer Zeile):<\/p>\n<pre>Set tWindow = VBAApp.Windows.CreateToolWindow(AddInInst, strAppTitle & \".UDHistory\", strTitle, strGUID$, dToolDoc)<\/pre>\n<p>Dabei ist VBAApp eine Objektvariable f&uuml;r die Anwendung, die das COM-Add-In verwendet (also die VBA-Entwicklungsumgebung), strAppTitle der Projektname, strTitle die Titelzeile, die das Toolwindow anzeigen soll, strGUID ein Identifikations-String, &uuml;ber den das COM-Add-In eindeutig identifiziert werden kann und dToolDoc gibt einen Verweis auf das Benutzerdokument selbst zur&uuml;ck. Wenn Sie das Beispiel-COM-Add-In als Basis f&uuml;r Eigenkreationen verwenden, m&uuml;ssen Sie eine neue GUID anlegen &#8211; die Hilfsfunktion CreateGUID() im Modul mdlMain des VB-Projekts ermittelt die entsprechende Zeichenkette f&uuml;r Sie.<\/p>\n<p>Mit tWindow und dToolDock haben Sie nun zwei Objekte, &uuml;ber die Sie das Toolwindow steuern k&ouml;nnen: Das tWindow bildet den &#8222;Rahmen&#8220; und bietet die f&uuml;r die Fenster in der VBA-Entwicklungsumgebung verf&uuml;gbaren Methoden und Eigenschaften wie Visible, Height, Width, Top oder Left. dToolDoc stellt die sich im Codemodul des Benutzerdokuments befindliche Funktionalit&auml;t zur Verf&uuml;gung.<\/p>\n<h2>Sicherung der Einstellungen des COM-Add-Ins<\/h2>\n<p>Ein wichtiges Thema ist das Speichern der Einstellungen des COM-Add-Ins. Zu diesen Einstellungen geh&ouml;rt etwa eine Eigenschaft, die den Zustand des Toolwindows beim Schlie&szlig;en der VBA-Entwicklungsumgebung beschreibt (zum Beispiel die Sichtbarkeit), um beim erneuten &ouml;ffnen den vorherigen Zustand wiederherzustellen. F&uuml;r solche Informationen bietet sich die Registry an und Visual Basic stellt zwei Funktionen f&uuml;r das Lesen und Schreiben von Daten in einem speziell f&uuml;r solche Anwendungen vorgesehenen Bereich zur Verf&uuml;gung. Diesen Bereich finden Sie beispielsweise f&uuml;r das CodeHistory-Tool unter dem folgenden Schl&uuml;ssel:<\/p>\n<p>HKEY_CURRENT_USER\\Software\\VB and VBA Program Settings\\VBA AddIns\\VBACodeHistory<\/p>\n<p>Die Funktion zum Ermitteln eines Wertes aus diesem Bereich hei&szlig;t GetSetting. Sie hat folgende Syntax:<\/p>\n<pre>GetSetting(AppName As String, Section As String, Key As String, [Default])<\/pre>\n<p>Um einen Wert namens DisplayOnConnect unter dem oben angegebenen Ort zu lesen, verwenden Sie folgenden Ausdruck:<\/p>\n<pre>GetSetting(\"VBA AddIns\", \"VBACodeHistory\", \"DisplayOnConnect\", \"0\")<\/pre>\n<p>Der f&uuml;r den Parameter Default angegebene Wert wird zur&uuml;ckgegeben, wenn der Schl&uuml;ssel keinen Wert enth&auml;lt. Um diesen Wert beispielsweise beim Schlie&szlig;en in die Registry zu schreiben, verwenden Sie die SaveSetting-Funktion mit folgender Syntax:<\/p>\n<pre>SaveSetting(AppName As String, Section As String, Key As String, Setting As String)<\/pre>\n<h2>Weitere Features<\/h2>\n<p>Das sich auf der Heft-CD befindende Beispiel f&uuml;r ein Toolwindow enth&auml;lt unter anderem den kompletten Quellcode. Aus Platzgr&uuml;nden ist es leider nicht m&ouml;glich, alle Funktionen ausf&uuml;hrlich zu erl&auml;utern; das gilt auch f&uuml;r einige Funktionen, die nicht speziell f&uuml;r das CodeHistory-Tool, sondern f&uuml;r alle COM-Add-Ins interessant sind. Dazu geh&ouml;ren die Folgenden:<\/p>\n<li>Erstellung von Tastenkombinationen f&uuml;r verschiedene Funktionen<\/li>\n<li>Dynamische Anpassung der H&ouml;he von dockenden Toolwindows<\/li>\n<li>Erstellung von benutzerdefinierten Icons f&uuml;r Men&uuml;eintr&auml;ge<\/li>\n<p>Einige dieser Funktionen sind in der Datei &#8222;anmerkungen.html&#8220; erl&auml;utert, die im Projektordner zu finden ist und die direkt aus dem VB-Projekt heraus aufgerufen werden kann. (Projektexplorer (  Verbundene Dokumente\/anmerkungen.html)<\/p>\n<p>Zum Installieren eines COM-Add-Ins m&uuml;ssen Sie lediglich die .dll in einem beliebigen Verzeichnis auf der Festplatte des Zielrechners speichern und registrieren.<\/p>\n<p>Zum Registrieren &ouml;ffnen Sie den Ausf&uuml;hren-Dialog (Start\/Ausf&uuml;hren) und geben die folgende Anweisung ein:<\/p>\n<pre>regsvr32.exe \"&lt;Pfad&gt;\\VBACodeHistory.dll\"<\/pre>\n<p>Die Hilfsanwendung regsvr32.exe befindet sich im Systemverzeichnis jeder Windows-Installation. Sie tr&auml;gt automatisch alle Informationen in die Registry ein, die zum Start des Addins in der vorgesehenen Anwendung &#8211; hier der VBA-Editor &#8211; notwendig sind. Diese Informationen holt sich die Hilfsanwendung aus der DLL selbst.<\/p>\n<p>Wer COM-Addins weitergeben oder vertreiben will, der sollte zumindest diesen Vorgang der Registrierung in einer Readme-Datei erl&auml;utern. Noch besser liefern Sie eine Batchdatei zur Registrierung mit aus, die ins gleiche Verzeichnis wie die .dll-Datei entpackt oder gespeichert wird und folgenden einfachen Inhalt hat:<\/p>\n<pre>regsvr32 VBACodeHistory.dll<\/pre>\n<p>In diesem Zusammenhang sollte auch noch auf Systemvoraussetzungen f&uuml;r das Addin hingewiesen werden: F&uuml;r die Verwendung der .dll-Datei muss sich die aktuelle Version der Visual Basic-Runtime-Bibliothek  (msvbvm60.dll) auf dem System befinden. Das ist bei einigen &auml;lteren Rechnern unter Umst&auml;nden nicht der Fall. Ein Link zu einer Download-Quelle f&uuml;r diese Runtime (zum Beispiel bei Microsoft) w&auml;re hier n&uuml;tzlich. Zum Zeitpunkt der Drucklegung dieses Magazins gab es beispielsweise unter folgendem Link eine aktuelle Version: http:\/\/support.microsoft.com\/kb\/823746\/de<\/p>\n<p>Das VBACodeHistory-Addin arbeitet mit der VBA-Entwicklungsumgebung von Microsoft Office 2000, XP und 2003 zusammen. Eine Office-Installation ist daher Voraussetzung f&uuml;r den Einsatz dieses COM-Add-Ins. Ein weiterer Grund f&uuml;r das zwingende Vorhandensein von Office ist, dass das hier beschriebene Tool das Listbox-Steuerelement aus der MS Forms-Bibliothek benutzt (weitere Informationen in der Datei anmerkungen.html auf der Heft-CD).<\/p>\n<p>Mit den hier beschriebenen Grundlagen k&ouml;nnen Sie sich austoben &#8211; entsprechende Ideen und VB-Fertigkeiten vorausgesetzt, k&ouml;nnen Sie sich mit COM-Add-Ins die eine oder andere Programmiert&auml;tigkeit erleichtern.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je ernsthafter man mit Access arbeitet, desto mehr verlagert sich der Schwerpunkt der Arbeit vom Access-Fenster auf die VBA-Ent&not;wick&not;lungs&not;um&not;ge&not;bung. Und wie es mit einem Arbeitsplatz so ist, sollte man ihn sich so angenehm wie m&ouml;glich gestalten &#8211; das gilt auch f&uuml;r die Programme, mit denen man arbeitet. Und das umso mehr, wenn sich tats&auml;chlich die M&ouml;glichkeit dazu ergibt. Die VBA-Entwicklungsumgebung l&auml;sst sich beliebig erweitern, wenn man das Know-how dazu besitzt. Das finden Sie hier und ein praktisches Beispiel gleich dazu: Ab jetzt k&ouml;nnen Sie durch den Code springen, wie Sie m&ouml;chten &#8211; mit dem CodeHistory-Tool finden Sie schnell wieder zur&uuml;ck.<\/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":[662005,66032005,44000025],"tags":[],"class_list":["post-55000278","post","type-post","status-publish","format-standard","hentry","category-662005","category-66032005","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>Erweitern des VBA-Editors - 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\/Erweitern_des_VBAEditors\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Erweitern des VBA-Editors\" \/>\n<meta property=\"og:description\" content=\"Je ernsthafter man mit Access arbeitet, desto mehr verlagert sich der Schwerpunkt der Arbeit vom Access-Fenster auf die VBA-Ent&not;wick&not;lungs&not;um&not;ge&not;bung. Und wie es mit einem Arbeitsplatz so ist, sollte man ihn sich so angenehm wie m&ouml;glich gestalten - das gilt auch f&uuml;r die Programme, mit denen man arbeitet. Und das umso mehr, wenn sich tats&auml;chlich die M&ouml;glichkeit dazu ergibt. Die VBA-Entwicklungsumgebung l&auml;sst sich beliebig erweitern, wenn man das Know-how dazu besitzt. Das finden Sie hier und ein praktisches Beispiel gleich dazu: Ab jetzt k&ouml;nnen Sie durch den Code springen, wie Sie m&ouml;chten - mit dem CodeHistory-Tool finden Sie schnell wieder zur&uuml;ck.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:18:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg03.met.vgwort.de\/na\/30933e593b6f4a8f9b1b5597bc2d9074\" \/>\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=\"23\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Erweitern des VBA-Editors\",\"datePublished\":\"2020-05-06T15:18:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/\"},\"wordCount\":4587,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/30933e593b6f4a8f9b1b5597bc2d9074\",\"articleSection\":[\"2005\",\"3\\\/2005\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/\",\"name\":\"Erweitern des VBA-Editors - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/30933e593b6f4a8f9b1b5597bc2d9074\",\"datePublished\":\"2020-05-06T15:18:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/30933e593b6f4a8f9b1b5597bc2d9074\",\"contentUrl\":\"http:\\\/\\\/vg03.met.vgwort.de\\\/na\\\/30933e593b6f4a8f9b1b5597bc2d9074\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Erweitern_des_VBAEditors\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Erweitern des VBA-Editors\"}]},{\"@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":"Erweitern des VBA-Editors - 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\/Erweitern_des_VBAEditors\/","og_locale":"de_DE","og_type":"article","og_title":"Erweitern des VBA-Editors","og_description":"Je ernsthafter man mit Access arbeitet, desto mehr verlagert sich der Schwerpunkt der Arbeit vom Access-Fenster auf die VBA-Ent&not;wick&not;lungs&not;um&not;ge&not;bung. Und wie es mit einem Arbeitsplatz so ist, sollte man ihn sich so angenehm wie m&ouml;glich gestalten - das gilt auch f&uuml;r die Programme, mit denen man arbeitet. Und das umso mehr, wenn sich tats&auml;chlich die M&ouml;glichkeit dazu ergibt. Die VBA-Entwicklungsumgebung l&auml;sst sich beliebig erweitern, wenn man das Know-how dazu besitzt. Das finden Sie hier und ein praktisches Beispiel gleich dazu: Ab jetzt k&ouml;nnen Sie durch den Code springen, wie Sie m&ouml;chten - mit dem CodeHistory-Tool finden Sie schnell wieder zur&uuml;ck.","og_url":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:18:00+00:00","og_image":[{"url":"http:\/\/vg03.met.vgwort.de\/na\/30933e593b6f4a8f9b1b5597bc2d9074","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"23\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Erweitern des VBA-Editors","datePublished":"2020-05-06T15:18:00+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/"},"wordCount":4587,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/30933e593b6f4a8f9b1b5597bc2d9074","articleSection":["2005","3\/2005","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/","url":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/","name":"Erweitern des VBA-Editors - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/#primaryimage"},"thumbnailUrl":"http:\/\/vg03.met.vgwort.de\/na\/30933e593b6f4a8f9b1b5597bc2d9074","datePublished":"2020-05-06T15:18:00+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/#primaryimage","url":"http:\/\/vg03.met.vgwort.de\/na\/30933e593b6f4a8f9b1b5597bc2d9074","contentUrl":"http:\/\/vg03.met.vgwort.de\/na\/30933e593b6f4a8f9b1b5597bc2d9074"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Erweitern_des_VBAEditors\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Erweitern des VBA-Editors"}]},{"@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\/55000278","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=55000278"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000278\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}