{"id":55000621,"date":"2008-08-01T00:00:00","date_gmt":"2021-02-11T21:21:56","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=621"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Debugging_im_VBAEditor","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/","title":{"rendered":"Debugging im VBA-Editor"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/069e584e61974b2d95735fa2a56a5888\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wann immer ein Fehler auftritt, dessen Ursache nicht bekannt ist, oder eine Anwendung unerwartete Ergebnisse liefert, ist es Zeit f&uuml;rs Debugging (zu deutsch: austesten, entwanzen, Fehler suchen und beseitigen). Unter Access spielt sich dies zum gr&ouml;&szlig;ten Teil in der VBA-Entwicklungsumgebung ab. Wir erl&auml;utern, wie Debugging funktioniert, welche Werkzeuge die gute alte VBA-IDE liefert und welche Tricks Sie einsetzen k&ouml;nnen.<\/b><\/p>\n<p>Den VBA-Editor kann man in seiner jetzigen Form fast schon als altehrw&uuml;rdig einstufen. An ihm perlt m&uuml;helos ab, was die Benutzer anderer, modernerer Entwicklungsumgebungen auf Trab h&auml;lt: n&auml;mlich st&auml;ndige Innovationen.<\/p>\n<p>Mit dem Wechsel zu Access 2007 gab es genau eine &auml;nderung, die den meisten Entwicklern noch nicht einmal aufgefallen sein d&uuml;rfte: F&uuml;r den Einsatz des Mausrades zum Scrollen durch die Zeilen eines Moduls braucht man nun kein separates Tool mehr. Falls Sie Access 2007 verwenden und dieses Tool trotzdem installiert haben: Sie k&ouml;nnen es von der Festplatte werfen.<\/p>\n<p>Davon abgesehen ist auf den VBA-Editor schon Verlass: Er bildet zusammen mit Access ein eingespieltes Team und f&auml;llt eher durch Best&auml;ndigkeit denn durch stetige Weiterentwicklung auf.<\/p>\n<p>Das ist aber kein Grund, ihn nicht einmal genauer unter die Lupe zu nehmen und zu zeigen, wie Sie Fehlern und Fehlverhalten mit seiner Hilfe auf die Schliche kommen. Immerhin bietet der VBA-Editor einige M&ouml;glichkeiten zum Debuggen des enthaltenen Codes.<\/p>\n<p><b>Gr&uuml;nde f&uuml;r das Debugging<\/b><\/p>\n<p>Eigentlich ist es ja so: Sie programmieren etwas, probieren es aus und entweder es funktioniert oder nicht. Falls nicht, m&ouml;chten Sie nat&uuml;rlich gern herausfinden, woran dies liegt. Im besten Fall tritt einfach irgendwo ein Fehler auf und der VBA-Editor st&ouml;&szlig;t Sie mit der Nase darauf, indem er eine entsprechende Meldung ausgibt und die fehlerhafte Zeile gelb hervorhebt.<\/p>\n<p>Mit etwas Gl&uuml;ck l&auml;sst sich die Herkunft des Fehlers in unmittelbarer Umgebung entdecken; falls nicht, ist eine umfangreichere Analyse angezeigt. Wir sprechen hier nicht von Kompilier- oder Syntaxfehlern, sondern von Laufzeitfehlern, die oft bei der Verarbeitung falscher oder inkompatibler Daten auftreten. Noch unangenehmer sind Fehler, die nicht in einer Fehlermeldung resultieren, sondern schlicht falsche oder unerwartete Antworten der Anwendung erzeugen.<\/p>\n<p><b>Arten von Debugging<\/b><\/p>\n<p>Dieser Beitrag unterscheidet zwei Arten von Debugging: Die erste enth&auml;lt alle Aktivit&auml;ten, die mit der &auml;nderung von Code zum Zwecke des Debuggings einhergehen, die zweite besch&auml;ftigt sich mit dem &#8222;ber&uuml;hrungslosen&quot; Debugging: Hier wird der eigentliche Code nicht angefasst, sondern durch das Setzen von Haltepunkten und externes Abfragen von Informationen etwa &uuml;ber das Direktfenster oder das &Uuml;berwachungsfenster analysiert.<\/p>\n<p>Bevor wir diese beiden Arten vorstellen, schauen wir uns kurz die Grundz&uuml;ge an, das manuelle Debuggen von Code ohne weitere Hilfsmittel.<\/p>\n<p><b>Code manuell durchlaufen<\/b><\/p>\n<p>Um Code manuell zu durchlaufen, positioniert man einfach die Einf&uuml;gemarke auf der Prozedur, die man durchlaufen m&ouml;chte, und w&auml;hlt entweder den Men&uuml;punkt <b>Debuggen|Einzelschritt <\/b>aus oder dr&uuml;ckt gleich auf die Taste <b>F8<\/b>.<\/p>\n<p>Es erscheinen dann wie in Bild 1 ein gelber Pfeil und eine gelbe Markierung der aktuellen Zeile. Das Debuggen kann beginnen &#8211; weiteres Dr&uuml;cken der Schaltfl&auml;che <b>F8 <\/b>arbeitet den Code schrittweise ab, wobei die Deklarationszeilen &uuml;bergangen werden. <b>F8 <\/b>springt auch zu Prozeduren, welche die aktuelle Prozedur aufruft.<\/p>\n<p>Unter Umst&auml;nden ist das nicht gew&uuml;nscht, weil die von dort aufgerufene Prozedur eine Menge Code enth&auml;lt, den Sie in Ihrer Untersuchung nicht ber&uuml;cksichtigen m&ouml;chten. In diesem Fall verwenden Sie die Tastenkombination <b>Umschalt + F8<\/b>. Damit durchlaufen Sie nur die in der aktuellen Prozedur enthaltenen Zeilen. Unterroutinen werden nicht ber&uuml;cksichtigt.<\/p>\n<p>Wenn Sie sich einmal in einer Unterroutine befinden und feststellen, dass es hier keine relevanten Informationen zu holen gibt, k&ouml;nnen Sie mit <b>Strg + Umschalt + F8 <\/b>zum Ende der Routine springen. Sie landen dann in der aufrufenden Routine, und zwar in der ersten Zeile hinter dem Aufruf.<\/p>\n<p>Fehlt nur noch eine Taste, die den Ablauf ohne weitere Zwischenschritte fortsetzt. Mit dieser k&ouml;nnen Sie auch komplette Routinen vom Start weg einfach aufrufen. Es handelt sich um die Taste <b>F5<\/b>.<\/p>\n<p><b>Haltepunkte<\/b><\/p>\n<p>Manchmal m&ouml;chte man sich nicht m&uuml;hsam per Einzelschritt bis zur interessanten Stelle im Code vorarbeiten, sondern direkt dorthin springen. Daf&uuml;r gibt es Haltepunkte. Sie setzen einen Haltepunkt in eine Zeile, indem Sie die Einf&uuml;gemarke in der Zeile positionieren und die Taste <b>F9 <\/b>beziehungsweise den Men&uuml;befehl <b>Debuggen|Haltepunkte ein\/aus <\/b>verwenden.<\/p>\n<p>Zum Entfernen aller Haltepunkte dienen der Men&uuml;befehl <b>Debuggen|Alle Haltepunkte l&ouml;schen <\/b>oder die Tastenkombination <b>Strg + Umschalt + F9<\/b>.<\/p>\n<p>Haltepunkte k&ouml;nnen Sie auch mit der Maus setzen. Dazu klicken Sie einfach auf der H&ouml;he der betroffenen Zeile auf den links davon befindlichen grauen Balken.<\/p>\n<p><b>Zur&uuml;ck nach oben<\/b><\/p>\n<p>Manchmal m&ouml;chte man sich im Code nicht vor-, sondern zur&uuml;ckbewegen &#8211; beispielsweise um einer Variablen testweise einen neuen Wert per Direktfenster zuzuweisen und eine Anweisung erneut zu testen, ohne direkt die ganze Prozedur neu zu starten.<\/p>\n<p>Dazu ziehen Sie einfach den gelben Pfeil mit der Maus an die gew&uuml;nschte Stelle (siehe Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic003_opt.jpeg\" alt=\"pic003.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Per Drag and Drop des gelben Pfeils k&ouml;nnen Sie Zeilen wiederholt ausf&uuml;hren oder auch &uuml;berspringen.<\/span><\/b><\/p>\n<p>Alternativ positionieren Sie die Einf&uuml;gemarke dort, wo VBA den Code fortsetzen soll, und bet&auml;tigen die Tastenkombination <b>Strg + F9<\/b>. <\/p>\n<p>Mit beiden Varianten k&ouml;nnen Sie &uuml;brigens nicht nur zur&uuml;ck, sondern auch vorw&auml;rts springen und so die Ausf&uuml;hrung der dazwischen liegenden Zeilen unterbinden.<\/p>\n<p><b>Debugging per Code<\/b><\/p>\n<p>Wenn Sie sicherstellen m&ouml;chten, dass ein bestimmter Codeteil durchlaufen wird, oder feststellen m&ouml;chten, welchen Wert eine Variable zu einem bestimmten Zeitpunkt hat, k&ouml;nnen Sie einfach eine Zeile zum Code hinzuf&uuml;gen, welche die ben&ouml;tigte Information liefert.<\/p>\n<p>Dies geschieht entweder durch den Einsatz der <b>MsgBox<\/b>&#8211; oder der <b>Debug.Print<\/b>-Anweisung. Eine weitere Alternative ist die <b>Debug.Assert<\/b>-Methode, die das Anhalten des Codes unter bestimmten Bedingungen erlaubt.<\/p>\n<p><b>Ausgabe per MsgBox<\/b><\/p>\n<p>Die Entscheidung, ob man zu Debugging-Zwecken die <b>MsgBox<\/b>&#8211; oder die <b>Debug.Print<\/b>-Anweisung einsetzt, h&auml;ngt von den pers&ouml;nlichen Vorlieben, vom Umfang der ben&ouml;tigten Ausgaben und weiteren Faktoren ab. <\/p>\n<p>Wenn Sie nur an ein oder zwei Stellen Informationen ausgeben m&ouml;chten, ist ein Meldungsfenster sicher in Ordnung. Wenn Sie dieses jedoch in eine Schleife mit vielen Durchl&auml;ufen einbauen, werden Sie schnell vom st&auml;ndigen Wegklicken der Meldungen genervt sein. Hier ist die Arbeit mit der <b>Debug.Print<\/b>-Anweisung doch wesentlich entspannter: Sie brauchen die Routine einfach nur durchlaufen zu lassen und k&ouml;nnen sich die gesuchten Informationen dann bequem im Direktfenster ansehen (das man &uuml;brigens am schnellsten mit <b>Strg + G <\/b>einblendet, falls es nicht ohnehin schon sichtbar ist).<\/p>\n<p><b>Debug.Print<\/b><\/p>\n<p>Die <b>Debug.Print<\/b>-Anweisung zeigt den angegebenen Ausdruck im Direktfenster des VBA-Editors an. Die einfachste Variante ist, einen einzelnen Ausdruck auszugeben.<\/p>\n<p><!--30percent--><\/p>\n<p>Die folgenden Zeilen bewirken die Ausgabe der Zeichenfolge <b>Hallo<\/b>:<\/p>\n<pre>Dim str As String\r\nstr = &quot;Hallo&quot;\r\nDebug.Print str<\/pre>\n<p>Mehrere Werte lassen sich mit dem Kaufmanns-Und verkn&uuml;pfen:<\/p>\n<pre>Debug.Print rst!Vorname &amp; &quot; &quot; &amp; rst!Nachname\r\nAndr&eacute; Minhorst<\/pre>\n<p>Da es im Direktfenster keine Sch&ouml;nheitspreise zu gewinnen gibt, tun es auch Tabulatoren, die man durch Trennen der gew&uuml;nschten Ausdr&uuml;cke durch Kommata erreicht:<\/p>\n<pre>Debug.Print rst!Vorname, rst!Nachname\r\nAndr&eacute; Minhorst<\/pre>\n<p>Sie k&ouml;nnen auch die Ausgabe mehrerer aufeinanderfolgender <b>Debug.Print<\/b>-Anweisungen in einer Zeile ausgeben. Dazu f&uuml;gen Sie der <b>Debug.Print<\/b>-Anweisung, die mit der folgenden fortgesetzt werden soll, einfach ein Semikolon an:<\/p>\n<pre>Debug.Print &quot;Andr&eacute;&quot;;\r\nDebug.Print &quot;Minhorst&quot;<\/pre>\n<p>Dies ergibt:<\/p>\n<pre>Andr&eacute;Minhorst<\/pre>\n<p>Wenn sich zwischen den Ausdr&uuml;cken beispielsweise ein Tabulator befinden soll, erg&auml;nzen Sie vor dem Semikolon ein Komma. Das kann wie folgt aussehen:<\/p>\n<pre>Debug.Print &quot;Andr&eacute;&quot;, ;\r\nDebug.Print &quot;Minhorst&quot;<\/pre>\n<p>Wenn Sie mehrere Ausdr&uuml;cke ohne Leerzeichen oder Tabulator zusammenf&uuml;hren m&ouml;chten, k&ouml;nnen Sie diese einfach hintereinander angeben:<\/p>\n<pre>Debug.Print rst!Vorname rst!Nachname<\/pre>\n<p><b>Debug.Assert<\/b><\/p>\n<p>Weitgehend unbeachtet, aber wertvoll ist die <b>Debug.Assert<\/b>-Anweisung. Stellen Sie sich vor, Sie m&ouml;chten den Programmablauf an einer Stelle unter bestimmten Bedingungen unterbrechen, um sich dort umzusehen. Manche Programmierer bauen dann etwa das Konstrukt aus Bild 3 ein und setzen einen entsprechenden Haltepunkt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic001_opt.jpeg\" alt=\"pic001.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Dieses Konstrukt sorgt im Programmablauf f&uuml;r einen Halt an der gew&uuml;nschten Stelle.<\/span><\/b><\/p>\n<p>Das ist definitiv zu viel Aufwand und l&auml;sst sich erheblich leichter l&ouml;sen, n&auml;mlich so:<\/p>\n<pre>Public Sub TestAssert()\r\n    Dim intZaehler As Integer\r\n    For intZaehler = 1 To 1000\r\n        &apos;tu irgendwas\r\n        Debug.Assert Not intZaehler = 500\r\n    Next intZaehler\r\nEnd Sub<\/pre>\n<p>Auch diese Routine h&auml;lt bei <b>intZaehler = 500 <\/b>automatisch an, und das mit nur einer Zeile und ohne explizites Setzen eines Haltepunktes. Zu beachten ist, dass <b>Debug.Assert <\/b>einen bool&apos;schen Ausdruck erwartet und nur dann den laufenden Code anh&auml;lt, wenn dieser Ausdruck den Wert <b>False <\/b>aufweist &#8211; daher die Formulierung <b>Not intZaehler = 500<\/b>.<\/p>\n<p><b>Bedingtes Debugging<\/b><\/p>\n<p>Eine der einfachsten Arten, w&auml;hrend des Programmablaufs zu pr&uuml;fen, ob bestimmte Codeabschnitte &uuml;berhaupt erreicht werden oder welche Werte Variablen zu einem bestimmten Zeitpunkt haben, ist das Einf&uuml;gen der <b>MsgBox<\/b>-Anweisung in den Code. Wie bereits weiter oben erw&auml;hnt, kann das st&auml;ndige Erscheinen von Meldungsfenstern den Fluss aber schon sehr st&ouml;ren.<\/p>\n<p>Wenn Sie dennoch mit der <b>MsgBox<\/b>-Funktion arbeiten m&ouml;chten, aber keine Lust haben, alle f&uuml;r das Debugging vorhandenen Meldungsfenster zu entfernen und wieder einzuf&uuml;gen, k&ouml;nnen Sie diese mit der bedingten Kompilierung ein- und ausschalten.<\/p>\n<p>Die beiden Elemente der bedingten Kompilierung sind eine Konstante, die einen Wert festlegt, sowie ein <b>If&#8230;Then<\/b>-Konstrukt mit spezieller Syntax und einigen Sonderregeln.<\/p>\n<p>Ein einfaches Beispiel w&auml;re das folgende. Die Konstante <b>bolTest <\/b>legt fest, ob man sich im Debug-Betrieb befindet oder nicht &#8211; in diesem Fall ja:<\/p>\n<pre>#Const bolDebug = True<\/pre>\n<p>Die folgende Routine zeigt, wie man eine <b>MsgBox<\/b>-Anweisung einbettet, damit diese nur f&uuml;r <b>bolDebug = True <\/b>angezeigt wird:<\/p>\n<pre>Public Sub TestBedingteKompilierung()\r\n    #If bolDebug Then\r\n        MsgBox &quot;Ich bin im Debugbetrieb!&quot;\r\n    #End If\r\nEnd Sub<\/pre>\n<p>Wenn Sie diese Meldung nicht mehr erhalten m&ouml;chten, stellen Sie <b>bolDebug<\/b> auf <b>False <\/b>ein:<\/p>\n<pre>#Const bolDebug = False<\/pre>\n<p>Es erscheint nun kein Meldungsfenster mehr. M&ouml;glicherweise fragen Sie sich, was denn nun diese Vorgehensweise von der mit einer herk&ouml;mmlichen <b>If&#8230;Then<\/b>-Anweisung unterscheidet. Das ist einfach: Wenn Sie die Anwendung kompilieren, werden die Elemente der bedingten Kompilierung und die in den <b>If&#8230;Then<\/b>-Konstrukten eingebetteten Anweisungen schlicht nicht ber&uuml;cksichtigt.<\/p>\n<p>Die Konstanten f&uuml;r die bedingte Kompilierungen gelten jeweils modulweit, egal, ob sie im Modulkopf oder innerhalb einer Routine deklariert wurden.<\/p>\n<p>Daher muss man entweder f&uuml;r jedes einzelne Modul eine Konstante festlegen oder man verwendet die einzige M&ouml;glichkeit, eine globale Konstante f&uuml;r diesen Zweck anzulegen &#8211; n&auml;mlich in der Eigenschaft <b>Argumente f&uuml;r bedingte Kompilierung <\/b>im Eigenschaftsfenster des aktuellen Projekts (<b>Extras|Eigenschaften &lt;Projektname&gt;<\/b>). Der dortige Ausdruck entspricht dem, was hinter der <b>#Const<\/b>-Anweisung steht, also etwa <b>bolDebug = True<\/b>.<\/p>\n<p>Erheblich mehr &uuml;ber die bedingte Kompilierung erfahren Sie im Beitrag <b>Bedingte Kompilierung am Beispiel des PDF-Exports <\/b>(Shortlink 622).<\/p>\n<p><b>Ber&uuml;hrungsloses Debugging<\/b><\/p>\n<p>Soweit m&ouml;glich sollten Sie die Tools der VBA-Entwicklungsumgebung f&uuml;r das Debugging einsetzen. Dazu geh&ouml;ren das bereits oben genannte Direktfenster, das &Uuml;berwachungsfenster, das Aufrufefenster und das Lokalfenster, und auch das Codefenster selbst hilft mit.<\/p>\n<p><b>Variableninhalte ermitteln<\/b><\/p>\n<p>Das Direktfenster haben Sie ja bereits kennengelernt. Es zeigt die Informationen an, die innerhalb der VBA-Prozeduren per <b>Debug.Print <\/b>ausgegeben werden. Wenn Sie eine Prozedur im Einzelschrittmodus durchlaufen, k&ouml;nnen Sie das Direktfenster nutzen, um die Inhalte der Variablen der aktuellen Prozedur auszugeben. Dazu verwenden Sie die gleiche Anweisung, die Sie auch innerhalb des Codes verwenden w&uuml;rden. Das Direktfenster bietet jedoch die Vereinfachung, dass Sie statt <b>Debug.Print <\/b>schlicht <b> <\/b>schreiben k&ouml;nnen, also etwa so:<\/p>\n<pre> strVorname\r\nAndr&eacute;<\/pre>\n<p>Auch im Codefenster selbst k&ouml;nnen Sie die Inhalte von Variablen ermitteln. Dazu platzieren Sie entweder die Maus auf einem Wert (siehe Bild 4) oder auf einer Funktion, welche die Routine auf den Wert anwendet (siehe Bild 5).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic004_opt.jpeg\" alt=\"pic004.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Der ToolTip-Text im VBA-Editor zeigt Variableninhalte an &#8230;<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic005_opt.jpeg\" alt=\"pic005.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: &#8230; und liefert in einigen F&auml;llen auch das Ergebnis von Funktionen.<\/span><\/b><\/p>\n<p>Nat&uuml;rlich liefert das Direktfenster hier noch bessere M&ouml;glichkeiten &#8211; so k&ouml;nnten Sie beispielsweise auch auf Methoden und Eigenschaften von Objekten zugreifen.<\/p>\n<p>Hilfreich ist das etwa, wenn Sie ein Recordset erzeugt haben und sich testhalber den Inhalt des ersten Feldes des ersten Datensatzes ausgeben lassen m&ouml;chten. Mit einer Objektvariablen wie etwa <b>rst <\/b>im Gep&auml;ck gelingt das wie folgt:<\/p>\n<pre>Debug.Print rst.Fields(0).Value<\/pre>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Streng bewacht<\/p>\n<p>Ein weiteres praktisches Instrument ist das &Uuml;berwachungsfenster. Wenn Sie es &uuml;ber <b>Ansicht|&Uuml;berwachungsfenster <\/b>einblenden, zeigt es zun&auml;chst keine Informationen an. Damit dies geschieht, legen Sie einen &Uuml;berwachungsausdruck an. Dieser betrifft in der Regel einen Ausdruck aus dem Quellcode.<\/p>\n<p>Das folgende Beispiel untersucht das <b>Recordset<\/b>-Objekt <b>rst<\/b>. Zum Anlegen des &Uuml;berwachungsausdrucks markieren Sie die Variable und w&auml;hlen dann aus dem Kontextmen&uuml; den Eintrag<b> &Uuml;berwachung hinzuf&uuml;gen&#8230; <\/b>aus (siehe Bild 6). Dies &ouml;ffnet den Dialog aus Bild 7, mit dem Sie einige weitere Einstellungen vornehmen k&ouml;nnen. Behalten Sie diese Einstellungen zun&auml;chst bei.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic006_opt.jpeg\" alt=\"pic006.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Hinzuf&uuml;gen eines &Uuml;berwachungsausdrucks<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic007_opt.jpeg\" alt=\"pic007.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Einstellungen eines &Uuml;berwachungsausdrucks<\/span><\/b><\/p>\n<p>Betrachten Sie dann das &Uuml;berwachungsfenster und durchlaufen Sie eine Beispielroutine mit einem <b>Recordset<\/b>-Objekt im Einzelschrittmodus. Vor dem Start hat <b>rst <\/b>in der &Uuml;berwachungsliste noch den Wert <b>&lt;Au&szlig;erhalb des Kontexts&gt;<\/b>, was auch logisch ist, denn die Variable ist noch nicht einmal deklariert.<\/p>\n<p>Beim Starten der Routine mit <b>F8 <\/b>&auml;ndert sich dieser Wert in <b>Nothing<\/b>: Die Variable ist deklariert, aber noch nicht auf ein neues <b>Recordset<\/b>-Objekt gesetzt. Nach der Anweisung <b>Set rst = &#8230; <\/b>verschwindet dann der Wert und links neben dem Variablennamen erscheint ein Plus-Zeichen.<\/p>\n<p>Klicken Sie auf dieses, zeigt sich dann das Bild aus Bild 8. Hier k&ouml;nnen Sie sich nach Herzenslust austoben und auf alle Eigenschaften zugreifen, die auch VBA bietet, also auch etwa die Eigenschaften der einzelnen Felder des Recordsets ansehen und, in Abh&auml;ngigkeit vom in der Prozedur bearbeiteten Datensatz, auch dessen aktuelle Werte.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic008_opt.jpeg\" alt=\"pic008.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Das Recordsetobjekt l&auml;sst sich im &Uuml;berwachungsfenster komplett untersuchen.<\/span><\/b><\/p>\n<p><b>&Uuml;berwachen bis &#8230;<\/b><\/p>\n<p>Wenn Sie aus dem Kontextmen&uuml; eines &Uuml;berwachungsausdrucks den Eintrag <b>&Uuml;berwachung bearbeiten&#8230; <\/b>ausw&auml;hlen, zeigt der VBA-Editor wieder den Dialog aus Bild 7 an. Hier finden Sie unter <b>Art der &Uuml;berwachung <\/b>noch zwei weitere Optionen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Unterbrechen, wenn der Wert True ist<\/b>: Dies entspricht prinzipiell dem Einsatz der <b>Debug.Assert<\/b>-Anweisung. F&uuml;r diese k&ouml;nnen Sie ja auch einen Ausdruck festlegen, bei dessen Eintreten die Routine an dieser Stelle angehalten wird.<\/li>\n<li class=\"aufz-hlung\"><b>Unterbrechen, wenn Wert ge&auml;ndert wurde<\/b>: Das ist interessant. Oft wei&szlig; man nicht, ob und wann ein Wert &uuml;berhaupt ge&auml;ndert wird. Um das herauszufinden, verwenden Sie diese Option und w&auml;hlen unter <b>Kontext <\/b>die Prozedur und das Modul aus, die den G&uuml;ltigkeitsbereich der Variablen repr&auml;sentieren. F&uuml;r eine prozedurinterne Variable legen Sie genau die Prozedur und das Modul fest, in dem die Variable deklariert wird. F&uuml;r modulweit g&uuml;ltige Variablen k&ouml;nnen Sie unter <b>Prozedur (Alle Prozeduren) <\/b>sowie unter <b>Modul <\/b>das entsprechende Modul ausw&auml;hlen. F&uuml;r globale Variablen w&auml;hlen Sie <b>(Alle Prozeduren) <\/b>und <b>(Alle Module)<\/b>.<\/li>\n<\/ul>\n<p><b>&Uuml;berwachen per Drag and Drop<\/b><\/p>\n<p>Eine nette Erleichterung ist es, dass Sie beliebige Ausdr&uuml;cke direkt vom Codefenster in das &Uuml;berwachungsfenster ziehen k&ouml;nnen. Der VBA-Editor legt automatisch einen passenden &Uuml;berwachungsausdruck an.<\/p>\n<p><b>&Uuml;berwachen &#8230; oder doch nicht<\/b><\/p>\n<p>Wenn Sie einen Ausdruck nicht direkt zum &Uuml;berwachungsfenster hinzuf&uuml;gen, sondern erst einmal den aktuellen Wert betrachten m&ouml;chten, markieren Sie den Wert und bet&auml;tigen die Tastenkombination <b>Umschalt + F9<\/b>.<\/p>\n<p>Der VBA-Editor zeigt dann ein Fenster wie in Bild 9 an, das sowohl den aktuellen Wert des markierten Ausdrucks liefert als auch die M&ouml;glichkeit, den Ausdruck in die Liste der &Uuml;berwachungsausdr&uuml;cke aufzunehmen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic011_opt.jpeg\" alt=\"pic011.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Wem der ToolTip-Text nicht reicht, der kann den Inhalt eines Ausdrucks auch in einem richtigen Fenster anzeigen lassen &#8211; ohne direkt das &Uuml;berwachungsfenster heranzuziehen.<\/span><\/b><\/p>\n<p><b>Wer hat mich aufgerufen<\/b><\/p>\n<p>In gr&ouml;&szlig;eren Projekten werden Routinen unter Umst&auml;nden von vielen anderen Prozeduren aufgerufen. Wenn dann in einer Routine ein Fehler auftritt, weil von der aufrufenden Instanz ein unerwarteter oder fehlerhafter Parameter &uuml;bergeben wurde, ist es interessant zu erfahren, woher der Aufruf kommt.<\/p>\n<p>Dies erm&ouml;glicht die Aufrufliste, die Sie &uuml;ber <b>Ansicht|Aufrufliste&#8230; <\/b>oder die Tastenkombination <b>Strg + L <\/b>anzeigen (siehe Bild 10). Durch Auswahl des gew&uuml;nschten Eintrags und einen Klick auf <b>Anzeigen <\/b>springen Sie direkt zur aufrufenden Prozedur. Die Aufrufliste verschwindet dann und der VBA-Editor zeigt im Codefenster die Zeile mit dem Aufruf in der &uuml;bergeordneten Prozedur an &#8211; markiert durch einen gr&uuml;nen Pfeil (siehe Bild 11).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic002_opt.jpeg\" alt=\"pic002.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Start des manuellen Debuggings einer Prozedur<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic009_opt.jpeg\" alt=\"pic009.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Die Aufrufliste zeigt die Hierarchie der Routinen, die zum Aufruf der aktuellen Prozedur gef&uuml;hrt haben.<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_04\/Debugging-web-images\/pic010_opt.jpeg\" alt=\"pic010.tif\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Der dreieckige Pfeil markiert die Zeile, die f&uuml;r den Aufruf der Prozedur verantwortlich ist.<\/span><\/b><\/p>\n<p><b>Lokalpatriot<\/b><\/p>\n<p>Zu guter Letzt werfen wir noch einen Blick auf das Lokalfenster. Es liefert prinzipiell die gleichen Informationen wie das &Uuml;berwachungsfenster, allerdings mit dem kleinen, aber feinen Unterschied, dass man nicht selbst die Ausdr&uuml;cke festlegt, sondern dass es die Werte aller im aktuellen Kontext vorhandenen Variablen anzeigt.<\/p>\n<p>Wenn Sie den Code also beispielsweise mitten in einer Prozedur anhalten und das Lokalfenster einblenden, zeigt dieses dreierlei Objekte:<\/p>\n<ul>\n<li class=\"aufz-hlung\">die globalen Variablen,<\/li>\n<li class=\"aufz-hlung\">die lokalen Variablen des aktuellen Moduls sowie<\/li>\n<li class=\"aufz-hlung\">die in der aktuellen Prozedur deklarierten Variablen.<\/li>\n<\/ul>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Es lohnt sich schon, einmal einen genaueren Blick auf die M&ouml;glichkeiten der VBA-Entwicklungsumgebung zu werfen &#8211; wer t&auml;glich damit arbeitet, sollte alle M&ouml;glichkeiten aussch&ouml;pfen, um Probleme mit dem Code auf effiziente Weise durch Debugging zu l&ouml;sen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>Debugging.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/5A20058A-CA41-40F2-92E5-7269F2B43038\/aiu_621.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wann immer ein Fehler auftritt, dessen Ursache nicht bekannt ist, oder eine Anwendung unerwartete Ergebnisse liefert, ist es Zeit f&uuml;rs Debugging (zu deutsch: austesten, entwanzen, Fehler suchen und beseitigen). Unter Access spielt sich dies zum gr&ouml;&szlig;ten Teil in der VBA-Entwicklungsumgebung ab. Wir erl&auml;utern, wie Debugging funktioniert, welche Werkzeuge die gute alte VBA-IDE liefert und welche Tricks Sie einsetzen k&ouml;nnen.<\/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":[662008,66042008,44000028,44000025],"tags":[],"class_list":["post-55000621","post","type-post","status-publish","format-standard","hentry","category-662008","category-66042008","category-Ergonomie_und_Benutzeroberflaeche","category-VBA_und_Programmiertechniken"],"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>Debugging im VBA-Editor - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Debugging im VBA-Editor\" \/>\n<meta property=\"og:description\" content=\"Wann immer ein Fehler auftritt, dessen Ursache nicht bekannt ist, oder eine Anwendung unerwartete Ergebnisse liefert, ist es Zeit f&uuml;rs Debugging (zu deutsch: austesten, entwanzen, Fehler suchen und beseitigen). Unter Access spielt sich dies zum gr&ouml;&szlig;ten Teil in der VBA-Entwicklungsumgebung ab. Wir erl&auml;utern, wie Debugging funktioniert, welche Werkzeuge die gute alte VBA-IDE liefert und welche Tricks Sie einsetzen k&ouml;nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:21:56+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/069e584e61974b2d95735fa2a56a5888\" \/>\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=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Debugging im VBA-Editor\",\"datePublished\":\"2021-02-11T21:21:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/\"},\"wordCount\":2974,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/069e584e61974b2d95735fa2a56a5888\",\"articleSection\":[\"2008\",\"4\\\/2008\",\"Ergonomie und Benutzeroberfl\u00e4che\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/\",\"name\":\"Debugging im VBA-Editor - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/069e584e61974b2d95735fa2a56a5888\",\"datePublished\":\"2021-02-11T21:21:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/069e584e61974b2d95735fa2a56a5888\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/069e584e61974b2d95735fa2a56a5888\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Debugging_im_VBAEditor\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Debugging im VBA-Editor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Debugging im VBA-Editor - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/","og_locale":"de_DE","og_type":"article","og_title":"Debugging im VBA-Editor","og_description":"Wann immer ein Fehler auftritt, dessen Ursache nicht bekannt ist, oder eine Anwendung unerwartete Ergebnisse liefert, ist es Zeit f&uuml;rs Debugging (zu deutsch: austesten, entwanzen, Fehler suchen und beseitigen). Unter Access spielt sich dies zum gr&ouml;&szlig;ten Teil in der VBA-Entwicklungsumgebung ab. Wir erl&auml;utern, wie Debugging funktioniert, welche Werkzeuge die gute alte VBA-IDE liefert und welche Tricks Sie einsetzen k&ouml;nnen.","og_url":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:21:56+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/069e584e61974b2d95735fa2a56a5888","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Debugging im VBA-Editor","datePublished":"2021-02-11T21:21:56+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/"},"wordCount":2974,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/069e584e61974b2d95735fa2a56a5888","articleSection":["2008","4\/2008","Ergonomie und Benutzeroberfl\u00e4che","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/","url":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/","name":"Debugging im VBA-Editor - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/069e584e61974b2d95735fa2a56a5888","datePublished":"2021-02-11T21:21:56+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/069e584e61974b2d95735fa2a56a5888","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/069e584e61974b2d95735fa2a56a5888"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Debugging_im_VBAEditor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Debugging im VBA-Editor"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000621","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=55000621"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000621\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}