{"id":55000005,"date":"2015-02-01T00:00:00","date_gmt":"2020-08-25T08:42:48","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=5"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Von_VBA_zu_C_Schleifen","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Von_VBA_zu_C_Schleifen\/","title":{"rendered":"Von VBA zu C#: Schleifen"},"content":{"rendered":"<p><b>Schleifen spielen bei der Programmierung eine wichtige Rolle. Unter VBA gibt es die For&#8230;Next- und die For&#8230;Each-Schleife sowie die verschiedenen Varianten der Do&#8230;-Schleife. In diesem Artikel schauen wir uns an, wie Sie diese Schleifentypen unter C# abbilden und welche Besonderheiten dabei auftreten.<\/b><\/p>\n<p><b>Beispiele<\/b><\/p>\n<p>Wenn Sie die Beispiele dieses Artikels ausprobieren m&ouml;chten, erstellen Sie eine C#-Konsolenanwendung und f&uuml;gen die Anweisungen in die Prozedur <b>static void main() <\/b>ein. Bet&auml;tigen Sie dann die Taste <b>F5<\/b>, um die Methode zu starten.<\/p>\n<p><b>For&#8230;Next-Schleife<\/b><\/p>\n<p>Die <b>For&#8230;Next<\/b>-Schleife aus VBA sieht so aus:<\/p>\n<pre>For i = 1 To 10\r\n     <span style=\"color:blue;\">Debug.Print<\/span> \"Aktuelle Zahl: \" & i\r\n<span style=\"color:blue;\">Next<\/span> i<\/pre>\n<p>Unter C# sieht dies etwas anders aus, l&auml;sst sich aber identisch abbilden:<\/p>\n<pre>for (int i = 1; i &lt;= 10; i++)\r\n{\r\n     Console.WriteLine(\"Aktuelle Zahl: {0}\", i);\r\n}<\/pre>\n<p>Der wichtigste Teil ist hier die erste Zeile &#8211; die innerhalb der Schleife ausgef&uuml;hrten Anweisungen packen Sie, wie von C# gewohnt, einfach in geschweifte Klammern. Die erste Zeile enth&auml;lt das Schl&uuml;sselwort <b>for <\/b>sowie in Klammern drei Parameter:<\/p>\n<ul>\n<li>Der erste deklariert die Laufvariable, hier <b>i<\/b>, und den Startwert der Variablen.<\/li>\n<li>Der zweite legt die Abbruchbedingung fest. In diesem Fall soll die Schleife solange laufen, wie <b>i <\/b>einen Wert kleiner oder gleich <b>10 <\/b>aufweist. Die Abbruchbedingung muss immer einen Boolean-Wert als Ergebnis liefern.<\/li>\n<li>Schlie&szlig;lich folgt der dritte Parameter, der die &Auml;nderung der Laufvariablen festlegt. In diesem Fall sorgt <b>i++ <\/b>daf&uuml;r, dass <b>i <\/b>mit jedem Durchlauf um den Wert <b>1<\/b> erh&ouml;ht wird.<\/li>\n<\/ul>\n<p>Das Ergebnis dieser Schleife sieht so aus:<\/p>\n<pre>Aktuelle Zahl: 1\r\nAktuelle Zahl: 2\r\nAktuelle Zahl: 3\r\n...\r\nAktuelle Zahl: 10<\/pre>\n<p><b>Deklaration der Laufvariablen<\/b><\/p>\n<p>Nun haben wir die Laufvariable direkt im ersten Parameter der Schleife deklariert und instanziert:<\/p>\n<pre>int i = 1<\/pre>\n<p>Dadurch legen wir gleichzeitig den G&uuml;ltigkeitsbereich der Variablen auf die Schleife selbst fest. Nach dem Beenden der Schleife k&ouml;nnen Sie nicht mehr auf die Variable zugreifen.<\/p>\n<p>Das ist aber kein Problem, denn f&uuml;r F&auml;lle, in denen Sie den Inhalt der Variablen sp&auml;ter noch ben&ouml;tigen, deklarieren Sie die Laufvariable einfach vor Beginn der Schleife. Dies sieht dann wie folgt aus:<\/p>\n<pre>int i;\r\nfor (i = 1; i &lt;= 10; i++)\r\n{\r\n     Console.WriteLine(\"Aktuelle Zahl: {0}\", i);\r\n}\r\nConsole.WriteLine(\"Wert von i: {0}\", i);<\/pre>\n<p>Die abschlie&szlig;ende Anweisung gibt nun den Wert der Z&auml;hlervariablen nach dem letzten Durchlaufen der Schleife aus:<\/p>\n<pre>Aktuelle Zahl: 1\r\nAktuelle Zahl: 2\r\nAktuelle Zahl: 3\r\n...\r\nAktuelle Zahl: 10\r\nWert von i: 11<\/pre>\n<p>H&auml;tten Sie im ersten Beispiel auf die gleiche Art auf die Laufvariable zugegriffen, h&auml;tte dies einen Syntaxfehler hervorgerufen.<\/p>\n<p>Ob Sie die Z&auml;hlervariablen nun jeweils vor dem Start der Schleife oder erst in der <b>for&#8230;<\/b>-Anweisung deklarieren, h&auml;ngt von der geplanten Nutzung dieser Variable ab &#8211; soll diese vor dem Start der Schleife oder im Anschluss gef&uuml;llt oder ausgelesen werden, m&uuml;ssen Sie die Deklaration nat&uuml;rlich vor dem ersten Zugriff programmieren. Anderenfalls haben Sie die freie Wahl.<\/p>\n<p><b>Herunterz&auml;hlen<\/b><\/p>\n<p>Wenn Sie der Wert der Z&auml;hlervariablen beim Initialisieren der Schleife gr&ouml;&szlig;er sein soll als beim Beenden, legen Sie die Werte im ersten und zweiten Parameter der <b>for&#8230;<\/b>-Anweisung entsprechend fest. F&uuml;r den dritten Parameter definieren Sie dann die Schrittweiter f&uuml;r das Herunterz&auml;hlen. Angenommen, Sie wollen jeweils den Wert <b>1 <\/b>abziehen, verwenden Sie an dieser Stelle den Ausdruck <b>i&#8211;<\/b>:<\/p>\n<pre>int i;\r\nfor (i = 10; i &gt;= 1; i--)\r\n{\r\n     Console.WriteLine(\"Aktuelle Zahl: {0}\", i);\r\n}<\/pre>\n<p><b>Schrittweite festlegen<\/b><\/p>\n<p>Was geschieht nun, wenn Sie der Z&auml;hlervariablen nicht mit jedem Durchlauf genau den Wert <b>1 <\/b>hinzuf&uuml;gen m&ouml;chten, sondern beispielsweise den Wert <b>2<\/b> Die Antwort ist einfach: Sie k&ouml;nnen jeden beliebigen Ausdruck f&uuml;r den dritten Parameter verwenden, welcher der Laufvariablen einen Wert zuweist. Im folgenden Beispiel sollen alle Werte von <b>0 <\/b>bis <b>10 <\/b>mit der Schrittweite <b>2 <\/b>durchlaufen werden. Also verwenden wir f&uuml;r den dritten Parameter den Ausdruck <b>i +=2<\/b>:<\/p>\n<pre>int i;\r\nfor (i = 0; i &lt;= 10; i += 2)\r\n{\r\n     Console.WriteLine(\"Aktuelle Zahl: {0}\", i);\r\n}<\/pre>\n<p>Sie k&ouml;nnten dort auch nach guter, alter VBA-Manier <b>i = i + 2 <\/b>einsetzen:<\/p>\n<pre>for (i = 0; i &lt;= 10; i = i + 2)<\/pre>\n<p>Wichtig ist allein, dass Sie <b>i <\/b>dort einen Wert zuweisen.<\/p>\n<p><b>Verschachtelte for-Schleifen<\/b><\/p>\n<p>Genau wie die <b>For&#8230;Next<\/b>-Schleife unter VBA k&ouml;nnen Sie auch die <b>for<\/b>-Schleife unter C# verschachteln.<\/p>\n<p>Das folgende Beispiel soll beispielsweise eine &auml;u&szlig;ere Schleife mit der Laufvariablen <b>x <\/b>und eine innere Schleife mit der Laufvariablen <b>y <\/b>durchlaufen. Dabei soll die Anweisungen der inneren Schleife das Produkt der aktuellen Werte von <b>x <\/b>und <b>y <\/b>hintereinander ausgeben, wobei jeweils f&uuml;nf Zeichen Platz f&uuml;r die Zahlenwerte vorgesehen werden sollen.<\/p>\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>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 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:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000005\/\">\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=\"\/data\/wp\/v2\/posts\/55000005?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<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000005\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"b14c72894d\"\/>\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>Schleifen spielen bei der Programmierung eine wichtige Rolle. Unter VBA gibt es die For&#8230;Next- und die For&#8230;Each-Schleife sowie die verschiedenen Varianten der Do&#8230;-Schleife. In diesem Artikel schauen wir uns an, wie Sie diese Schleifentypen unter C# abbilden und welche Besonderheiten dabei auftreten.<\/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":[66012015,662015,44000001,44000004,44000022],"tags":[],"yst_prominent_words":[66062047,66062059,66062046,66062061],"class_list":["post-55000005","post","type-post","status-publish","format-standard","hentry","category-66012015","category-662015","category-CGrundlagen","category-Loesungen","category-Von_Access_zu_NET"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000005","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000005"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000005\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000005"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}