{"id":55000186,"date":"2013-04-01T00:00:00","date_gmt":"2020-01-24T15:58:46","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=186"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Debugging_im_VBAEditor_Teil_1","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.html","title":{"rendered":"Debugging im VBA-Editor, Teil 1"},"content":{"rendered":"<p class='introduction'>Wer mit VBA arbeitet, hat im Gegensatz zu Makros einige M&ouml;glichkeiten, den Programmablauf zu beobachten und auf diese Weise Fehler aufzudecken. Auch wenn der VBA-Editor bereits einige J&auml;hrchen auf dem Buckel hat und seit Jahren weder VBA noch der VBA-Editor erweitert wurde, bietet er doch einige M&ouml;glichkeiten zum Debugging. Dieser Artikel zeigt, wie Debugging funktioniert und welche Werkzeuge der VBA-Editor dazu anbietet.<\/p>\n<h2>Was ist Debugging<\/h2>\n<p>Unter Debugging versteht man das Entfernen von Bugs. Bugs Damit sind Programmfehler gemeint. W&auml;hrend diese Bezeichnung f&uuml;r Fehler wohl unter Ingenieuren schon l&auml;nger g&auml;ngig war, wurde er von Grace Hopper salonf&auml;hig gemacht: Dieser fand n&auml;mlich 1947 bei den Arbeiten am Mark II tats&auml;chlich eine Motte als Ausl&ouml;ser eines Fehlers vor (siehe Wikipedia).<\/p>\n<p>Unter VBA versteht man unter Debugging vor allem die Untersuchung des Pro-gramm-ablaufs, wobei Prozeduren mit geeigneten Men&uuml;befehlen oder Tasten-kom-bi-nationen in mehr oder weniger gro&szlig;en Schritten durchlaufen werden. Bei jedem Schritt lassen sich die aktuellen Werte von Variablen ermitteln. Falsch oder nicht gef&uuml;llte beziehungsweise gesetzte Variablen sind der Hauptgrund f&uuml;r logische Fehler im Programmablauf.<\/p>\n<p>Statt die Prozeduren schrittweise zu durchlaufen, k&ouml;nnen Sie auch gleich festlegen, an welcher Stelle diese angehalten werden soll. Tritt hingegen ein Laufzeitfehler auf, bietet der VBA-Editor automatisch die M&ouml;glichkeit, die fehlerhafte Stelle zu untersuchen. Doch genug der warmen Worte &#8211; schauen wir uns doch gleich die passenden Werkzeuge an.<\/p>\n<h2>Debugging im Fehlerfall<\/h2>\n<p>Wer sich noch nicht aktiv um das Thema Debugging gek&uuml;mmert hat, wird wohl am ehesten durch einen Fehler damit in Verbindung gekommen sein. Nehmen wir folgende Funktion zum Dividieren als Beispiel:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Dividieren(intDividend<span style=\"color:blue;\"> As Integer<\/span>, _\r\n         intDivisor<span style=\"color:blue;\"> As Integer<\/span>)<span style=\"color:blue;\"> As Single<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>sngErgebnis<span style=\"color:blue;\"> As Single<\/span>\r\n     sngErgebnis = intDividend \/ intDivisor\r\n     Dividieren = sngErgebnis\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Wenn Sie diese Funktion mit den Werten <b>3 <\/b>und <b>0 <\/b>&uuml;ber das Direktfenster aufrufen, erscheint die Fehlermeldung aus Bild 1. Dort finden Sie unter anderem eine Schaltfl&auml;che mit der Beschriftung <b>Debuggen<\/b>, mit der Sie in den Debugging-Modus einsteigen k&ouml;nnen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_186_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_186_001.png\" alt=\"Laufzeitfehler mit der M&ouml;glichkeit, zu debuggen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Laufzeitfehler mit der M&ouml;glichkeit, zu debuggen<\/p>\n<p>Ein Klick auf diese Schaltfl&auml;che schlie&szlig;t die Fehlermeldung und hebt die den Fehler ausl&ouml;sende Zeile im VBA-Editor farblich hervor (siehe Bild 2). Sie k&ouml;nnen nun beispielsweise mit der Maus &uuml;ber die in der Zeile enthaltenen Variablen fahren, um ihre Werte anzuzeigen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_186_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_186_002.png\" alt=\"Debugging eines Laufzeitfehlers\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Debugging eines Laufzeitfehlers<\/p>\n<p>Dies gelingt &uuml;brigens auch auf andere Weise (manchmal &#8211; vor allem bei komplizierteren Ausdr&uuml;cken &#8211; zeigt sich die direkte Anzeige im Codefenster etwas st&ouml;rrisch): Dabei nehmen Sie das Direktfenster zuhilfe und lassen sich dort mit der <b>Debug.Print<\/b>-Anweisung den Inhalt der zu untersuchenden Variablen ausgeben. Dabei geben Sie den Namen der Variablen als Parameter an (siehe Bild 3). Hier erkennen Sie direkt, dass der Divisor einen unzul&auml;ssigen Werte angenommen hat (vermutlich unerwarteterweise) und k&ouml;nnen eine entsprechende Pr&uuml;fung einbauen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_186_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_186_003.png\" alt=\"Variablenwerte &uuml;ber das Direktfenster ermitteln\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Variablenwerte &uuml;ber das Direktfenster ermitteln<\/p>\n<h2>Variableninhalt &auml;ndern<\/h2>\n<p>Wenn Sie eine umfangreichere Abfolge von Routinen testen, m&ouml;chten Sie an dieser Stelle m&ouml;glicherweise nicht von vorn beginnen.<\/p>\n<p>Dann gibt es mehrere M&ouml;glichkeiten (die alle nat&uuml;rlich nicht mit einem Neustart mit korrigiertem Code gleichzusetzen sind) &#8211; zum Beispiel diese:<\/p>\n<ul>\n<li>Sie &auml;ndern den unerw&uuml;nschten Variablenwert und fahren mit der Prozedur fort.<\/li>\n<li>Sie &auml;ndern das Ergebnis und fahren dann mit der Prozedur fort.<\/li>\n<\/ul>\n<p>Im ersten Fall weisen Sie der Variablen <b>intDivisor <\/b>&uuml;ber den Direktbereich einen neuen Wert zu:<\/p>\n<pre>intDivisor = 1<\/pre>\n<p>Danach f&uuml;hren Sie die Prozedur mit einem Klick auf die Taste <b>F5 <\/b>oder durch das Aufrufen des Men&uuml;-befehls <b>Ausf&uuml;hren|Fortsetzen <\/b>fort. Die Zeile l&ouml;st keinen Fehler mehr aus und die Funktion liefert das entsprechende Ergebnis. Wenn Sie lieber gleich den vollst&auml;ndigen R&uuml;ckgabewert der Funktion &auml;ndern m&ouml;chten, verschieben Sie den gelben Pfeil, der die aktuell auszuf&uuml;hrende Zeile markiert, einfach auf die Zeile <b>End Function <\/b>und weisen Sie dem R&uuml;ckgabewert <b>Dividieren <\/b>der Funktion den gew&uuml;nschten Wert zu &#8211; beispielsweise so (siehe Bild 4):<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_186_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_186_004.png\" alt=\"Aktuelle Zeile &auml;ndern\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Aktuelle Zeile &auml;ndern<\/p>\n<pre>Dividieren = 3<\/pre>\n<p>Auf diese Weise k&ouml;nnen Sie auch alle anderen Zeilen anspringen oder Variablenwerte &auml;ndern.<\/p>\n<h2>Starten, unterbrechen und beenden<\/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\/55000186\/\">\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\/55000186?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\/55000186\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"cc9d3a379e\"\/>\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>Wer mit VBA arbeitet, hat im Gegensatz zu Makros einige M&ouml;glichkeiten, den Programmablauf zu beobachten und auf diese Weise Fehler aufzudecken. Auch wenn der VBA-Editor bereits einige J&auml;hrchen auf dem Buckel hat und seit Jahren weder VBA noch der VBA-Editor erweitert wurde, bietet er doch einige M&ouml;glichkeiten zum Debugging. Dieser Artikel zeigt, wie Debugging funktioniert und welche Werkzeuge der VBA-Editor dazu anbietet.<\/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":[66022013,662013,44000011],"tags":[],"class_list":["post-55000186","post","type-post","status-publish","format-standard","hentry","category-66022013","category-662013","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>Debugging im VBA-Editor, Teil 1 - Access [basics]<\/title>\n<meta name=\"description\" content=\"Wer mit VBA arbeitet, hat im Gegensatz zu Makros einige M\u00f6glichkeiten, den Programmablauf zu beobachten und auf diese Weise Fehler aufzudecken. Auch wenn der VBA-Editor bereits einige J\u00e4hrchen auf dem Buckel hat und seit Jahren weder VBA noch der VBA-Editor erweitert wurde, bietet er doch einige M\u00f6glichkeiten zum Debugging. Dieser Artikel zeigt, wie Debugging funktioniert und welche Werkzeuge der VBA-Editor dazu anbietet.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.html\" \/>\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, Teil 1 - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Wer mit VBA arbeitet, hat im Gegensatz zu Makros einige M\u00f6glichkeiten, den Programmablauf zu beobachten und auf diese Weise Fehler aufzudecken. Auch wenn der VBA-Editor bereits einige J\u00e4hrchen auf dem Buckel hat und seit Jahren weder VBA noch der VBA-Editor erweitert wurde, bietet er doch einige M\u00f6glichkeiten zum Debugging. Dieser Artikel zeigt, wie Debugging funktioniert und welche Werkzeuge der VBA-Editor dazu anbietet.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:58:46+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_186_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=\"11\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\/Debugging_im_VBAEditor_Teil_1.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_186_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.html\",\"name\":\"Debugging im VBA-Editor, Teil 1 - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:58:46+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Wer mit VBA arbeitet, hat im Gegensatz zu Makros einige M\\u00f6glichkeiten, den Programmablauf zu beobachten und auf diese Weise Fehler aufzudecken. Auch wenn der VBA-Editor bereits einige J\\u00e4hrchen auf dem Buckel hat und seit Jahren weder VBA noch der VBA-Editor erweitert wurde, bietet er doch einige M\\u00f6glichkeiten zum Debugging. Dieser Artikel zeigt, wie Debugging funktioniert und welche Werkzeuge der VBA-Editor dazu anbietet.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.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\/Debugging_im_VBAEditor_Teil_1.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Debugging_im_VBAEditor_Teil_1.html\",\"name\":\"Debugging im VBA-Editor, Teil 1\"}}]},{\"@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\/55000186","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=55000186"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000186\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}