{"id":55000709,"date":"2026-02-01T00:00:00","date_gmt":"2026-02-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/709"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"VBA_basics_Schleifen_mit_For_Do_und_While","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/VBA_basics_Schleifen_mit_For_Do_und_While.html","title":{"rendered":"VBA [basics]: Schleifen mit For, Do und While"},"content":{"rendered":"<p class='introduction'>Einer der gr&ouml;&szlig;ten Vorteile von Programmcode gegen&uuml;ber manueller Arbeit ist die F&auml;higkeit, eine Aufgabe beliebig oft zu wiederholen &#8211; ohne Erm&uuml;dung, ohne Fehler durch Unachtsamkeit und in Sekundenbruchteilen. Genau daf&uuml;r gibt es Schleifen. In VBA stehen daf&uuml;r mehrere Konstrukte zur Verf&uuml;gung: <b>For&#8230;Next<\/b> f&uuml;r Situationen, in denen man genau wei&szlig;, wie oft etwas wiederholt werden soll, <b>For Each&#8230;Next<\/b> zum Durchlaufen von Auflistungen, sowie <b>Do&#8230;Loop<\/b> und <b>While&#8230;Wend<\/b> f&uuml;r F&auml;lle, in denen die Anzahl der Durchl&auml;ufe vorab nicht bekannt ist. In diesem Artikel zeigen wir, wie alle diese Konstrukte funktionieren, wo ihre St&auml;rken liegen und worauf man achten muss.<\/p>\n<h2>For&#8230;Next &#8211; die Z&auml;hlschleife<\/h2>\n<p>Die <b>For&#8230;Next<\/b>-Schleife ist die klassische Z&auml;hlschleife. Man gibt einen Startwert, einen Endwert und optional eine Schrittweite an, und VBA f&uuml;hrt den Schleifenk&ouml;rper f&uuml;r jeden Schritt einmal aus. Das sieht in seiner einfachsten Form so aus:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"><span style=\"color:blue;\"> As Long<\/span><\/span>\r\nFor i = 1 To 10\r\n     <span style=\"color:blue;\"><span style=\"color:blue;\">Debug.Print<\/span><\/span> i\r\n<span style=\"color:blue;\">Next<\/span> i<\/pre>\n<p>Dieser Code gibt die Zahlen 1 bis 10 im Direktbereich aus. Die Z&auml;hlvariable <b>i<\/b> beginnt bei <b>1<\/b>, wird nach jedem Durchlauf um <b>1<\/b> erh&ouml;ht und die Schleife endet, sobald <b>i<\/b> den Wert <b>10<\/b> &uuml;berschreitet.<\/p>\n<p>Das Schreiben von <b>Next i<\/b> statt nur <b>Next<\/b> ist optional, macht den Code bei verschachtelten Schleifen aber deutlich lesbarer &#8211; denn bei mehreren ineinander verschachtelten Schleifen sieht man sofort, welches <b>Next<\/b> zu welchem <b>For<\/b> geh&ouml;rt.<\/p>\n<p>Als Z&auml;hlvariable sollte man stets <b>Long<\/b> verwenden &#8211; nicht <b>Integer<\/b>, wie wir im Artikel <b>VBA [basics]: Variablen und Datentypen<\/b> bereits begr&uuml;ndet haben.<\/p>\n<h2>Schrittweite anpassen mit Step<\/h2>\n<p>Standardm&auml;&szlig;ig z&auml;hlt <b>For&#8230;Next<\/b> in Einerschritten aufw&auml;rts. Mit dem Schl&uuml;sselwort <b>Step<\/b> l&auml;sst sich das &auml;ndern &#8211; sowohl die Schrittweite als auch die Richtung:<\/p>\n<pre>'Nur gerade Zahlen von 2 bis 20:\r\nFor i = 2 To 20 Step 2\r\n     <span style=\"color:blue;\"><span style=\"color:blue;\">Debug.Print<\/span><\/span> i\r\n<span style=\"color:blue;\">Next<\/span> i\r\n'R&uuml;ckw&auml;rts von 10 bis 1:\r\nFor i = 10 To 1 Step -1\r\n     <span style=\"color:blue;\"><span style=\"color:blue;\">Debug.Print<\/span><\/span> i\r\n<span style=\"color:blue;\">Next<\/span> i<\/pre>\n<p>Das R&uuml;ckw&auml;rtsz&auml;hlen ist besonders dann n&uuml;tzlich, wenn man w&auml;hrend des Schleifendurchlaufs Elemente aus einer Liste entfernt &#8211; weil man beim Vorw&auml;rtsz&auml;hlen nach dem Entfernen eines Elements die Indizes durcheinanderbringt.<\/p>\n<h2>For Each&#8230;Next &#8211; Auflistungen durchlaufen<\/h2>\n<p><b>For Each&#8230;Next<\/b> ist die elegantere Variante, wenn man nicht mit einem Z&auml;hler arbeiten m&ouml;chte, sondern direkt &uuml;ber die Elemente einer Auflistung iterieren will.<\/p>\n<p>In Access begegnet uns das h&auml;ufig beim Durchlaufen aller Steuerelemente eines Formulars oder aller Felder eines Datensatzes:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>ctl<span style=\"color:blue;\"><span style=\"color:blue;\"> As <\/span><\/span>Control\r\nFor Each ctl In Me.Controls\r\n     <span style=\"color:blue;\"><span style=\"color:blue;\">Debug.Print<\/span><\/span> ctl.Name\r\n<span style=\"color:blue;\">Next<\/span> ctl<\/pre>\n<p>Dieser Code gibt die Namen aller Steuerelemente des aktuellen Formulars im Direktbereich aus.<\/p>\n<p>Man muss weder wissen, wie viele Steuerelemente vorhanden sind, noch einen Z&auml;hler verwalten &#8211; <b>For Each<\/b> erledigt das automatisch.<\/p>\n<p>Die Schleifenvariable (<b>ctl<\/b> in diesem Fall) nimmt bei jedem Durchlauf das n&auml;chste Element der Auflistung an.<\/p>\n<p>Wichtig: Bei vielen COM-Auflistungen wie <b>Controls<\/b> oder <b>Fields<\/b> kann das Hinzuf&uuml;gen oder Entfernen von Elementen w&auml;hrend eines <b>For Each<\/b>-Durchlaufs zu Laufzeitfehlern f&uuml;hren. Wenn man Elemente entfernen muss, verwendet man stattdessen eine normale <b>For&#8230;Next<\/b>-Schleife, die r&uuml;ckw&auml;rts l&auml;uft.<\/p>\n<h2>Do&#8230;Loop &#8211; wenn die Anzahl der Durchl&auml;ufe unbekannt ist<\/h2>\n<p>Manchmal wei&szlig; man beim Start einer Schleife nicht, wie oft sie durchlaufen werden soll &#8211; sondern nur, unter welcher Bedingung sie enden soll. Daf&uuml;r ist <b>Do&#8230;Loop<\/b> gedacht. Es gibt vier gebr&auml;uchliche Varianten, die sich in der Position und Art der Bedingung unterscheiden.<\/p>\n<p>Die erste Variante pr&uuml;ft die Bedingung am Anfang mit <b>While<\/b> &#8211; die Schleife l&auml;uft, solange die Bedingung wahr ist:<\/p>\n<pre><span style=\"color:blue;\">Do While<\/span> lngZaehler &lt; 100\r\n     lngZaehler = lngZaehler + 1\r\n<span style=\"color:blue;\">Loop<\/span><\/pre>\n<p>Die zweite Variante pr&uuml;ft am Anfang mit <b>Until<\/b> &#8211; die Schleife l&auml;uft, bis die Bedingung wahr wird:<\/p>\n<pre>Do Until lngZaehler &gt;= 100\r\n     lngZaehler = lngZaehler + 1\r\n<span style=\"color:blue;\">Loop<\/span><\/pre>\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\/55000709\/\">\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\/55000709?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\/55000709\/\"\/>\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>Einer der gr&ouml;&szlig;ten Vorteile von Programmcode gegen&uuml;ber manueller Arbeit ist die F&auml;higkeit, eine Aufgabe beliebig oft zu wiederholen &#8211; ohne Erm&uuml;dung, ohne Fehler durch Unachtsamkeit und in Sekundenbruchteilen. Genau daf&uuml;r gibt es Schleifen. In VBA stehen daf&uuml;r mehrere Konstrukte zur Verf&uuml;gung: <b>For&#8230;Next<\/b> f&uuml;r Situationen, in denen man genau wei&szlig;, wie oft etwas wiederholt werden soll, <b>For Each&#8230;Next<\/b> zum Durchlaufen von Auflistungen, sowie <b>Do&#8230;Loop<\/b> und <b>While&#8230;Wend<\/b> f&uuml;r F&auml;lle, in denen die Anzahl der Durchl&auml;ufe vorab nicht bekannt ist. In diesem Artikel zeigen wir, wie alle diese Konstrukte funktionieren, wo ihre St&auml;rken liegen und worauf man achten 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-55000709","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]: Schleifen mit For, Do und While - Access [basics]<\/title>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/VBA_basics_Schleifen_mit_For_Do_und_While.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"VBA [basics]: Schleifen mit For, Do und While - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Einer der gr&ouml;&szlig;ten Vorteile von Programmcode gegen&uuml;ber manueller Arbeit ist die F&auml;higkeit, eine Aufgabe beliebig oft zu wiederholen - ohne Erm&uuml;dung, ohne Fehler durch Unachtsamkeit und in Sekundenbruchteilen. Genau daf&uuml;r gibt es Schleifen. In VBA stehen daf&uuml;r mehrere Konstrukte zur Verf&uuml;gung: For...Next f&uuml;r Situationen, in denen man genau wei&szlig;, wie oft etwas wiederholt werden soll, For Each...Next zum Durchlaufen von Auflistungen, sowie Do...Loop und While...Wend f&uuml;r F&auml;lle, in denen die Anzahl der Durchl&auml;ufe vorab nicht bekannt ist. In diesem Artikel zeigen wir, wie alle diese Konstrukte funktionieren, wo ihre St&auml;rken liegen und worauf man achten muss.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/VBA_basics_Schleifen_mit_For_Do_und_While.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 name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"9\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\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Schleifen_mit_For_Do_und_While.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Schleifen_mit_For_Do_und_While.html\",\"name\":\"VBA [basics]: Schleifen mit For, Do und While - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"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_Schleifen_mit_For_Do_und_While.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/VBA_basics_Schleifen_mit_For_Do_und_While.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Schleifen_mit_For_Do_und_While.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_Schleifen_mit_For_Do_und_While.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/VBA_basics_Schleifen_mit_For_Do_und_While.html\",\"name\":\"VBA [basics]: Schleifen mit For, Do und While\"}}]},{\"@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\/55000709","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=55000709"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000709\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}