{"id":55000705,"date":"2026-02-01T00:00:00","date_gmt":"2026-02-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/705"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"VBA_basics_Laufzeitfehler_protokollieren","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html","title":{"rendered":"VBA [basics]: Laufzeitfehler protokollieren"},"content":{"rendered":"<p class='introduction'>Im Artikel VBA [basics]: Fehlerbehandlung mit VBA (www.access-basics.de\/703) haben wir gezeigt, wie die Behandlung von Laufzeitfehlern grunds&auml;tzlich funktioniert. Darauf aufbauend zeigen wir im vorliegenden Artikel, wie Du die Fehler, die bei einer Anwendung auftreten, in einer Log-Tabelle protokollieren kannst. Dabei speichern wir Fehlerinformationen wie die Fehlernummer, die Beschreibung, die Nummer der fehlerhaften Zeile, das Modul und die Prozedur, in dem der Fehler aufgetreten ist. Das ist vor allem hilfreich, wenn Deine Anwendung von Deinen Kunden oder Mitarbeitern verwendet wird und Du beim Auftreten eines Fehlers Informationen zu diesem Fehler ben&ouml;tigst, ohne dass der Benutzer Dir diese umst&auml;ndlich in eine E-Mail schreiben oder auf eine andere Weise mitteilen muss.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels findest Du in der Datenbank <b>VBABasics_LaufzeitfehlerProtokollieren.accdb<\/b>.<\/p>\n<h2>Warum Fehler protokollieren?<\/h2>\n<p>In Anwendungen gibt es verschiedene Arten von Laufzeitfehlern &#8211; solche, mit denen wir nicht rechnen und solche, die auch geplant eintreten k&ouml;nnen. Gerade solche, die nicht geplant auftreten, sollten wir ernst nehmen, da diese die Funktionalit&auml;t der Anwendung beeintr&auml;chtigen k&ouml;nnen. Wenn der Benutzer also eine Fehlermeldung bekommt und diese einfach wegklickt, weil es danach irgendwie noch l&auml;uft, k&ouml;nnen wir die Fehler nicht sauber beheben.<\/p>\n<p>Daher sollte man jeden Fehler, der im VBA-Projekt der Anwendung ausgel&ouml;st wird, protokollieren. So k&ouml;nnen wir zumindest von Zeit zu Zeit einmal pr&uuml;fen, welche Fehler aufgetreten sind.<\/p>\n<p>Noch besser ist es, wenn die Benutzer solche Fehler melden k&ouml;nnen und Du die Details zum jeweiligen Fehler erh&auml;ltst. Dazu solltest Du allerdings einen einfachen Workflow bereitstellen, damit der Benutzer damit nicht &uuml;berfordert ist.<\/p>\n<p>Das ist aber oft der Fall, wenn der Benutzer eine nichtssagende Fehlermeldung erh&auml;lt und sich dann wom&ouml;glich telefonisch bei Dir meldet. Du musst dann umst&auml;ndlich gemeinsam mit dem Benutzer herausfinden, welcher Fehler aufgetreten ist und an welcher Stelle.<\/p>\n<p>Das kostet unn&ouml;tig Zeit und kann einfacher erledigt werden.<\/p>\n<h2>Tabelle zum Protokollieren von Fehlern<\/h2>\n<p>Die Idee dieses Artikels ist, dazu alle Fehler in einer Tabelle zu protokollieren.<\/p>\n<p>Diese Tabelle sollte alle relevanten Informationen zu diesem Fehler enthalten:<\/p>\n<ul>\n<li>Nummer des Fehlers<\/li>\n<li>Beschreibung des Fehlers<\/li>\n<li>Nummer der Zeile, in welcher der Fehler aufgetreten ist<\/li>\n<li>Name des Moduls, in dem der Fehler aufgetreten ist<\/li>\n<li>Name der Prozedur, in welcher der Fehler aufgetreten ist<\/li>\n<li>Datum und Uhrzeit des Fehlers<\/li>\n<li>Name des Benutzers (optional f&uuml;r R&uuml;ckfragen)<\/li>\n<li>Weitere Bemerkungen, wie zum Beispiele Werte von Variablen zum Zeitpunkt des Fehlers<\/li>\n<\/ul>\n<p>Eine solche Tabelle k&ouml;nnte im Entwurf wie in Bild 1 aussehen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_705_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_705_001.png\" alt=\"Entwurf einer Tabelle zum Speichern von Fehlern\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Entwurf einer Tabelle zum Speichern von Fehlern<\/p>\n<h2>Fehlerbehandlung zum Protokollieren von Fehlern<\/h2>\n<p>Wie eine Fehlerbehandlung grunds&auml;tzlich aussieht, haben wir bereits im oben genannten Artikel erl&auml;utert.<\/p>\n<p>Diese erweitern wir nun und spalten sie in zwei Teile auf.<\/p>\n<p>Der erste Teil ist die Fehlerbehandlung in den Prozeduren selbst. Diese sorgt daf&uuml;r, dass Fehler durch unseren eigenen Code behandelt und diese nicht durch die eingebaute Fehlerbehandlung von VBA verarbeitet werden &#8211; dies resultiert oft in f&uuml;r den Benutzer unverst&auml;ndlichen Fehlermeldungen.<\/p>\n<p>In dem Teil, in dem wir den Fehler behandeln, rufen wir den zweiten Teil auf: eine eigene Prozedur, die sich um das Speichern der Fehlerinformationen in der Protokoll-Tabelle k&uuml;mmert.<\/p>\n<p>Wir verwenden eine eigene Prozedur daf&uuml;r, weil wir diesen Code sonst in jeder einzelnen Prozedur anlegen m&uuml;ssten &#8211; und das ist erstens unn&ouml;tig und zweitens ersparen wir uns so, diesen Code an vielen Stellen anpassen zu m&uuml;ssen, wenn wir einmal &Auml;nderungen daran vornehmen wollen.<\/p>\n<h2>Aufbau der Fehlerbehandlung<\/h2>\n<p>Die Fehlerbehandlung ist &auml;hnlich aufgebaut wie im oben genannten Artikel beschrieben. Wir starten mit der Anweisung <b>On Error GoTo Fehler<\/b> direkt als erste Zeile der Prozedur, wobei <b>Fehler <\/b>eine Sprungmarke am Ende der Prozedur ist.<\/p>\n<p>Dann folgt der eigentliche Code der Prozedur. Hinter diesem f&uuml;gen wir eine weitere wichtige Anweisung hinzu, n&auml;mlich <b>Exit Sub<\/b>.<\/p>\n<p>Diese sorgt daf&uuml;r, dass die Prozedur nicht bis zur Fehlerbehandlung durchl&auml;uft, die ja nur im Fehlerfall ausgef&uuml;hrt werden soll.<\/p>\n<p>Davor f&uuml;gen wir eine Sprungmarke namens Ende: ein, die wir nach dem Beenden der Fehlerbehandlung ansteuern. Zwischen dieser Anweisung und <b>Exit Sub <\/b>k&ouml;nnen wir noch Restarbeiten durchf&uuml;hren, zum Beispiel zum Schlie&szlig;en von Objekten oder zum Leeren von Objektvariaben.<\/p>\n<p>Am Ende finden wir die Sprungmarke <b>Fehler:<\/b>, die beim Auftreten eines Laufzeitfehlers automatisch angesprungen wird.<\/p>\n<p>Hier rufen wir unsere Fehlerbehandlungsprozedur namens Fehlerbehandlung auf und &uuml;bergeben dieser die folgenden Informationen:<\/p>\n<ul>\n<li><b>Err.Number<\/b>: Fehlernummer<\/li>\n<li><b>Err.Description<\/b>: Fehlerbeschreibung<\/li>\n<li><b>Erl<\/b>: Zeile, in welcher der Fehler aufgetreten ist<\/li>\n<li>Name des fehlerhaften Moduls<\/li>\n<li>Name der fehlerhaften Prozedur<\/li>\n<\/ul>\n<p>Die Fehlerbehandlung sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>OnErrorGoto()\r\n     <span style=\"color:blue;\"><span style=\"color:blue;\">On Error GoTo<\/span><\/span> Fehler\r\n     \r\n10    <span style=\"color:blue;\"><span style=\"color:blue;\">Debug.Print<\/span><\/span> 1 \/ 0\r\nEnde:\r\n     <span style=\"color:blue;\"><span style=\"color:blue;\">Exit Sub<\/span><\/span>\r\nFehler:\r\n     <span style=\"color:blue;\">Call<\/span> Fehlerbehandlung(Err.Number, Err.Description, _\r\n         Erl, \"mdlFehlerbehandlung\", \"OnErrorGoto\")\r\n     GoTo Ende\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Prozedur zum Protokollieren des Fehlers<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000705\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000705?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000705\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"9f18b59416\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Artikel VBA [basics]: Fehlerbehandlung mit VBA (www.access-basics.de\/703) haben wir gezeigt, wie die Behandlung von Laufzeitfehlern grunds&auml;tzlich funktioniert. Darauf aufbauend zeigen wir im vorliegenden Artikel, wie Du die Fehler, die bei einer Anwendung auftreten, in einer Log-Tabelle protokollieren kannst. Dabei speichern wir Fehlerinformationen wie die Fehlernummer, die Beschreibung, die Nummer der fehlerhaften Zeile, das Modul und die Prozedur, in dem der Fehler aufgetreten ist. Das ist vor allem hilfreich, wenn Deine Anwendung von Deinen Kunden oder Mitarbeitern verwendet wird und Du beim Auftreten eines Fehlers Informationen zu diesem Fehler ben&ouml;tigst, ohne dass der Benutzer Dir diese umst&auml;ndlich in eine E-Mail schreiben oder auf eine andere Weise mitteilen muss.<\/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":[66012026,662026,44000011],"tags":[],"class_list":["post-55000705","post","type-post","status-publish","format-standard","hentry","category-66012026","category-662026","category-VBAGrundlagen"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>VBA [basics]: Laufzeitfehler protokollieren - Access [basics]<\/title>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VBA [basics]: Laufzeitfehler protokollieren - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Im Artikel VBA [basics]: Fehlerbehandlung mit VBA (www.access-basics.de\/703) haben wir gezeigt, wie die Behandlung von Laufzeitfehlern grunds&auml;tzlich funktioniert. Darauf aufbauend zeigen wir im vorliegenden Artikel, wie Du die Fehler, die bei einer Anwendung auftreten, in einer Log-Tabelle protokollieren kannst. Dabei speichern wir Fehlerinformationen wie die Fehlernummer, die Beschreibung, die Nummer der fehlerhaften Zeile, das Modul und die Prozedur, in dem der Fehler aufgetreten ist. Das ist vor allem hilfreich, wenn Deine Anwendung von Deinen Kunden oder Mitarbeitern verwendet wird und Du beim Auftreten eines Fehlers Informationen zu diesem Fehler ben&ouml;tigst, ohne dass der Benutzer Dir diese umst&auml;ndlich in eine E-Mail schreiben oder auf eine andere Weise mitteilen muss.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-01T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_705_001.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"10\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_705_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html\",\"name\":\"VBA [basics]: Laufzeitfehler protokollieren - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html#primaryimage\"},\"datePublished\":\"2026-02-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Laufzeitfehler_protokollieren.html\",\"name\":\"VBA [basics]: Laufzeitfehler protokollieren\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000705"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000705\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}