{"id":55000779,"date":"2011-06-01T00:00:00","date_gmt":"2023-10-26T18:00:58","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=779"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Fehlerbehandlung_mit_vbWatchdog","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/","title":{"rendered":"Fehlerbehandlung mit vbWatchdog"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg02.met.vgwort.de\/na\/740c42aaac0f4f00ad8e0fd13611e17d\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Fehlerbehandlung ist f&uuml;r viele eine l&auml;stige Pflicht. Wenn man es richtig machen will, muss man jede einzelne Routine mit einer Fehlerbehandlung versehen. Dazu kommen noch Zeilennummern, Angabe des Modul- und Prozedurnamens und Informationen wie die Fehlernummer und Beschreibung. Die damit zusammenh&auml;ngende Schreibarbeit kann man sich auf elegante Weise vom Hals schaffen &#8211; und mehr. Erreichen k&ouml;nnen Sie dies mit vbWatchdog &#8211; vier Klassenmodule und ein paar Zeilen Code sorgen f&uuml;r eine professionelle Fehlerbehandlung und wesentlich schlankere Prozeduren.<\/b><\/p>\n<p style=\"font-family: Courier New, Courier, monospace\">+++ Fr&uuml;hlingsaktion +++<br \/>\n  +++ Access [basics] Jahresabo<br \/>\n  +++ plus eBook &quot;Das Access 2003-Entwicklerbuch&quot;<br \/>\n  +++ 39,95 Euro statt 79,- Euro inkl. MwSt.!<br \/>\n+++ <a href=\"http:\/\/acciu.de\/art\" target=_blank>www.access-basics.de<\/a><\/p>\n<p><b>vbWatchdog <\/b>gibt es in zwei Versionen: Standard und Enterprise. Die Enterprise-Version enth&auml;lt einige Features mehr, die den aktuellen Unterschied von 50% Aufschlag zum Preis der Standardversion mehr als rechtfertigen. Normalerweise werden in <b>Access im Unternehmen<\/b> keine kostenpflichtigen Tools vorgestellt, aber wenn eines soviel Arbeit wie in diesem Fall sparen kann, machen wir eine Ausnahme.<\/p>\n<p><b>vbWatchdog <\/b>ist der deutlich verbesserte Nachfolger des <b>SimplyVB6 &#8211; Global Error Handlers <\/b>des gleichen Herstellers. <b>vbWatchdog <\/b>k&ouml;nnen Sie in beliebig viele Anwendungen einbauen. Preise f&uuml;r Mehrbenutzer-Lizenzen finden Sie auf der Webseite unter <b>www.acciu.de\/watchdog<\/b>. <\/p>\n<p>Die Testversion von <b>vbWatchdog <\/b>finden Sie unter dem gleichen Link. Nach dem Download starten Sie die <b>.exe<\/b>-Datei, die ein COM-Add-In f&uuml;r den VBA-Editor installiert. Dieses f&uuml;gen Sie im VBA-Editor &uuml;ber den Men&uuml;eintrag <b>Add-Ins|vbWatchdog|Add vbWatchdog to this project <\/b>zum aktuellen VBA-Projekt hinzu (s. Bild 1).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Einf&uuml;gen des vbWatchdog in ein VBA-Projekt<\/span><\/b><\/p>\n<p>Dies f&uuml;gt dem aktuellen Projekt vier Klassenmodule hinzu, welche die komplette Funktionalit&auml;t enthalten &#8211; es sind keine externen DLLs et cetera n&ouml;tig (s. Bild 2). Sie geben <b>vbWatchdog <\/b>also als Teil der Anwendung weiter.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Die vier Klassen des vbWatchdog<\/span><\/b><\/p>\n<p>Und damit kann die Fehlerbehandlung schon beginnen: Sie brauchen <b>vbWatchdog <\/b>nur zu aktivieren und schon k&uuml;mmert sich das Tool um alle auftretenden Laufzeitfehler. Die Aktivierung erfolgt im einfachsten Fall mit der folgenden Anweisung (eine Instanzierung der Klasse ErrEx ist nicht n&ouml;tig):<\/p>\n<pre>Public Sub vbWatchdogAktivieren()\r\n    Call ErrEx.Enable(&quot;&quot;)\r\nEnd Sub<\/pre>\n<p>Damit sorgen Sie daf&uuml;r, dass <b>vbWatchdog <\/b>im Fehlerfall seinen eingebauten Dialog anzeigt. Nehmen wir an, Sie starten bei aktiviertem <b>vbWatchdog <\/b>die folgende Prozedur:<\/p>\n<pre>Public Sub Testfehler()\r\n    Debug.Print 1 \/ 0\r\nEnd Sub<\/pre>\n<p>Die resultierende Fehlermeldung sieht dann wie in Bild 3 aus. Wenn Sie nicht mehr mit <b>vbWatchdog <\/b>arbeiten m&ouml;chten, deaktivieren Sie es mit der folgenden Anweisung:<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Eine einfache Fehlermeldung des vbWatchdog<\/span><\/b><\/p>\n<pre>ErrEx.Disable<\/pre>\n<p>Wenn Sie nicht die eingebaute Fehlermeldung von <b>vbWatchdog <\/b>sehen wollen, k&ouml;nnen Sie selbst eine globale Fehlerbehandlungsroutine angeben. Dazu aktivieren Sie <b>vbWatchdog <\/b>wie oben, geben aber den Namen der Prozedur an, die im Falle eines Fehlers aufgerufen werden soll:<\/p>\n<pre>Public Sub vbWatchdogMitEigenerMeldung()\r\n    Call ErrEx.Enable(&quot;aiuFehlerbehandlung&quot;)\r\nEnd Sub<\/pre>\n<p>Die eigene Fehlerbehandlung soll in der Prozedur <b>aiuFehlerbehandlung <\/b>erfolgen und sich zun&auml;chst einfach per Meldungsfenster zu Wort melden:<\/p>\n<pre>Public Sub aiuFehlerbehandlung()\r\n    MsgBox &quot;Fehler!&quot;\r\nEnd Sub<\/pre>\n<p>L&ouml;sen Sie nun erneut einen Fehler aus, erscheint erst das Meldungsfenster und dann erneut der eingebaute Dialog von <b>vbWatchdog<\/b>.<\/p>\n<p><b>Fehler protokollieren<\/b><\/p>\n<p>Die Fehlerbehandlungsprozedur <b>aiuFehlerbehandlung<\/b> k&ouml;nnen Sie beispielsweise nutzen, um die Fehler in Tabellen zu dokumentieren. Dazu legen Sie zun&auml;chst eine einfache Fehlertabelle wie in Bild 4 an. Normalerweise w&uuml;rden Sie hier auch Informationen wie Projektname, Prozedurname, Modulname, Zeilennummer oder den Inhalt der fehlerhaften Zeile eintragen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Tabellen zum Speichern von Fehlern &#8230;<\/span><\/b><\/p>\n<p>Nun bietet <b>vbWatchdog<\/b> allerdings auch noch die M&ouml;glichkeit, Informationen aller Routinen auszugeben, die zum Ausl&ouml;sen des Fehlers gef&uuml;hrt haben. Wenn also die Prozedur <b>Testfehler2 <\/b>die Prozedur <b>Testfehler1 <\/b>aufruft und diese wiederum die Prozedur <b>Testfehler<\/b>, in der schlie&szlig;lich ein Fehler auftritt, dann kann es f&uuml;r den Entwickler von gro&szlig;em Nutzen sein, wenn er diesen Hergang kennt. Die Informationen dieses sogenannten Fehlerstacks liefert <b>vbWatchdog <\/b>ebenfalls, weshalb wir diese Informationen in eine weitere, per 1:n-Beziehung mit der Tabelle <b>tblFehler<\/b> verkn&uuml;pfte Tabelle namens <b>tblFehlerstack <\/b>auslagern (s. Bild 6.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: &#8230; und der Schritte, die dazu f&uuml;hrten.<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Dokumentation eines einfachen Fehlers<\/span><\/b><\/p>\n<p><b>Variablen zum Fehlerzeitpunkt archivieren<\/b><\/p>\n<p>Wenn wir schon beim Archivieren sind, legen wir auch gleich noch eine dritte Tabelle zum Speichern der Variablen und ihrer Inhalte zum Zeitpunkt des Fehlers an. Diese sieht wie in Bild 7 aus und ist &uuml;ber das Feld <b>FehlerstackID <\/b>mit der Tabelle <b>tblFehlerstack <\/b>verkn&uuml;pft.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic012.png\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Speichern der Variablen zum Zeitpunkt eines Fehlers<\/span><\/b><\/p>\n<p><b>Archivieren von Fehlern, Stack und Variablen<\/b><\/p>\n<p>Nun passen wir die Fehlerbehandlungs-Prozedur so an, dass sie die gew&uuml;nschten Daten in die beiden Tabellen schreibt. Das Ergebnis sieht wie in Bild 6 zeigt, wie das f&uuml;r einen einfachen Fehler aussehen kann, der &uuml;ber drei Prozeduren angesto&szlig;en wurde.<\/p>\n<p class=\"listingueberschrift\">Listing 1: Speichern von Fehlerinformationen in drei Tabellen<\/p>\n<pre>Public Sub aiuFehlerbehandlung()\r\n    Dim db As DAO.Database\r\n    Dim lngFehlerID As Long\r\n    Dim lngStackID As Long\r\n    Dim strSQLError As String\r\n    Dim strSQLErrorstack As String\r\n    Dim strSQLVariablen As String\r\n    Set db = CurrentDb\r\n    With ErrEx\r\n        strSQLError = &quot;INSERT INTO tblFehler(Fehlerzeit, Fehlernummer, Fehlerbeschreibung) VALUES(&quot; _\r\n            &amp; ISODatum(Now) &amp; &quot;, &quot; &amp; .Number &amp; &quot;, ''&quot; &amp; .Description &amp; &quot;'')&quot;\r\n        db.Execute strSQLError, dbFailOnError\r\n        lngFehlerID = db.OpenRecordset(&quot;SELECT @@IDENTITY&quot;).Fields(0)\r\n        With ErrEx.Callstack\r\n            Do\r\n                strSQLErrorstack = &quot;INSERT INTO tblFehlerstack(Projektname, Modulname, Prozedurname, &quot; _\r\n                    &amp; &quot;Zeilennummer, Zeileninhalt, FehlerID) VALUES(''&quot; &amp; .ProjectName &amp; &quot;'',''&quot; _\r\n                    &amp; .ModuleName &amp; &quot;'',''&quot; &amp; .ProcedureName &amp; &quot;'',&quot; &amp; .LineNumber &amp; &quot;,''&quot; &amp; .LineCode _\r\n                    &amp; &quot;'',&quot; &amp; lngFehlerID &amp; &quot;)&quot;\r\n                db.Execute strSQLErrorstack, dbFailOnError\r\n                lngStackID = db.OpenRecordset(&quot;SELECT @@IDENTITY&quot;).Fields(0)\r\n                With ErrEx.Callstack.VariablesInspector\r\n                    .FirstVar\r\n                    Do While Not .IsEnd\r\n                        strSQLVariablen = &quot;INSERT INTO tblVariablen(Variablenname, Variablenwert, &quot; _\r\n                            &amp; &quot; Datentyp, Gueltigkeitsbereich, StackID) VALUES(''&quot; &amp; .Name &amp; &quot;'',''&quot; _\r\n                            &amp; .Value &amp; &quot;'',''&quot; &amp; .Type &amp; &quot;'',''&quot; &amp; .Scope &amp; &quot;'',&quot; &amp; lngStackID &amp; &quot;)&quot;\r\n                        db.Execute strSQLVariablen, dbFailOnError\r\n                        .NextVar\r\n                    Loop\r\n                End With\r\n            Loop While .NextLevel\r\n        End With\r\n    End With\r\nEnd Sub<\/pre>\n<p>Die Prozedur erledigt noch einen Schritt mehr (nur f&uuml;r die Enterprise-Version): Der <b>vbWatchdog<\/b> liefert auch noch die Variablenwerte aller Variablen der Prozedur, die den Fehler ausgel&ouml;st hat, sowie aller Prozeduren, die sich im Stack befinden.<\/p>\n<p>Das Objekt f&uuml;r den Zugriff auf diese Informationen hei&szlig;t <b>ErrEx.Callstack.VariablesInspector<\/b>. Die erste Methode <b>FirstVar <\/b>l&auml;dt die Informationen der ersten Variable, sodass diese &uuml;ber die Eigenschaften <b>Name<\/b>, <b>Value<\/b>, <b>TypeDesc <\/b>(Datentyp) und <b>Scop <\/b>(G&uuml;ltigkeitsbereich) ausgelesen werden k&ouml;nnen. In einer <b>Do While<\/b>-Schleife wird so oft die <b>NextVar<\/b>-Methode ausgef&uuml;hrt, bis die Eigenschaft <b>IsEnd <\/b>den Wert <b>True <\/b>enth&auml;lt &#8211; dann sind alle Variablen in die Tabelle <b>tblVariablen <\/b>geschrieben.<\/p>\n<p>Die Fehlerinformationen k&ouml;nnen Sie nat&uuml;rlich auch in eine Text- oder XML-Datei schreiben oder im Direktfenster ausgeben.<\/p>\n<p><b>Fehlermeldung unterdr&uuml;cken<\/b><\/p>\n<p>Die Fehlermeldung des <b>vbWatchdog<\/b> unterdr&uuml;cken Sie genau so, wie Sie es mit herk&ouml;mmlichen Fehlermeldungen machen: Sie stellen der Zeile, die einen Fehler ausl&ouml;sen k&ouml;nnte, die folgende Anweisung voran:<\/p>\n<pre>On Error Resume Next<\/pre>\n<p>Dies f&uuml;hrt aber dennoch dazu, dass eine eventuell angegebene Errorhandler-Prozedur aufgerufen wird. Sie k&ouml;nnen also Fehler &uuml;bergehen und dennoch die Fehlerinformationen aufzeichnen.<\/p>\n<p>Das Gleiche gilt, wenn Sie wie in folgendem Beispiel eine benutzerdefinierte Fehlermeldung ansteuern:<\/p>\n<pre>Public Sub TestfehlerMitOnErrorGoto()\r\n    On Error GoTo Fehler\r\n    Debug.Print 1 \/ 0\r\nFehler:\r\n    MsgBox Err.Number &amp; &quot; &quot; &amp; Err.Description\r\nEnd Sub<\/pre>\n<p>Fehlerbehandlungen, die etwa das Einf&uuml;gen doppelter Werte in eindeutig indizierten Tabellenfeldern abfangen sollen, behalten Sie so bei wie zuvor.<\/p>\n<p><b>Zeilennummern anzeigen<\/b><\/p>\n<p>Bei herk&ouml;mmlicher Fehlerbehandlung konnten Sie mit der undokumentierten <b>Erl<\/b>-Funktion die Nummer einer fehlerhaften Zeile abfragen, wenn die Zeilen der betroffenen Prozedur entsprechende Zeilennummern enthielten.<\/p>\n<p><b>vbWatchdog <\/b>liefert beim Auftreten eines Fehlers automatisch eine Zeilennummer, obwohl der VBA-Code gar keine Zeilennummern enth&auml;lt.<\/p>\n<p>Wie kann das sein und muss ich jetzt von Hand durchz&auml;hlen, in welcher Zeile der Fehler aufgetreten ist<\/p>\n<p>Nein: Sie brauchen einfach nur mit dem Men&uuml;eintrag <b>Ansicht|Symbolleisten|vbWatchdog.LineNumberViewer <\/b>eine neue Symbolleiste hervorzuzaubern und den einzigen dort enthaltenen Befehl anzuklicken.<\/p>\n<p>Schon zeigt der VBA-Editor die Zeilennummern an (s. Bild 8).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Zeilennummern einblenden<\/span><\/b><\/p>\n<p><b>Eigenen Fehlerdialog programmieren<\/b><\/p>\n<p>Den Fehlerdialog von <b>vbWatchdog <\/b>k&ouml;nnen Sie nach Ihren W&uuml;nschen anpassen. Am einfachsten gelingt das, wenn Sie die ebenfalls auf der Webseite des Herstellers verf&uuml;gbare Beispieldatenbank namens <b>vbWatchdog_Sample.mdb <\/b>starten und dort im Hauptformular auf <b>Customize <\/b>klicken.<\/p>\n<p>Es erscheint ein Dialog, mit dem Sie alle verf&uuml;gbaren Einstellungen vornehmen k&ouml;nnen (s. Bild 9).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic008.png\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Zusammenstellen eines benutzerdefinierten Fehlerdialogs<\/span><\/b><\/p>\n<p>Alle Einstellungen werden auf Knopfdruck zu einer Reihe von VBA-Anweisungen zusammengestellt und in die Zwischenablage kopiert.<\/p>\n<p>Sie f&uuml;gen diese Anweisungen am besten in die gleiche Prozedur ein, die auch die Aktivierung des <b>vbWatchDog <\/b>vornimmt. <\/p>\n<p>Die notwendigen Einstellungen nehmen Sie per VBA &uuml;ber zwei Objekte vor:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>ErrEx.DialogOptions<\/b>: &auml;ndert das Aussehen und Verhalten des Standarddialogs.<\/li>\n<li class=\"aufz-hlung\"><b>ErrEx.VariablesDialogOptions<\/b>: &auml;ndert das Aussehen des Dialogs zur Anzeige der Variablen zum Zeitpunkt des Auftretens eines Fehlers (s. Bild 10).<\/li>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic011.png\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Ein weiterer Dialog kann die Variablen und ihre Inhalte zum Zeitpunkt des Fehlers anzeigen.<\/span><\/b><\/p>\n<\/ul>\n<p>Die einzelnen Einstellungen k&ouml;nnen Sie nat&uuml;rlich auch manuell zusammenstellen. Wenn Sie etwa den HTML-Ausdruck f&uuml;r das Aussehen des oberen Bereichs &auml;ndern m&ouml;chten, lassen Sie sich diesen zun&auml;chst als Vorlage im Direktfenster ausgeben: <\/p>\n<pre> ErrEx.DialogOptions.HTML_MainBody\r\n&lt;font face=Arial size=13pt color=&quot;#4040FF&quot;&gt;&lt;b&gt;A runtime error has occurred&lt;\/b&gt;&lt;\/font&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;ERRDESC&gt;&lt;\/b&gt;&lt;br&gt;&lt;br&gt;Source:|&lt;SOURCEPROJ&gt;.&lt;SOURCEMOD&gt;.&lt;SOURCEPROC&gt;&lt;br&gt;Number:|&amp;H&lt;ERRNUMBERHEX&gt; (&lt;ERRNUMBER&gt;)&lt;br&gt;Source Line:|#&lt;SOURCELINENUMBER&gt;. &lt;i&gt;&lt;SOURCELINECODE&gt;&lt;\/i&gt;&lt;br&gt;Date\/Time:|&lt;ERRDATETIME&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;u&gt;What do you want to do&lt;\/u&gt;&lt;\/b&gt;<\/pre>\n<p>Danach &auml;ndern Sie den Bereich nach eigenem Wunsch und schreiben den HTML-Ausdruck durch Zuweisung an die Eigenschaft <b>DialogOptions.HTML_MainBody <\/b>wieder zur&uuml;ck. Bei der n&auml;chsten Fehlermeldung finden Sie Ihre eigene Version vor.<\/p>\n<p>Noch einfacher geht es nat&uuml;rlich, wenn Sie die gew&uuml;nschten Einstellungen in eine Prozedur schreiben, die auch noch weitere Einstellungen vornimmt.<\/p>\n<p>F&uuml;r eine sehr rudiment&auml;re, aber deutschsprachige Fehlermeldung f&uuml;hren Sie die Prozedur aus <span class=\"verweis-ohneumbruch\"><a href=\"#anker-63-anchor\">Listing 2<\/a><\/span> aus und provozieren dann einen Fehler.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Definieren des Aussehens einer Fehlermeldung<\/p>\n<pre>Public Sub vbWatchdogMitBenutzerdefinierterMeldungAktivieren()\r\n    Call ErrEx.Enable(&quot;aiuFehlerbehandlung&quot;)\r\n    With ErrEx.DialogOptions\r\n        .HTML_MainBody = &quot;&lt;font face=Arial size=13pt color=&quot;&quot;#666666&quot;&quot;&gt;&lt;b&gt;Ein Fehler ist &quot; _\r\n            &amp; &quot;aufgetreten:&lt;\/b&gt;&lt;br&gt;&lt;ERRDESC&gt; (&lt;ERRNUMBER&gt;)&lt;br&gt;&lt;br&gt;Besser, Sie versuchen es mit &quot; _\r\n            &amp; &quot;einer anderen Anwendung.&quot;\r\n        .HTML_MoreInfoBody = &quot;&lt;font face=Arial size=13pt color=&quot;&quot;#666666&quot;&quot;&gt;&lt;br&gt;&quot; _\r\n            &amp; &quot;&lt;b&gt;Fehlerinformationen:&lt;\/b&gt;&lt;\/font&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;ERRDESC&gt;&lt;\/b&gt;&lt;br&gt;&quot; _\r\n            &amp; &quot;&lt;br&gt;Ort des Geschehens:|&lt;SOURCEPROJ&gt;.&lt;SOURCEMOD&gt;.&lt;SOURCEPROC&gt;&lt;br&gt;Fehlernummer:|&quot; _\r\n            &amp; &quot;&lt;ERRNUMBER&gt;&lt;br&gt;Zeilennummer:|&lt;SOURCELINENUMBER&gt;&lt;br&gt;Inhalt der Zeile:|&lt;i&gt;&quot; _\r\n            &amp; &quot;&lt;SOURCELINECODE&gt;&lt;\/i&gt;&lt;br&gt;Wann ist es passiert:|&lt;ERRDATETIME&gt;&lt;br&gt;&lt;br&gt;&quot; _\r\n            &amp; &quot;&lt;b&gt;&lt;u&gt;Und jetzt&lt;\/u&gt;&lt;\/b&gt;&quot;\r\n        .RemoveAllButtons\r\n        .AddButton &quot;Beenden&quot;, BUTTONACTION_ONERROREND\r\n        .MoreInfoCaption = &quot;Oder wollen Sie doch mehr wissen&quot;\r\n        .LessInfoCaption = &quot;Langweilige Details ausblenden ...&quot;\r\n        .WindowCaption = &quot;Schon wieder ein Fehler ...&quot;\r\n    End With\r\nEnd Sub<\/pre>\n<p>Die entsprechende Meldung sieht dann wie in Bild 12 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Eine benutzerdefinierte Fehlermeldung &#8230;<\/span><\/b><\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_03\/VBWatchdog-web-images\/pic010.png\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: &#8230; mit aufklappbaren Details<\/span><\/b><\/p>\n<p>Beim Zusammenstellen der HTML-Eigenschaften wie <b>HTML_MainBody<\/b>, <b>HTML_MoreInfoBody<\/b>, <b>HTML_CallStackItem <\/b>und <b>HTML_VariableItem <\/b>kommt es neben der richtigen Auszeichnung mit HTML-Tags und dem Text auf zwei Dinge an:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Fehlerinformationen k&ouml;nnen mit entsprechenden Platzhaltern wie etwa <b>&lt;ERRDESC&gt;<\/b> eingef&uuml;gt werden (siehe unten).<\/li>\n<li class=\"aufz-hlung\">Das Pipe-Zeichen (|) entspricht einem Tabulator.<\/li>\n<\/ul>\n<p>Es gibt die folgenden Platzhalter f&uuml;r Fehlerinformationen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>&lt;ERRDESC&gt;<\/b>: Fehlerbeschreibung<\/li>\n<li class=\"aufz-hlung\"><b>&lt;ERRNUMBER&gt;<\/b>: Fehlernummer<\/li>\n<li class=\"aufz-hlung\"><b>&lt;ERRNUMBERHEX&gt;<\/b>: Fehlernummer (hexadezimal)<\/li>\n<li class=\"aufz-hlung\"><b>&lt;ERRDATETIME&gt;<\/b>: Datum und Zeit<\/li>\n<li class=\"aufz-hlung\"><b>&lt;SOURCEPROJ&gt;<\/b>: Projektname<\/li>\n<li class=\"aufz-hlung\"><b>&lt;SOURCEMOD&gt;<\/b>: Modulname<\/li>\n<li class=\"aufz-hlung\"><b>&lt;SOURCEPROC&gt;<\/b>: Prozedurname<\/li>\n<li class=\"aufz-hlung\"><b>&lt;SOURCELINENUMBER&gt;<\/b>: Zeilennummer<\/li>\n<li class=\"aufz-hlung\"><b>&lt;SOURCELINECODE&gt;<\/b>: Inhalt der Zeile<\/li>\n<li class=\"aufz-hlung\"><b>&lt;CALLSTACK&gt;<\/b>: Liste der Prozeduraufrufe, siehe unten<\/li>\n<\/ul>\n<p>In unserem Beispiel haben wir neben der &auml;nderung der HTML-Bereiche noch andere Elemente manipuliert.<\/p>\n<p>Die Methode <b>RemoveAllButtons <\/b>entfernt alle bestehenden Schaltfl&auml;chen. Die Methode <b>AddButton <\/b>f&uuml;gt Schaltfl&auml;chen hinzu, wobei Sie einen benutzerdefinierten Text angeben und die Aktion festlegen k&ouml;nnen.<\/p>\n<p>Daf&uuml;r gibt es die folgenden Konstanten:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>&lt;BUTTONACTION_SHOWVARIABLES&gt;<\/b>: Variablen anzeigen<\/li>\n<li class=\"aufz-hlung\"><b>&lt;BUTTONACTION_ONERRORDEBUG&gt;<\/b>: Code debuggen<\/li>\n<li class=\"aufz-hlung\"><b>&lt;BUTTONACTION_ONERRORRESUMENEXT&gt;<\/b>: Code fortsetzen<\/li>\n<li class=\"aufz-hlung\"><b>&lt;BUTTONACTION_SHOWHELP&gt;<\/b>: Access-Hilfe zu diesem Fehler anzeigen<\/li>\n<li class=\"aufz-hlung\"><b>&lt;BUTTONACTION_ONERROREND&gt;<\/b>: Prozedur beenden<\/li>\n<\/ul>\n<p>Au&szlig;erdem haben wir die folgenden Eigenschaften eingestellt:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>MoreInfoCaption<\/b>: Beschriftung der Schaltfl&auml;che zum Ausklappen der Details<\/li>\n<li class=\"aufz-hlung\"><b>LessInfoCaption<\/b>: Beschriftung der Schaltfl&auml;che zum Einklappen der Details<\/li>\n<li class=\"aufz-hlung\"><b>WindowCaption<\/b>: Fenstertitel der Fehlermeldung <\/li>\n<\/ul>\n<p><b>Callstack in der Fehlermeldung<\/b><\/p>\n<p>Die Callstack-Informationen k&ouml;nnen Sie in einem der beiden Bereiche der Fehlermeldung unterbringen. Dazu f&uuml;gen Sie das Tag <b>&lt;CALLSTACK&gt; <\/b>hinzu.<\/p>\n<p>Wie der Inhalt dieses sich f&uuml;r alle Aufrufe wiederholenden Bereichs aussieht, legen Sie mit der Eigenschaft <b>HTML_CallStackItem <\/b>fest. Dieser kann folgende Variablen enthalten:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>&lt;SOURCEPROJ&gt;<\/b>: Projektname<\/li>\n<li class=\"aufz-hlung\"><b>&lt;SOURCEMOD&gt;<\/b>: Modulname<\/li>\n<li class=\"aufz-hlung\"><b>&lt;SOURCEPROC&gt;<\/b>: Prozedurname<\/li>\n<li class=\"aufz-hlung\"><b>&lt;SOURCELINENUMBER&gt;<\/b>: Zeilennummer<\/li>\n<li class=\"aufz-hlung\"><b>&lt;SOURCELINECODE&gt;<\/b>: Inhalt der Zeile<\/li>\n<li class=\"aufz-hlung\"><b>&lt;VARIABLES&gt;<\/b>: Inhalt der Variablen<\/li>\n<\/ul>\n<p><b>Variablen in der Fehlermeldung<\/b><\/p>\n<p>Die Variablen zum Zeitpunkt des Fehlers k&ouml;nnen Sie ebenfalls in der Fehlermeldung ausgeben. Dazu legen Sie die Eigenschaft <b>HTML_VariablesItem <\/b>des <b>ErrEx<\/b>-Objekts fest.<\/p>\n<p>Die Variableninhalte werden f&uuml;r jedes Element des Stacks ausgegeben, wenn dort das <b>&lt;VARIABLES&gt;<\/b>-Tag enthalten ist. F&uuml;r die Variablen gibt es folgende Platzhalter:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>&lt;VARSCOPE&gt;<\/b>: G&uuml;ltigkeitsbereich<\/li>\n<li class=\"aufz-hlung\"><b>&lt;VARNAME&gt;<\/b>: Name der Variablen<\/li>\n<li class=\"aufz-hlung\"><b>&lt;VARTYPE&gt;<\/b>: Datentyp<\/li>\n<li class=\"aufz-hlung\"><b>&lt;VARVALUE&gt;<\/b>: Variablenwert<\/li>\n<\/ul>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Benutzerdefinierte Platzhalter<\/p>\n<p>Auch wenn Sie das Aussehen des Fehlerdialogs bereits festgelegt haben, k&ouml;nnen Sie zur Laufzeit den Inhalt benutzerdefinierter Platzhalter &auml;ndern.<\/p>\n<p>Einen solchen Platzhalter legen Sie genau so wie einen der eingebauten Platzhalter an &#8211; mit dem kleinen Unterschied, dass er ein f&uuml;hrendes Ausrufezeichen enthalten muss:<\/p>\n<pre>&lt;!Benutzerdefinierter&gt;<\/pre>\n<p>Wenn Sie diesen Platzhalter belegen m&ouml;chten, erledigen Sie dies mit der folgenden Anweisung:<\/p>\n<pre>ErrEx.CustomVars(&quot;Benutzerdefiniert&quot;) = &quot;Bla&quot;<\/pre>\n<p><b>Try&#8230;Catch (nur Enterprise-Version)<\/b><\/p>\n<p>Wenn Sie Fehler abfangen m&ouml;chten, brauchen Sie nicht mehr die <b>On Error Goto &lt;Marke&gt;<\/b>-Syntax wie in diesem Beispiel:<\/p>\n<pre>Public Sub TryCatchAlt()\r\nOn Error GoTo Fehler\r\n    Debug.Print 1 \/ 0\r\n    Exit Sub\r\nFehler:\r\n    MsgBox &quot;Dieser Fehler wurde behandelt.&quot;\r\nEnd Sub<\/pre>\n<p>Sie definieren einfach am Ende der Prozedur einen Block, der wie folgt aussieht:<\/p>\n<pre>Public Sub TryCatch()\r\n    Debug.Print 1 \/ 0\r\n    ErrEx.Catch 11\r\n    MsgBox &quot;Dieser Fehler wurde per Try...Catch abgefangen.&quot;\r\nEnd Sub<\/pre>\n<p>Die <b>Catch<\/b>-Anweisung sorgt daf&uuml;r, dass bei jedem Auftreten eines Fehlers bis hierhin der danach folgende Block ausgef&uuml;hrt wird. Tritt kein Fehler auf, endet die Prozedur mit der ersten <b>Catch<\/b>-Anweisung. Wenn Sie verschiedene Fehler mit der gleichen <b>Catch<\/b>-Methode abfangen m&ouml;chten, verwenden Sie die folgende Syntax:<\/p>\n<pre>ErrEx.Catch 11, 3022<\/pre>\n<p>F&uuml;r verschiedene Fehler haben Sie bisher vermutlich eine <b>Select Case<\/b>-Anweisung verwendet:<\/p>\n<pre>Public Sub TryCatchMitSelectCaseAlt()\r\n    On Error GoTo Fehler\r\n    Debug.Print 1 \/ 0\r\n    Exit Sub\r\nFehler:\r\n    Select Case Err.Number\r\n         Case 11\r\n            MsgBox &quot;Dieser Fehler wurde behandelt.&quot;\r\n        Case 3022\r\n            ''...\r\n    End Select\r\nEnd Sub<\/pre>\n<p>Mit <b>vbWatchdog <\/b>verwenden Sie einfach mehrere<b> Catch<\/b>-Anweisungen:<\/p>\n<pre>Public Sub TryCatch()\r\n    Debug.Print 1 \/ 0\r\n    ErrEx.Catch 11\r\n    MsgBox &quot;Dieser Fehler wurde per Try...Catch abgefangen.&quot;\r\n    ErrEx.Catch 3022\r\n    ''...\r\nEnd Sub<\/pre>\n<p>Das Abfangen aller Fehler erledigen Sie mit der <b>CatchAll<\/b>-Methode:<\/p>\n<pre>ErrEx.CatchAll<\/pre>\n<p>Und wenn Sie nach dem Auftreten eines Fehlers noch dringend einige Aufgaben erledigen m&uuml;ssen, sah das ohne <b>vbWatchdog <\/b>so aus:<\/p>\n<pre>Public Sub TryCatchAltMitAufraeumen()\r\n    On Error GoTo Fehler\r\n    Debug.Print 1 \/ 0\r\n    Exit Sub\r\nEnde:\r\n    MsgBox &quot;Geschafft ...&quot;\r\nFehler:\r\n    MsgBox &quot;Dieser Fehler wurde behandelt.&quot;\r\n    GoTo Ende\r\nEnd Sub<\/pre>\n<p>Mit <b>vbWatchdog <\/b>schreiben Sie die auch nach einem Fehler noch durchzuf&uuml;hrenden Anweisungen einfach im Anschluss an den Aufruf der <b>ErrEx.Finally<\/b>-Anweisung:<\/p>\n<pre>Public Sub TryCatchMitAufraeumen()\r\n    Debug.Print 1 \/ 0\r\n    ErrEx.Catch 11\r\n    MsgBox &quot;Dieser Fehler wurde behandelt.&quot;\r\n    ErrEx.Finally\r\n    MsgBox &quot;Geschafft!&quot;\r\nEnd Sub<\/pre>\n<p>Die dort befindlichen Anweisungen werden mit oder ohne Fehler auf jeden Fall ausgef&uuml;hrt.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p><b>vbWatchdog <\/b>ist eines der besten Tools, die es f&uuml;r VBA am Markt gibt. Es spart eine gro&szlig;e Menge Programmierarbeit und somit viel Zeit. Noch dazu wird der Code durch die globale Fehlerbehandlung wesentlich besser lesbar: Sie ben&ouml;tigen keine klassische Fehlerbehandlung mehr und es sind auch keine Zeilennummern mehr n&ouml;tig.<\/p>\n<p>Das Tool arbeitet in <b>.mde<\/b>&#8211; und <b>.accde<\/b>-Dateien genau so wie unter der Runtime-Version von Access.<\/p>\n<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>VBWatchdog.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/E418A987-CA88-452A-A499-2E01C7D2DEDB\/aiu_779.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fehlerbehandlung ist f&uuml;r viele eine l&auml;stige Pflicht. Wenn man es richtig machen will, muss man jede einzelne Routine mit einer Fehlerbehandlung versehen. Dazu kommen noch Zeilennummern, Angabe des Modul- und Prozedurnamens und Informationen wie die Fehlernummer und Beschreibung. Die damit zusammenh&auml;ngende Schreibarbeit kann man sich auf elegante Weise vom Hals schaffen &#8211; und mehr. Erreichen k&ouml;nnen Sie dies mit vbWatchdog &#8211; vier Klassenmodule und ein paar Zeilen Code sorgen f&uuml;r eine professionelle Fehlerbehandlung und wesentlich schlankere Prozeduren.<\/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":[662011,66032011,44000025],"tags":[],"class_list":["post-55000779","post","type-post","status-publish","format-standard","hentry","category-662011","category-66032011","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>Fehlerbehandlung mit vbWatchdog - 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\/Fehlerbehandlung_mit_vbWatchdog\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fehlerbehandlung mit vbWatchdog\" \/>\n<meta property=\"og:description\" content=\"Fehlerbehandlung ist f&uuml;r viele eine l&auml;stige Pflicht. Wenn man es richtig machen will, muss man jede einzelne Routine mit einer Fehlerbehandlung versehen. Dazu kommen noch Zeilennummern, Angabe des Modul- und Prozedurnamens und Informationen wie die Fehlernummer und Beschreibung. Die damit zusammenh&auml;ngende Schreibarbeit kann man sich auf elegante Weise vom Hals schaffen - und mehr. Erreichen k&ouml;nnen Sie dies mit vbWatchdog - vier Klassenmodule und ein paar Zeilen Code sorgen f&uuml;r eine professionelle Fehlerbehandlung und wesentlich schlankere Prozeduren.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-26T18:00:58+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg02.met.vgwort.de\/na\/740c42aaac0f4f00ad8e0fd13611e17d\" \/>\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\\\/Fehlerbehandlung_mit_vbWatchdog\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Fehlerbehandlung mit vbWatchdog\",\"datePublished\":\"2023-10-26T18:00:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/\"},\"wordCount\":2158,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/740c42aaac0f4f00ad8e0fd13611e17d\",\"articleSection\":[\"2011\",\"3\\\/2011\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/\",\"name\":\"Fehlerbehandlung mit vbWatchdog - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/740c42aaac0f4f00ad8e0fd13611e17d\",\"datePublished\":\"2023-10-26T18:00:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/740c42aaac0f4f00ad8e0fd13611e17d\",\"contentUrl\":\"http:\\\/\\\/vg02.met.vgwort.de\\\/na\\\/740c42aaac0f4f00ad8e0fd13611e17d\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Fehlerbehandlung_mit_vbWatchdog\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fehlerbehandlung mit vbWatchdog\"}]},{\"@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":"Fehlerbehandlung mit vbWatchdog - 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\/Fehlerbehandlung_mit_vbWatchdog\/","og_locale":"de_DE","og_type":"article","og_title":"Fehlerbehandlung mit vbWatchdog","og_description":"Fehlerbehandlung ist f&uuml;r viele eine l&auml;stige Pflicht. Wenn man es richtig machen will, muss man jede einzelne Routine mit einer Fehlerbehandlung versehen. Dazu kommen noch Zeilennummern, Angabe des Modul- und Prozedurnamens und Informationen wie die Fehlernummer und Beschreibung. Die damit zusammenh&auml;ngende Schreibarbeit kann man sich auf elegante Weise vom Hals schaffen - und mehr. Erreichen k&ouml;nnen Sie dies mit vbWatchdog - vier Klassenmodule und ein paar Zeilen Code sorgen f&uuml;r eine professionelle Fehlerbehandlung und wesentlich schlankere Prozeduren.","og_url":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/","og_site_name":"Access im Unternehmen","article_published_time":"2023-10-26T18:00:58+00:00","og_image":[{"url":"http:\/\/vg02.met.vgwort.de\/na\/740c42aaac0f4f00ad8e0fd13611e17d","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\/Fehlerbehandlung_mit_vbWatchdog\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Fehlerbehandlung mit vbWatchdog","datePublished":"2023-10-26T18:00:58+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/"},"wordCount":2158,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/740c42aaac0f4f00ad8e0fd13611e17d","articleSection":["2011","3\/2011","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/","url":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/","name":"Fehlerbehandlung mit vbWatchdog - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/#primaryimage"},"thumbnailUrl":"http:\/\/vg02.met.vgwort.de\/na\/740c42aaac0f4f00ad8e0fd13611e17d","datePublished":"2023-10-26T18:00:58+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/#primaryimage","url":"http:\/\/vg02.met.vgwort.de\/na\/740c42aaac0f4f00ad8e0fd13611e17d","contentUrl":"http:\/\/vg02.met.vgwort.de\/na\/740c42aaac0f4f00ad8e0fd13611e17d"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Fehlerbehandlung_mit_vbWatchdog\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Fehlerbehandlung mit vbWatchdog"}]},{"@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\/55000779","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=55000779"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000779\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000779"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000779"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}