{"id":55000237,"date":"2004-10-01T00:00:00","date_gmt":"2023-02-10T16:15:49","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=237"},"modified":"2024-02-19T08:19:09","modified_gmt":"2024-02-19T08:19:09","slug":"erweitern_der_vbaentwicklungsumgebung","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/","title":{"rendered":"Erweitern der VBA-Entwicklungsumgebung"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg05.met.vgwort.de\/na\/271fc76d671046638fdc4191c02ce4b0\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Andr&eacute; Minhorst, Duisburg<\/b><\/p>\n<p><b>Wer hat sich nicht schon einmal die eine oder andere, vielleicht ganz individuelle Erweiterung der Entwicklungsumgebung von Access gew&uuml;nscht Klar, wie man sich einen Assistenten f&uuml;r bestimmte Aufgaben bastelt, ist in der Fachliteratur hinl&auml;nglich erkl&auml;rt, aber den VBA-Editor mit zus&auml;tzlichen Funktionen versehen Dieser Beitrag zeigt, wie Sie mit etwas Fremdhilfe von VB eine .dll-Datei entwickeln, die viele W&uuml;nsche erf&uuml;llen kann.<\/b><\/p>\n<p>Wahrscheinlich verf&uuml;gt nicht jeder Leser dieses Beitrags &uuml;ber das Microsoft Visual Studio. Das h&auml;tte den Nachteil, dass er nicht selbst L&ouml;sungen wie diese oder &auml;hnliche erstellen kann &#8211; was einerseits sehr schade ist, denn wer die hier vorgestellte Technik einmal kennt, der m&ouml;chte vermutlich f&uuml;r einige immer wiederkehrende Aufgaben eine automatische L&ouml;sung erstellen. Andererseits kommen Sie auch als Nicht-Visual Studio-Anwender in den Genuss der hier vorgestellten L&ouml;sung, da diese als .dll-Datei auf der Heft-CD vorliegt.<\/p>\n<h2>DLL registrieren<\/h2>\n<p>Um die fertige DLL im VBA-Editor verwenden zu k&ouml;nnen, m&uuml;ssen Sie diese zun&auml;chst registrieren. Dazu kopieren Sie die DLL in einen Ordner Ihrer Wahl (am besten zu den anderen DLLs im Windows-Verzeichnis unter System32).<\/p>\n<p>Anschlie&szlig;end rufen Sie im Ausf&uuml;hren-Dialog (Start ( Ausf&uuml;hren) die Anweisung regsvr32 mit dem kompletten Pfad der DLL als Parameter auf. Beim n&auml;chsten Start von Access und der VBA-Entwicklungsumgebung stehen die Funktionen dann zur Verf&uuml;gung.<\/p>\n<h3>Hinweis<\/h3>\n<p>Die DLL arbeitet mit Access ab Version 2000 zusammen. <\/p>\n<h2>Nummerieren von Quellcode<\/h2>\n<p>Im Beitrag Professionelle Fehlerbehandlung in dieser Ausgabe von Access im Unternehmen finden Sie eine Fehlerbehandlung, die bei jedem aufgetretenen Fehler einen Eintrag in eine Datei vornimmt und dort die Fehlernummer, die Beschreibung, das Modul und die Prozedur, in der der Fehler auftritt, sowie die entsprechende Zeilennummer eintr&auml;gt.<\/p>\n<p>Dazu muss allerdings erst einmal eine Zeilennummer vorhanden sein; Access tr&auml;gt diese nicht automatisch in eine Prozedur ein oder ermittelt diese wie andere Programmiersprachen. Wer schon einmal eine etwas umfangreichere Anwendung entwickelt hat, kann sich ungef&auml;hr vorstellen, wie viele Zeilen Code eine solche Anwendung enth&auml;lt.<\/p>\n<p>Der Aufwand, diese von Hand zu nummerieren, ist unverh&auml;ltnism&auml;&szlig;ig gro&szlig;. Hinzu kommt, dass &#8211; egal wie gro&szlig; man die Abst&auml;nde zwischen den einzelnen Zahlen w&auml;hlt &#8211; garantiert irgendwann so viele Zeilen hinzukommen, dass man alles erneut nummerieren muss. Da kommt eine Funktion zum automatischen Nummerieren von Modulen doch gerade recht.<\/p>\n<p>Wenn Sie die DLL ordnungsgem&auml;&szlig; registriert haben, erscheint beim &ouml;ffnen der VBA-Entwicklungsumgebung eine neue Men&uuml;leiste mit drei Schaltfl&auml;chen (s. Abb. 1).<\/p>\n<p><IMG height=\"326\" src=\"..\/fileadmin\/_temp_\/{01EF284D-8E62-4FDF-8C3C-20710CD56061}\/pic001.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b>Abb. 1: Zeilen nummerieren per Knopfdruck<\/b><\/p>\n<p><IMG height=\"335\" src=\"..\/fileadmin\/_temp_\/{01EF284D-8E62-4FDF-8C3C-20710CD56061}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b>Abb. 2: Hinzuf&uuml;gen einer Fehlerbehandlung<\/b><\/p>\n<p>Mit einem Klick auf die Schaltfl&auml;che Modul nummerieren f&uuml;gen Sie dem aktuellen Modul eine Nummerierung hinzu. Um diese wieder zu entfernen, klicken Sie einfach auf die Schaltfl&auml;che Modul entnummerieren.<\/p>\n<h2>Hinzuf&uuml;gen einer Fehlerbehandlung<\/h2>\n<p>Fehlerbehandlungen haben immer das gleiche Grundger&uuml;st. Der VBA-Editor bietet auch eine eingebaute Funktion an, um eine rudiment&auml;re Fehlerbehandlung zu integrieren, aber um die im Beitrag Professionelle Fehlerbehandlung vorgestellte Fehlerbehandlung zu verwenden, bedarf es ein paar Zeilen mehr.<\/p>\n<p>Um eine Fehlerbehandlung in eine beliebige Prozedur zu integrieren, &ouml;ffnen Sie einfach das gew&uuml;nschte Modul, platzieren die Einf&uuml;gemarke &uuml;ber der entsprechenden Prozedur und klicken auf die Schaltfl&auml;che Fehlerbehandlung hinzuf&uuml;gen. Das Ergebnis sieht beispielsweise wie in Abb. 2 aus.<\/p>\n<p>Nur den wenigsten Anwendern d&uuml;rfte bekannt sein, dass man mit einem VB-Programm die Entwicklungsumgebung von Access, nachfolgend kurz VBA-Editor genannt, um eigene Funktionen erweitern kann. Das VB-Programm nistet sich &#8211; einmal registriert &#8211; an der gew&uuml;nschten Stelle im VBA-Editor ein und stellt dort fortan seine Funktionen zur Verf&uuml;gung. Im vorliegenden Fall sollen die entsprechenden Funktionen &uuml;ber eine spezielle Men&uuml;leiste aufgerufen werden.<\/p>\n<p>Um die .dll-Datei zu erstellen, ben&ouml;tigen Sie &#8211; wie oben erw&auml;hnt &#8211; Microsoft Visual Studio 6.0. Nach dem Start des Visual Studios bietet es Ihnen verschiedene M&ouml;glichkeiten zum Erstellen eines neuen Projekts an. W&auml;hlen Sie dort den Eintrag ActiveX-DLL aus.<\/p>\n<p>Das nun erscheinende Bild mag Access-Entwicklern teilweise bekannt vorkommen, da es prinzipiell die gleichen Elemente wie der VBA-Editor enth&auml;lt. Der wesentliche Unterschied ist, dass die Benutzeroberfl&auml;che der zu erstellenden Anwendungen ebenfalls hier und nicht in einer separaten Umgebung wie unter Access erzeugt werden kann.<\/p>\n<p>Damit Sie das Projekt sp&auml;ter identifizieren k&ouml;nnen, stellen Sie nun einige Eigenschaften (Men&uuml;eintrag Projekt\/Eigenschaften von Projekt1&#8230;) wie in Abb. 3 ein. Entfernen Sie dann das Klassenmodul Class1 aus dem Objektexplorer (zu aktivieren mit Strg + R). Anschlie&szlig;end speichern Sie das Projekt unter dem Namen VBAExtensions.<\/p>\n<p>&ouml;ffnen Sie nun den Dialog Komponenten (Men&uuml;eintrag Projekt\/Komponenten) und aktivieren Sie auf der Registerseite Designer den Eintrag Addin Class. <\/p>\n<p><IMG height=\"384\" src=\"..\/fileadmin\/_temp_\/{01EF284D-8E62-4FDF-8C3C-20710CD56061}\/pic003.png\" width=\"418\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b>Abb. 3: Eigenschaften des neuen Projekts<\/b><\/p>\n<p><IMG height=\"486\" src=\"..\/fileadmin\/_temp_\/{01EF284D-8E62-4FDF-8C3C-20710CD56061}\/pic004.png\" width=\"415\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b>Abb. 4: Einstellungen des AddInDesigners<\/b><\/p>\n<p><IMG height=\"364\" src=\"..\/fileadmin\/_temp_\/{01EF284D-8E62-4FDF-8C3C-20710CD56061}\/pic005.png\" width=\"435\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b>Abb. 5: Die letzten beiden Referenzen <\/b><\/p>\n<p>Falls dadurch nicht automatisch eine neue Addin Class zu dem Projekt hinzugef&uuml;gt wird, holen Sie das nach: W&auml;hlen Sie aus dem Kontextmen&uuml; des Eintrags VBAExtensions (VBAExtensions.vbp) im Projektexplorer den Eintrag Hinzuf&uuml;gen ( Addin Class aus.<\/p>\n<p>Neben dem neuen Eintrag im Projektexplorer erscheint ein Dialog mit den Eigenschaften der neuen AddIn-Klasse. Erg&auml;nzen Sie die Eigenschaften wie in Abb. 4.<\/p>\n<p>Stellen Sie au&szlig;erdem im Eigenschaftsfenster des AddIn den Wert der Eigenschaft Public auf True ein. Die nachfolgende Meldung k&ouml;nnen Sie getrost bejahen.<\/p>\n<p>Anschlie&szlig;end geben Sie dem Projekt noch die ben&ouml;tigten Referenzen mit auf den Weg. Im vorliegenden Fall ben&ouml;tigen Sie eine Referenz auf die Microsoft Office x.0 Object Library in der Version, die auf dem Zielrechner zum Einsatz kommt, sowie die Bibliothek Microsoft Visual Basic for Applications Extensibility 5.3 (s. Abb. 5).<\/p>\n<h3>Hinweis<\/h3>\n<p>Nachfolgend verwenden wir das Objektmodell des Microsoft Office Visual Basic Editors. Detaillierte Informationen finden Sie unter folgender Internetadresse (ohne Zeilenumbr&uuml;che): http:\/\/msdn.microsoft.com\/library\/default.aspurl=\/library\/en-us\/dnofftalk\/html\/office07042002.asp <\/p>\n<p>Schlie&szlig;lich f&uuml;gen Sie dem Projekt noch ein neues Modul hinzu, das lediglich eine Zeile enth&auml;lt:<\/p>\n<p>Public oVBE As VBIDE.VBE<\/p>\n<p>Damit setzen Sie eine Referenz auf das oberste Objekt des entsprechenden Objektmodells und k&ouml;nnen dar&uuml;ber auf die Elemente des VBA-Editors zugreifen.<\/p>\n<p>Um die DLL zu testen, folgt nun der &uuml;bliche &#8222;Hello World&#8220;-Test. &ouml;ffnen Sie das Modul des AddInDesigner1 per Kontextmen&uuml; (Eintrag Code anzeigen). W&auml;hlen Sie aus dem linken Kombinationsfeld den Eintrag AddinInstance aus und es erscheint automatisch eine Ereignisprozedur, die Sie wie in Quellcode 1 erg&auml;nzen.<\/p>\n<pre>Private Sub AddinInstance_OnConnection(ByVal Application As Object, _    ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _    ByVal AddInInst As Object, custom() As Variant)\n    Set objVBAIDE = Application\n    MsgBox \"Hello World\"\nEnd Sub<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<pre>Private cbbNummerieren As CommandBarButton\nPrivate WithEvents evtNummerieren As CommandBarEvents\nPrivate Sub AddinInstance_OnConnection(ByVal Application As Object, _    ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _    ByVal AddInInst As Object, custom() As Variant)\n    Set oVBE = Application\n    Dim cbr As CommandBar\n    Set cbr = oVBE.CommandBars.Add(\"VBAExtensions\", Position:=msoBarTop, _        Temporary:=True)\n    cbr.Visible = True\n    Set cbbNummerieren = cbr.Controls.Add(msoControlButton, Temporary:=True)\n    cbbNummerieren.Style = msoButtonIconAndCaption\n    cbbNummerieren.FaceId = 11\n    cbbNummerieren.Caption = \"Modul nummerieren\"\n    Set evtNummerieren = oVBE.Events.CommandBarEvents(cbbNummerieren)\nEnd Sub<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<p>Kompilieren Sie das Projekt nun &uuml;ber den Men&uuml;eintrag Datei\/VBAExtensions.dll erstellen&#8230; und probieren Sie die DLL aus, indem Sie eine Access-Datenbank &ouml;ffnen und mit Strg + G den VBA-Editor aktivieren. Wenn das gew&uuml;nschte Meldungsfenster erscheint, haben Sie bisher alles richtig gemacht &#8211; ansonsten &uuml;berpr&uuml;fen Sie nochmals die vorherigen Schritte.<\/p>\n<h3>Hinweis<\/h3>\n<p>Um w&auml;hrend der Entwicklung die Fortschritte mitzuverfolgen und gegebenenfalls den Code zu debuggen, setzen Sie die gew&uuml;nschten Haltepunkte und starten das Projekt per F5. Das anschlie&szlig;ende &ouml;ffnen von Access und Aufrufen des VBA-Editors verwendet dann das Projekt wie die richtige DLL. <\/p>\n<p>Um die drei nachfolgend vorgestellten Funktionen im VBA-Editor starten zu k&ouml;nnen, ben&ouml;tigen Sie eine entsprechende Men&uuml;leiste mit drei Schaltfl&auml;chen.<\/p>\n<p>Der &uuml;bersicht halber enth&auml;lt Quellcode 2 nur die Anweisungen f&uuml;r die Erstellung der ersten Schaltfl&auml;che mit der Beschriftung Modul nummerieren.<\/p>\n<p>Die beiden ersten Zeilen des Moduls enthalten Deklarationen einer Objektvariablen f&uuml;r die Schaltfl&auml;che sowie die Deklaration der Ereignisse f&uuml;r die enthaltenen Schaltfl&auml;chen. <\/p>\n<p>Die Prozedur, die soeben noch den &#8222;Hello World&#8220;-Test enthielt, best&uuml;cken Sie nun wie in Quellcode 2. Die Prozedur erstellt zun&auml;chst eine neue Men&uuml;leiste mit dem Namen VBAExtensions, die nach dem Setzen der Visible-Eigenschaft auf den Wert True direkt unter den anderen Men&uuml;leisten erscheint und mit dem Schlie&szlig;en des VBA-Editors wieder verschwindet.<\/p>\n<p>Anschlie&szlig;end f&uuml;gt die Prozedur der Men&uuml;leiste eine Schaltfl&auml;che mit der Beschriftung Modul nummerieren hinzu und stellt das im Modulkopf deklarierte Objekt evtNummerieren so ein, dass es auf die Ereignisse der soeben angelegten Schaltfl&auml;che reagiert.<\/p>\n<p>Sie m&uuml;ssen nun nur noch die entsprechende Ereigniseigenschaft f&uuml;r die neue Schaltfl&auml;che anlegen. Behilflich ist Ihnen dabei der Editor: Im linken Kombinationsfeld hat er mittlerweile einen Eintrag namens evtNummerieren hinzugef&uuml;gt, dessen Auswahl automatisch eine Ereigniseigenschaft anlegt. Erg&auml;nzen Sie diese wie in folgendem Beispiel und sagen Sie das zweite Mal in diesem Beitrag &#8222;Hello World&#8220;:<\/p>\n<pre>Private Sub evtNummerieren_Click(ByVal _    CommandBarControl As Object, _    handled As Boolean, CancelDefault _    As Boolean)\n    MsgBox \"Hello World\"\nEnd Sub<\/pre>\n<p>An dieser Stelle f&uuml;hrt das &ouml;ffnen von Access und dem VBA-Editor zum Bild aus Abb. 6.<\/p>\n<p><IMG height=\"167\" src=\"..\/fileadmin\/_temp_\/{01EF284D-8E62-4FDF-8C3C-20710CD56061}\/pic006.png\" width=\"413\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b>Abb. 6: Die neue Men&uuml;leiste inklusive Schaltfl&auml;che<\/b><\/p>\n<h3>Hinweis<\/h3>\n<p>Wenn Sie das Projekt mit F5 starten, anstatt direkt die DLL zu erzeugen, erscheint nach dem Klicken auf die neue Schaltfl&auml;che im VBA-Editor das Meldungsfenster im Visual Studio. Nicht, dass Sie sich wundern, wenn nach dem ersten Probeklick gar nichts mehr geht &#8211; wechseln Sie einfach zum Visual Studio und schlie&szlig;en Sie das Meldungsfenster. <\/p>\n<p>F&uuml;r weitere Schaltfl&auml;chen ben&ouml;tigen Sie jeweils die beiden Deklarationsanweisungen aus dem Kopf des Moduls &#8211; nat&uuml;rlich mit entsprechend angepassten Bezeichnungen &#8211; sowie eine angepasste Kopie der f&uuml;nften bis neunten Zeile der Prozedur AddinInstance_OnConnection f&uuml;r die jede Schaltfl&auml;che.<\/p>\n<p>Selbstverst&auml;ndlich m&uuml;ssen Sie f&uuml;r eine sinnvolle Funktion noch die Anweisung zum Anzeigen des Meldungsfensters durch entsprechenden Code ersetzen. Und wie dieser aussieht, erfahren Sie in den folgenden beiden Kapiteln.<\/p>\n<p>Bevor man eine Routine zum Nummerieren der Zeilen eines Moduls entwickeln kann, muss man genau wissen, welche Zeilen nummeriert werden sollen und welche nicht &#8211; besser gesagt: welche Zeilen &uuml;berhaupt nummeriert werden d&uuml;rfen oder m&uuml;ssen.<\/p>\n<p>Genau genommen werden f&uuml;r die Verwendung mit der Fehlerbehandlung nur die Zeilen ben&ouml;tigt, in denen auch Fehler auftreten k&ouml;nnen, also solche, die ausf&uuml;hrbaren Code enthalten. Herauszufinden, welche Zeile ausf&uuml;hrbaren Code enth&auml;lt, k&ouml;nnte sich aber als sehr schwierig erweisen. Also vielleicht lieber den Hebel am anderen Ende ansetzen und testen, welchen Zeilen der Compiler eine Zeilennummer g&ouml;nnt <\/p>\n<p>Zum Gl&uuml;ck probieren Autoren manchmal einiges aus, bevor sie einen Beitrag schreiben. In dem Fall hilft der goldene Mittelweg: Ausf&uuml;hrbaren Code findet man nur innerhalb von Properties, Subs und Functions. Innerhalb dieser Strukturen gibt es ein paar Stellen, an denen Nummerierungen nicht erlaubt sind &#8211; beispielsweise bei Fortsetzungen umbrochener Zeilen oder in der ersten Zeile eines Select Case-Konstrukts.<\/p>\n<p>Die Prozedur aus Quellcode 3 wird dem gerecht. Sie &uuml;berpr&uuml;ft zun&auml;chst, ob &uuml;berhaupt ein Modul aktiviert ist (If oVBE.ActivecodePane Is Nothing) und gibt anderenfalls eine entsprechende Meldung aus. Liegt ein Modul vor, erzeugt die Prozedur mit der Objektvariablen cdPane einen Verweis darauf; ein weiterer Verweis namens mdl dient im Anschluss dem Zugriff auf das enthaltene Modul.<\/p>\n<pre>Private Sub evtNummerieren_Click(ByVal CommandBarControl As Object, _    handled As Boolean, CancelDefault As Boolean)\n    Dim cdPane As VBIDE.CodePane\n    Dim mdl As VBIDE.CodeModule\n    Dim bolNummerieren As Boolean\n    Dim bolJetztNicht As Boolean\n    Dim bolNaechsteNicht As Boolean\n    Dim strZeile As String\n    Dim i As Integer\n    If oVBE.ActiveCodePane Is Nothing Then\n        MsgBox \"Bitte &ouml;ffnen Sie zun&auml;chst das gew&uuml;nschte Modul.\"\n        Exit Sub\n    End If\n    Set cdPane = oVBE.ActiveCodePane\n    Set mdl = cdPane.CodeModule\n    For i = 1 To mdl.CountOfLines\n        strZeile = Trim(mdl.Lines(i, 1))\n        If Left(strZeile, 10) = \"Public Sub\" Or Left(strZeile, 11) = \"Private Sub\" _\n            Or Left(strZeile, 3) = \"Sub\" Or Left(strZeile, 15) = \"Public Function\" _\n            Or Left(strZeile, 16) = \"Private Function\" Or Left(strZeile, 8) _            = \"Function\" Or Left(strZeile, 15) = \"Public Property\" _            Or Left(strZeile, 16) = \"Private Property\" Then\n            bolNummerieren = True\n            bolJetztNicht = True\n        Else\n            bolJetztNicht = False\n        End If\n        If bolNaechsteNicht = True Then\n            bolJetztNicht = True\n        End If\n        If Left(strZeile, 12) = \"End Function\" Or Left(strZeile, 7) = \"End Sub\" _\n            Or Left(strZeile, 12) = \"End Property\" Then\n            bolNummerieren = False\n            bolJetztNicht = True\n        End If\n        bolNaechsteNicht = Right(strZeile, 1) = \"_\" \n            Or Left(strZeile, 11) = \"Select Case\"\n        If bolNummerieren = True And bolJetztNicht = False Then\n            mdl.ReplaceLine i, i & \"0 \" & mdl.Lines(i, 1)\n        End If\n    Next i\nEnd Sub<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<p>Nun folgt der Kern der Routine: <\/p>\n<p>Eine For Next-Schleife durchl&auml;uft alle Zeilen des Moduls und stellt beim ersten Auftreten eines Prozedurkopfes die Variable bolNummerieren auf True ein. Findet die Routine das Ende einer Prozedur, setzt sie den Wert dieser Variablen wieder auf False.<\/p>\n<pre>Private Sub evtEntnummerieren_Click(ByVal _    CommandBarControl As Object, handled As Boolean, _    CancelDefault As Boolean)\n    Dim cdPane As VBIDE.CodePane\n    Dim mdl As VBIDE.CodeModule\n    Dim strZeile As String\n    Dim i As Integer\n    Dim j As Integer\n    If oVBE.ActiveCodePane Is Nothing Then\n        MsgBox \"No active code pane!\"\n        Exit Sub\n    End If\n    Set cdPane = oVBE.ActiveCodePane\n    Set mdl = cdPane.CodeModule\n    Dim pos As Long\n    For i = 1 To mdl.CountOfLines\n        strZeile = mdl.Lines(i, 1)\n        pos = 0\n        j = 1\n        Do While IsNumeric(Mid(strZeile, j, 1))\n            pos = pos + 1\n            j = j + 1\n        Loop\n        If pos &gt; 0 Then\n            mdl.ReplaceLine i, Mid(strZeile, pos + 2)\n        End If\n    Next i\nEnd Sub<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<p>Der Rest ist &#8211; mit zwei Ausnahmen &#8211; unkompliziert: Solange die Variable bolNummerieren auf True steht, setzt die Routine eine fortlaufende Nummer in Zehnerschritten vor die aktuelle Zeile. Ausnahmen sind Zeilen, die eine vorherige Zeile fortsetzen oder unmittelbar auf den Kopf einer Select Case-Konstruktion folgen.<\/p>\n<h3>Nummerierung entfernen<\/h3>\n<p>Wenn die Nummerierung in Zehnerschritten nicht mehr ausreicht, weil nach einiger Zeit hier und da einige Zeilen hinzugekommen sind, sollte man die Nummerierung einfach anpassen k&ouml;nnen. Das erfolgt in zwei Schritten: Mit der in Quellcode 4 abgebildeten Routine entfernen Sie die Nummerierung aus dem gew&uuml;nschten Modul und erneuern sie mit der soeben vorgestellten.<\/p>\n<p>Die Prozedur zum Entfernen von Zeilennummern ist recht einfach gestrickt. Sie entfernt einfach alle numerischen Zeichen zu Beginn einer jeden Zeile.<\/p>\n<p>Eigentlich trifft der Name Fehlerbehandlungs-Assistent nicht ganz den Punkt, denn er behandelt keine Fehler, sondern f&uuml;gt einer Routine eine Fehlerbehandlung hinzu.<\/p>\n<p>Dabei macht die Prozedur umfangreichen Gebrauch von den Methoden und Eigenschaften des CodeModule-Objekts &#8211; was einiges an Arbeit erspart, wenn man nicht mit den &uuml;blichen Zeichenkettenfunktionen an die zu bearbeitende Routine herangehen m&ouml;chte.<\/p>\n<p>Die Prozedur (s. Quellcode 5) &uuml;berpr&uuml;ft nach dem Deklarationsteil zun&auml;chst, ob &uuml;berhaupt ein Modul ge&ouml;ffnet ist, und falls ja, ob die Einf&uuml;gemarke sich auf einer Sub-Prozedur, einer Function oder einer Property befindet. Dazu ermittelt sie die aktuelle Position der Einf&uuml;gemarke (cdPane.GetSelection &#8230;) und verwendet die Eigenschaft ProcOfLine des aktuellen Moduls, um den Namen der zu erg&auml;nzenden Routine zu ermitteln.<\/p>\n<p>Als N&auml;chstes bestimmt die Prozedur die Art der Routine. Dazu liest sie deren komplette erste Zeile ein, pr&uuml;ft auf Vorkommen von Sub, Function und Property und stellt die Eigenschaft lngProzedur auf den entsprechenden Wert ein.<\/p>\n<pre>Private Sub evtFehlerbehandlung_Click(ByVal CommandBarControl As Object, _    handled As Boolean, CancelDefault As Boolean)\n    Dim cdPane As VBIDE.CodePane\n    Dim mdl As VBIDE.CodeModule\n    ''Deklaration der String- und Long-Variablen aus Platzgr&uuml;nden ausgespart\n    Dim lngProzedurart As Prozedurart\n    If oVBE.ActiveCodePane Is Nothing Then\n        MsgBox \"Bitte &ouml;ffnen Sie zun&auml;chst das gew&uuml;nschte Modul.\": Exit Sub\n    End If\n    Set cdPane = oVBE.ActiveCodePane\n    Set mdl = cdPane.CodeModule\n    cdPane.GetSelection lngStartLine, lngStartColumn, lngEndLine, lngEndColumn\n    strProcName = mdl.ProcOfLine(lngStartLine, lngProcKind)\n    If strProcName = \"\" Then\n        MsgBox \"Bitte positionieren Sie die Einf&uuml;gemarke auf der gew&uuml;nschten Routine.\"\n        Exit Sub\n    End If\n    lngProcStartLine = mdl.ProcBodyLine(strProcName, lngProcKind)\n    If InStr(1, mdl.Lines(lngProcStartLine, 1), \"Function\") &gt; 0 Then\n        lngProzedurart = Funktion\n        ''weitere Pr&uuml;fungen auf ''Sub'' und ''Property'' aus Platzgr&uuml;nden ausgespart\n    Else\n        MsgBox \"Die Prozedurart ist nicht definiert.\"\n        Exit Sub\n    End If\n    lngProcLines = mdl.ProcCountLines(strProcName, lngProcKind)\n    lngStartLineFind = lngProcStartLine\n    lngStartColumnFind = -1\n    lngEndLineFind = lngProcStartLine + lngProcLines\n    lngEndColumnFind = -1\n    If mdl.Find(\"On Error\", lngStartLineFind, lngStartColumnFind, lngEndLineFind, _        lngEndColumnFind) Then\n        MsgBox \"Es ist bereits eine Fehlerbehandlung vorhanden.\": Exit Sub\n    End If\n    If Right(Trim(mdl.Lines(lngProcStartLine, 1)), 1) = \"_\" Then\n        lngStartLineFind = lngStartLineFind + 2\n    Else\n        lngStartLineFind = lngStartLineFind + 1\n    End If\n    Do\n        If Right(Trim(mdl.Lines(lngStartLineFind, 1)), 1) = \"_\" Then\n            lngStartLineFind = lngStartLineFind + 2\n        ElseIf Left(Trim(mdl.Lines(lngStartLineFind, 1)), 1) = Chr(39) Then\n            lngStartLineFind = lngStartLineFind + 1\n        Else\n            Exit Do\n        End If\n    Loop<\/pre>\n<p><b>Quellcode 5 (erster Teil)<\/b><\/p>\n<p>Im folgenden Schritt durchsucht die Prozedur die betroffene Routine nach bereits vorhandenen Fehlerbehandlungen und bricht mit einer entsprechenden Meldung ab, wenn irgendwo in der Routine die On Error-Anweisung auftaucht.<\/p>\n<p>Ist das nicht der Fall, kann es losgehen: Die Prozedur ermittelt zun&auml;chst die Nummer der ersten Zeile nach der ersten Zeile der Routine. Das ist nicht mit einem Einzeiler getan, da die erste Zeile ja durchaus umbrochen sein kann. In die Zeile, die auf die so gefundene erste Zeile folgt, platziert die Prozedur dann den Beginn der Fehlerbehandlung (On Error Goto &lt;Prozedurname&gt;_Err).<\/p>\n<pre>    mdl.InsertLines lngStartLineFind, \"    On Error Goto \" & strProcName & \"_Err\"\n    strText = \"   ''Fehlerbehandlung\" & vbCrLf\n    strText = strText & strProcName & \"_Exit:\" & vbCrLf\n    strText = strText & \"    ''Restarbeiten\" & vbCrLf\n    Select Case lngProzedurart\n        Case Funktion\n            strText = strText & \"    Exit Function\" & vbCrLf\n        Case SubProzedur\n            strText = strText & \"    Exit Sub\" & vbCrLf\n        Case Property\n            strText = strText & \"    Exit Property\" & vbCrLf\n    End Select\n    strText = strText & strProcName & \"_Err:\" & vbCrLf\n    strText = strText & \"    Call GetError(\"\"\" & Mid(oVBE.ActiveWindow.Caption, 1, Len(oVBE.ActiveWindow.Caption) - 6) & \"\"\", \"\"\" & strProcName & \"\"\", Erl, \"\"Bemerkungen: .\/.\"\")\" & vbCrLf\n    strText = strText & \"    GoTo \" & strProcName & \"_Exit\"\n    mdl.InsertLines lngEndLineFind - 1, strText\nEnd Sub<\/pre>\n<p><b>Quellcode 5 (Fortsetzung)<\/b><\/p>\n<p>Bleibt nur noch, die eigentliche Fehlerbehandlung zusammenzusetzen und vor der letzten Zeile einzuf&uuml;gen. Die Fehlerbehandlung sieht dabei folgenderma&szlig;en aus, wobei die Texte in spitzen Klammern entsprechend der jeweiligen Prozedur ersetzt werden:<\/p>\n<pre>''Fehlerbehandlung\n&lt;Prozedurname&gt;_Exit:\n''Restarbeiten\nExit &lt;Prozedurart&gt;\n&lt;Prozedurname&gt;_Err:\n    Call GetError(\"&lt;Modulname&gt;\", _        \"&lt;Prozedurname&gt;\", Erl, _        \"Bemerkungen: .\/.\")\n    GoTo &lt;Prozedurname&gt;_Exit<\/pre>\n<p>Bleibt dem Entwickler noch, die Restarbeiten an der entsprechenden Stelle einzuf&uuml;gen und gegebenenfalls den Aufruf der GetError-Funktion anzupassen.<\/p>\n<h3>Hinweis<\/h3>\n<p>Weitere Informationen zur GetError-Funktion und deren Anwendung finden Sie im Beitrag Professionelle Fehlerbehandlung in dieser Ausgabe von Access im Unternehmen. <\/p>\n<p>Die vorgestellte L&ouml;sung kratzt nur an der Oberfl&auml;che dessen, was mit der beschriebenen Technik m&ouml;glich ist. Eine weitere Anwendungsm&ouml;glichkeit w&auml;re die Verwendung einer Funktion, die Property-Prozeduren auf Basis eines Variablennamens erstellt. Wenn man mit Klassenmodulen arbeitet und die Klasse einige nach au&szlig;en zug&auml;ngliche Variablen enth&auml;lt, kann dies eine Menge Arbeit ersparen.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>VBAExtensions.zip<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/9656D5B3-D7D4-4BA9-AD74-28D861F4FAAD\/aiu_237.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer hat sich nicht schon einmal die eine oder andere, vielleicht ganz individuelle Erweiterung der Entwicklungsumgebung von Access gew&uuml;nscht? Klar, wie man sich einen Assis&not;ten&not;ten f&uuml;r bestimmte Aufgaben bastelt, ist in der Fachliteratur hinl&auml;nglich erkl&auml;rt, aber den VBA-Editor mit zus&auml;tzlichen Funktionen versehen? Dieser Beitrag zeigt, wie Sie mit etwas Fremdhilfe von VB eine .dll-Datei entwi-ckeln, die viele W&uuml;nsche erf&uuml;llen kann.<\/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":[662004,66052004,44000028,44000027],"tags":[],"class_list":["post-55000237","post","type-post","status-publish","format-standard","hentry","category-662004","category-66052004","category-Ergonomie_und_Benutzeroberflaeche","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Erweitern der VBA-Entwicklungsumgebung - 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_der_vbaentwicklungsumgebung\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Erweitern der VBA-Entwicklungsumgebung\" \/>\n<meta property=\"og:description\" content=\"Wer hat sich nicht schon einmal die eine oder andere, vielleicht ganz individuelle Erweiterung der Entwicklungsumgebung von Access gew&uuml;nscht? Klar, wie man sich einen Assis&not;ten&not;ten f&uuml;r bestimmte Aufgaben bastelt, ist in der Fachliteratur hinl&auml;nglich erkl&auml;rt, aber den VBA-Editor mit zus&auml;tzlichen Funktionen versehen? Dieser Beitrag zeigt, wie Sie mit etwas Fremdhilfe von VB eine .dll-Datei entwi-ckeln, die viele W&uuml;nsche erf&uuml;llen kann.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-10T16:15:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-19T08:19:09+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg05.met.vgwort.de\/na\/271fc76d671046638fdc4191c02ce4b0\" \/>\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=\"14\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_der_vbaentwicklungsumgebung\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Erweitern der VBA-Entwicklungsumgebung\",\"datePublished\":\"2023-02-10T16:15:49+00:00\",\"dateModified\":\"2024-02-19T08:19:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/\"},\"wordCount\":2500,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/271fc76d671046638fdc4191c02ce4b0\",\"articleSection\":[\"2004\",\"5\\\/2004\",\"Ergonomie und Benutzeroberfl\u00e4che\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/\",\"name\":\"Erweitern der VBA-Entwicklungsumgebung - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/271fc76d671046638fdc4191c02ce4b0\",\"datePublished\":\"2023-02-10T16:15:49+00:00\",\"dateModified\":\"2024-02-19T08:19:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/271fc76d671046638fdc4191c02ce4b0\",\"contentUrl\":\"http:\\\/\\\/vg05.met.vgwort.de\\\/na\\\/271fc76d671046638fdc4191c02ce4b0\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/erweitern_der_vbaentwicklungsumgebung\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Erweitern der VBA-Entwicklungsumgebung\"}]},{\"@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 der VBA-Entwicklungsumgebung - 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_der_vbaentwicklungsumgebung\/","og_locale":"de_DE","og_type":"article","og_title":"Erweitern der VBA-Entwicklungsumgebung","og_description":"Wer hat sich nicht schon einmal die eine oder andere, vielleicht ganz individuelle Erweiterung der Entwicklungsumgebung von Access gew&uuml;nscht? Klar, wie man sich einen Assis&not;ten&not;ten f&uuml;r bestimmte Aufgaben bastelt, ist in der Fachliteratur hinl&auml;nglich erkl&auml;rt, aber den VBA-Editor mit zus&auml;tzlichen Funktionen versehen? Dieser Beitrag zeigt, wie Sie mit etwas Fremdhilfe von VB eine .dll-Datei entwi-ckeln, die viele W&uuml;nsche erf&uuml;llen kann.","og_url":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-02-10T16:15:49+00:00","article_modified_time":"2024-02-19T08:19:09+00:00","og_image":[{"url":"http:\/\/vg05.met.vgwort.de\/na\/271fc76d671046638fdc4191c02ce4b0","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Erweitern der VBA-Entwicklungsumgebung","datePublished":"2023-02-10T16:15:49+00:00","dateModified":"2024-02-19T08:19:09+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/"},"wordCount":2500,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/271fc76d671046638fdc4191c02ce4b0","articleSection":["2004","5\/2004","Ergonomie und Benutzeroberfl\u00e4che","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/","url":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/","name":"Erweitern der VBA-Entwicklungsumgebung - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/#primaryimage"},"thumbnailUrl":"http:\/\/vg05.met.vgwort.de\/na\/271fc76d671046638fdc4191c02ce4b0","datePublished":"2023-02-10T16:15:49+00:00","dateModified":"2024-02-19T08:19:09+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/#primaryimage","url":"http:\/\/vg05.met.vgwort.de\/na\/271fc76d671046638fdc4191c02ce4b0","contentUrl":"http:\/\/vg05.met.vgwort.de\/na\/271fc76d671046638fdc4191c02ce4b0"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/erweitern_der_vbaentwicklungsumgebung\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Erweitern der VBA-Entwicklungsumgebung"}]},{"@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\/55000237","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=55000237"}],"version-history":[{"count":1,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000237\/revisions"}],"predecessor-version":[{"id":88075295,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000237\/revisions\/88075295"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}