{"id":55000183,"date":"2013-02-01T00:00:00","date_gmt":"2020-01-24T15:58:45","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=183"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Programmieren_mit_Arrays","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.html","title":{"rendered":"Programmieren mit Arrays"},"content":{"rendered":"<p class='introduction'>Dass Sie unter Access Daten in Tabellen speichern und gezielt darauf zugreifen k&ouml;nnen, wissen Sie als Access [basics]-Leser schon l&auml;ngst. Aber was, wenn Sie nur ein paar gleichartige Daten zwischenspeichern und wieder darauf zugreifen m&ouml;chten Legen Sie dann im VBA-Code f&uuml;r jedes Element eine eigene Variable an Nein! Hier kommen zum Beispiel die Arrays, auch Datenfelder genannt, zum Einsatz. Der vorliegende Artikel zeigt, wie Sie Array erstellen, mit Daten f&uuml;llen und die Daten wieder auslesen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1301_Arrays.mdb<\/b>.<\/p>\n<h2>Arrays<\/h2>\n<p>Array sind prinzipiell eine Art Tabelle, wobei Sie nicht &uuml;ber Datens&auml;tze und Feldnamen auf den in einem Elemend des Array gespeicherten Wert zugreifen, sondern &uuml;ber Index-Werte.<\/p>\n<p>Zus&auml;tzlich kann ein Array eine, zwei oder auch mehr Dimensionen enthalten und diese mit Elementen f&uuml;llen.<\/p>\n<p>Ein Array mit einer Dimension w&uuml;rde beispielsweise einer Tabelle mit einem einzigen Feld entsprechen und ein Array mit zwei Dimensionen einer Tabelle mit einem bis n Feldern. Arrays mit mehr als zwei Dimensionen lassen sich schlecht auf Tabellen &uuml;bertragen.<\/p>\n<h2>Eindimensionale Arrays<\/h2>\n<p>Mit einem eindimensionalen Array lassen sich einfache Wertereihen speichern &#8211; beispielsweise die Monatsnamen. Um die Vereinfachung durch den Einsatz von Array zu verdeutlichen, schauen wir uns zun&auml;chst an, wie Sie Monatsnamen auf umst&auml;ndliche Weise in Variablen speichern k&ouml;nnen. Dazu legen Sie in einem Modul namens <b>mdlArrays <\/b>(VBA-Editor mit <b>Alt + F11 <\/b>) &ouml;ffnen, dann <b>Einf&uuml;gen|Modul <\/b>ausw&auml;hlen) zun&auml;chst die &ouml;ffentlich deklarierten String-Variablen an (dieses und die folgenden Beispiele finden Sie im Modul <b>mdlArrays<\/b>):<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>strMonat01<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Public <\/span>strMonat02<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Public <\/span>strMonat03<span style=\"color:blue;\"> As String<\/span>\r\n...\r\n<span style=\"color:blue;\">Public <\/span>strMonat12<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>In einer Prozedur namens <b>MonateInVariablen <\/b>f&uuml;llen Sie diese mit den entsprechenden Werten:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>MonateInVariablen()\r\n     strMonat01 = \"Januar\"\r\n     strMonat02 = \"Februar\"\r\n     strMonat03 = \"M&auml;rz\"\r\n     ...\r\n     strMonat12 = \"Dezember\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>F&uuml;hren Sie diese Prozedur aus, indem Sie die Einf&uuml;gemarke in der Prozedur platzieren und auf <b>F5 <\/b>dr&uuml;cken. Danach k&ouml;nnen Sie die Werte der einzelnen Variablen etwa im Direktfenster (<b>Strg + G<\/b>) wie folgt abfragen:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> strMonat03\r\nM&auml;rz<\/pre>\n<p>Wenn Sie per VBA auf eine der Variablen zugreifen m&ouml;chten, um den Namen des Monats zu ermitteln, m&uuml;ssen Sie immer den genauen Variablen verwenden. Es gibt keine M&ouml;glichkeit, die zw&ouml;lf Variablen beispielsweise innerhalb einer Schleife schnell auszugeben.<\/p>\n<p>Dies ist ein tolles Bet&auml;tigungsfeld f&uuml;r Array. Ein Array, das eine bestimmte Menge Daten gleichen Datentyps aufnehmen soll (dies ist eine Einschr&auml;nkung, die Sie beachten m&uuml;ssen), deklarieren Sie fast genauso wie eine normale Variable dieses Datentyps. Der einzige Unterschied ist, dass Sie den gr&ouml;&szlig;ten zu erwartenden Wert f&uuml;r den Index hinter dem Variablennamen in Klammern angeben:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>strMonate(11)<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>Im Gegensatz zu den weiter unten besprochenen dynamischen Arrays handelt es sich hierbei um ein statisches Array.<\/p>\n<p>Sicher werden Sie sich fragen, warum hier die Zahl <b>11 <\/b>und nicht die der Anzahl der Monate entsprechende Zahl <b>12 <\/b>angegeben wird. Der Grund ist, dass die Indexwerte standardm&auml;&szlig;ig immer mit <b>0 <\/b>beginnen. Das bedeutet, das die Variable strMonate Werte f&uuml;r die Indexwerte 0 bis 11 aufnehmen kann.  Der erste Eintrag des Arrays <b>strMonate <\/b>wird also mit dem Indexwert <b>0<\/b>, der zweite mit <b>1 <\/b>und so weiter festgelegt:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>MonateInArray()\r\n     strMonate(0) = \"Januar\"\r\n     strMonate(1) = \"Februar\"\r\n     strMonate(2) = \"M&auml;rz\"\r\n     ...\r\n     strMonate(11) = \"Dezember\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dementsprechend liefert etwa die Abfrage des Wertes mit dem Index <b>3 <\/b>den vierten Eintrag des Arrays, hier <b>April<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> strMonate(3)\r\nApril<\/pre>\n<p>Nun scheint es unkomfortabel zu sein, nicht die dem Monat entsprechende Zahl f&uuml;r den Zugriff auf das Array zu verwenden. Dies l&auml;sst sich jedoch leicht &auml;ndern. Wenn Sie nur einen Wert f&uuml;r die Anzahl der Elemente angeben, geht VBA davon aus, dass der Index 0-basiert verwaltet wird. Sie k&ouml;nnen den Wertebereich f&uuml;r den Indexbereich jedoch detailliert festlegen. In diesem Fall m&ouml;chten wir gern die Indexwerte 1 bis 12 verwenden. Dazu deklarieren Sie die Array-Variable wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Public <\/span>strMonate(1 To 12)<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>Die Monatsnamen weisen Sie dementsprechend nun mit den Indexwerten 1 bis 12 zu:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>MonateInArray()\r\n     strMonate(1) = \"Januar\"\r\n     strMonate(2) = \"Februar\"\r\n     strMonate(3) = \"M&auml;rz\"\r\n     ...\r\n     strMonate(12) = \"Dezember\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Somit liefert das Array nun auch bei der Ausgabe die gew&uuml;nschten Werte:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> strMonate(3)\r\nM&auml;rz<\/pre>\n<p>Was aber geschieht, wenn Sie das Array nullbasiert deklarieren, aber dann nicht die Indexwerte <b>0 <\/b>bis <b>11<\/b>, sondern <b>1 <\/b>bis <b>12 <\/b>verwenden Dann tritt der Fehler aus Bild 1 auf.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_183_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_183_001.png\" alt=\"Versuch, ein Array mit einem zu gro&szlig;en Indexwert zu f&uuml;llen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Versuch, ein Array mit einem zu gro&szlig;en Indexwert zu f&uuml;llen<\/p>\n<p>Das Array wurde nur f&uuml;r Indexwerte bis maximal <b>11 <\/b>deklariert, also ist der Indexwert <b>12 <\/b>nicht zul&auml;ssig. Das gilt andersherum genauso &#8211; wenn Sie also ein Array f&uuml;r die Indexwerte <b>1 <\/b>bis <b>12 <\/b>deklarieren und das Element mit dem Indexwert <b>0<\/b> f&uuml;llen wollen, l&ouml;sen Sie ebenfalls einen Fehler aus.<\/p>\n<h2>Alle Werte auslesen<\/h2>\n<p>Kommen wir gleich zu einem wesentlichen Vorteil von Arrays gegen&uuml;ber einzelnen, durchnummerierten Variablen: Sie k&ouml;nnen diese mit wenigen Zeilen per Code durchlaufen.<\/p>\n<p>Wenn Sie wissen, welche f&uuml;r welche Indexwerte Sie die Elementinhalte ausgeben m&ouml;chten, ben&ouml;tigen Sie nur die folgende Prozedur dazu:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>MonateDurchlaufen()\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     <span style=\"color:blue;\">Call<\/span> MonateInArray\r\n     For i = 1 To 12\r\n         <span style=\"color:blue;\">Debug.Print<\/span> strMonate(i)\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur deklariert eine Laufvariable namens <b>i <\/b>und f&uuml;llt das Array <b>strMonate()<\/b> mit der oben erl&auml;uterten Prozedur <b>MonateInArray<\/b>. Danach durchl&auml;uft es eine Schleife und f&uuml;llt dabei die Laufvariable <b>i <\/b>nacheinander mit den Werten von <b>1 <\/b>bis <b>12<\/b>. Die einzige Anweisung innerhalb der Schleife gibt den jeweiligen Wert des Arrays <b>strMonate()<\/b> f&uuml;r den Index <b>i <\/b>aus.<\/p>\n<h2>Eindimensionale Arrays mit For Each durchlaufen<\/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\/55000183\/\">\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\/55000183?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\/55000183\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8d63f6cbe9\"\/>\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>Dass Sie unter Access Daten in Tabellen speichern und gezielt darauf zugreifen k&ouml;nnen, wissen Sie als Access [basics]-Leser schon l&auml;ngst. Aber was, wenn Sie nur ein paar gleichartige Daten zwischenspeichern und wieder darauf zugreifen m&ouml;chten Legen Sie dann im VBA-Code f&uuml;r jedes Element eine eigene Variable an Nein! Hier kommen zum Beispiel die Arrays, auch Datenfelder genannt, zum Einsatz. Der vorliegende Artikel zeigt, wie Sie Array erstellen, mit Daten f&uuml;llen und die Daten wieder auslesen.<\/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":[66012013,662013,44000011],"tags":[],"class_list":["post-55000183","post","type-post","status-publish","format-standard","hentry","category-66012013","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>Programmieren mit Arrays - Access [basics]<\/title>\n<meta name=\"description\" content=\"Dass Sie unter Access Daten in Tabellen speichern und gezielt darauf zugreifen k\u00f6nnen, wissen Sie als Access [basics]-Leser schon l\u00e4ngst. Aber was, wenn Sie nur ein paar gleichartige Daten zwischenspeichern und wieder darauf zugreifen m\u00f6chten? Legen Sie dann im VBA-Code f\u00fcr jedes Element eine eigene Variable an? Nein! Hier kommen zum Beispiel die Arrays, auch Datenfelder genannt, zum Einsatz. Der vorliegende Artikel zeigt, wie Sie Array erstellen, mit Daten f\u00fcllen und die Daten wieder auslesen.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Programmieren mit Arrays - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Dass Sie unter Access Daten in Tabellen speichern und gezielt darauf zugreifen k\u00f6nnen, wissen Sie als Access [basics]-Leser schon l\u00e4ngst. Aber was, wenn Sie nur ein paar gleichartige Daten zwischenspeichern und wieder darauf zugreifen m\u00f6chten? Legen Sie dann im VBA-Code f\u00fcr jedes Element eine eigene Variable an? Nein! Hier kommen zum Beispiel die Arrays, auch Datenfelder genannt, zum Einsatz. Der vorliegende Artikel zeigt, wie Sie Array erstellen, mit Daten f\u00fcllen und die Daten wieder auslesen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:58:45+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_183_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=\"13\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\/Programmieren_mit_Arrays.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_183_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.html\",\"name\":\"Programmieren mit Arrays - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:58:45+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Dass Sie unter Access Daten in Tabellen speichern und gezielt darauf zugreifen k\\u00f6nnen, wissen Sie als Access [basics]-Leser schon l\\u00e4ngst. Aber was, wenn Sie nur ein paar gleichartige Daten zwischenspeichern und wieder darauf zugreifen m\\u00f6chten? Legen Sie dann im VBA-Code f\\u00fcr jedes Element eine eigene Variable an? Nein! Hier kommen zum Beispiel die Arrays, auch Datenfelder genannt, zum Einsatz. Der vorliegende Artikel zeigt, wie Sie Array erstellen, mit Daten f\\u00fcllen und die Daten wieder auslesen.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.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\/Programmieren_mit_Arrays.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Programmieren_mit_Arrays.html\",\"name\":\"Programmieren mit Arrays\"}}]},{\"@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\/55000183","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=55000183"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000183\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}