{"id":55000207,"date":"2014-02-01T00:00:00","date_gmt":"2020-01-24T15:58:55","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=207"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Rekursion_mit_VBA","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.html","title":{"rendered":"Rekursion mit VBA"},"content":{"rendered":"<p class='introduction'>Manche Abl&auml;ufe erfordern den Einsatz von Schleifen mit einer bestimmten Anzahl von Durchl&auml;ufen oder einer vordefinierten Abbruchbedingung. In speziellen F&auml;llen reichen Schleifen jedoch nicht aus, um zum Ziel zu kommen: Dann m&uuml;ssen rekursiv definierte Funktionen her. Dies sind solche Funktionen, die sich selbst aufrufen. Der vorliegende Artikel erkl&auml;rt, wie solche Funktionen arbeiten und liefert einige Beispiele.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1307_RekursionMitVBA.mdb<\/b>.<\/p>\n<h2>Beispiel Fakult&auml;t<\/h2>\n<p>Bei der rekursiven Programmierung ruft sich eine Funktion selbst auf. F&uuml;r einen einfachen Einstieg nehmen wir ein Beispiel, dass vielerorts zum Einsatz kommt: Die Berechnung der Fakult&auml;t einer Zahl. Die Fakult&auml;t einer Zahl <b>n <\/b>wird so definiert:<\/p>\n<pre>n! = n x (n-1) x ... x 2 x 1<\/pre>\n<p>Das bedeutet, dass man alle ganzen Zahlen miteinander multipliziert, die kleiner oder gleich der Zahl n sind. Ein Sonderfall ist die Fakult&auml;t von <b>0 <\/b>&#8211; hierf&uuml;r ist n&auml;mlich der Wert <b>1 <\/b>definiert.<\/p>\n<p>Um den Schritt zur Rekursion zu machen, definieren wir die Fakult&auml;t etwas anders:<\/p>\n<pre>n! = n x (n-1)!<\/pre>\n<p>Die Fakult&auml;t ist hier als das Produkt der Zahl selbst mit der Fakult&auml;t der n&auml;chstkleineren Zahl definiert. Und diese Fakult&auml;t entspricht nat&uuml;rlich wiederum die Zahl multipliziert mit der Fakult&auml;t der n&auml;chstkleineren Zahl. Es gibt hier auch eine Ausnahme: Wenn <b>n <\/b>den Wert <b>1 <\/b>annimmt, ist die Fakult&auml;t von <b>n <\/b>gleich <b>1<\/b>.<\/p>\n<h2>Fakult&auml;t per VBA<\/h2>\n<p>Wenn wir die Fakult&auml;t mit einer Funktion berechnen m&ouml;chten, die sich selbst aufruft, m&uuml;ssen wir dieser zun&auml;chst einmal die Zahl &uuml;bergeben, f&uuml;r welche die Fakult&auml;t berechnet werden soll. Der Funktionskopf sieht also beispielsweise so aus:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Fakultaet(lngZahl                       <span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p>Beim ersten Aufruf soll die Funktion die Fakult&auml;t f&uuml;r die Zahl <b>lngZahl <\/b>ermitteln. Diese entspricht aber wiederum dem Produkt der Zahl und der Fakult&auml;t der Zahl minus Eins.<\/p>\n<p>Innerhalb der Funktion rufen wir die Funktion also erneut auf &#8211; mit der um  Eins verminderten Zahl. Das Ergebnis multiplizieren wir dann mit der Zahl selbst.<\/p>\n<p>Die Anweisung sieht also so aus:<\/p>\n<pre>Fakultaet = lngZahl * Fakultaet(lngZahl - 1)<\/pre>\n<p>Insgesamt erhielten wir nun eine Funktion wie die Folgende:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Fakultaet(lngZahl                       <span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n     Fakultaet = lngZahl *                  Fakultaet(lngZahl - 1)\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Wenn Sie die Funktion nun etwa aus dem Direktfenster mit dem Befehl <b>Debug.Print Fakultaet(4) <\/b>aufrufen, sollte das Ergebnis eigentlich 24 lauten (<b>1 x 2 x 3 x 4<\/b>). Allerdings zeigt Access nach kurzer Zeit eine Fehlermeldung an, die wie in Bild 1 aussieht. Was ist hier passiert Ganz einfach: Wir haben der Funktion nicht mitgeteilt, wann sie anhalten soll. In diesem Fall berechnet sie nacheinander die Fakult&auml;t f&uuml;r <b>4<\/b>, <b>3<\/b>, <b>2<\/b>, <b>1<\/b>, <b>0<\/b>, <b>-1<\/b>, <b>-2<\/b> und so weiter. <\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_207_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_207_001.png\" alt=\"Fehler bei rekursiver Funktion ohne Abbruchbedingung\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Fehler bei rekursiver Funktion ohne Abbruchbedingung<\/p>\n<p>Der Fehler wird schlie&szlig;lich dadurch ausgel&ouml;st, dass die Funktion die Zwischenergebnisse jeweils im Arbeitsspeicher unterbringen muss &#8211; und mit wachsender Anzahl Aufrufe ist der Speicher irgendwann einmal voll. <\/p>\n<p>Also bauen wir die Funktion wie in Listing 1 auf. Die Funktion pr&uuml;ft bei jedem Aufruf zun&auml;chst, ob der Wert der mit <b>lngZahl <\/b>gelieferten Zahl gleich Eins ist. Ist dies der Fall, ist auch die Fakult&auml;t Eins &#8211; die Funktion braucht also kein weiteres Mal aufgerufen zu werden. Der Ablauf zur Berechnung der Fakult&auml;t von 4 sieht also so aus:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Fakultaet(lngZahl<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Double<\/span>\r\n     <span style=\"color:blue;\">If <\/span>lngZahl = 1<span style=\"color:blue;\"> Then<\/span>\r\n         Fakultaet = 1\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         Fakultaet = lngZahl * Fakultaet(lngZahl - 1)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 1: Rekursive Berechnung der Fakult&auml;t einer Zahl<\/p>\n<ul>\n<li>Erster Aufruf mit <b>lngZahl = 4<\/b><\/li>\n<li>Zweiter Aufruf mit <b>lngZahl = 3<\/b><\/li>\n<li>Dritter Aufruf mit <b>lngZahl = 2<\/b><\/li>\n<li>Vierter Aufruf mit <b>lngZahl = 1<\/b>: Fakultaet liefert <b>1 <\/b>zur&uuml;ck, der vierte Aufruf ist beendet.<\/li>\n<li>Im dritten Aufruf wird der Funktionswert <b>Fakultaet <\/b>auf <b>2 x 1 = 2 <\/b>eingestellt, der dritte Aufruf ist beendet.<\/li>\n<li>Im zweiten Aufruf wird der Funktionswert <b>Fakultaet <\/b>auf <b>3 x 2 = 6 <\/b>eingestellt, der zweite Aufruf ist beendet.<\/li>\n<li>Im ersten Aufruf wird der Funktionswert <b>Fakultaet <\/b>auf <b>4 x 6 = 24 <\/b>eingestellt, der erste Aufruf ist beendet und gibt als Ergebnis <b>24 <\/b>zur&uuml;ck.<\/li>\n<\/ul>\n<p>Hier wird auch gleich deutlich, dass eine rekursiv definierte Funktion immer Aktionen vor dem Aufruf der n&auml;chsten Ebnee ausf&uuml;hren kann, aber auch Aktionen nach diesem Aufruf. In diesem Fall tritt die Zuweisung des Ergebnisses immer erst nach dem Aufruf der n&auml;chsten Ebene und deren Abarbeitung auf.<\/p>\n<h2>Iteration statt Rekursion<\/h2>\n<p>In vielen F&auml;llen kann man die Rekursion durch eine Iteration ersetzen. In unserem Fall s&auml;he eine entsprechende Funktion wie in Listing 2 aus. Die Funktion <b>FakultaetIterativ <\/b>durchl&auml;uft eine <b>For&#8230;Next<\/b>-Schleife &uuml;ber die Werte von <b>1 <\/b>bis zu der Zahl, deren Fakult&auml;t ermittelt werden soll.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>FakultaetIterativ(lngZahl<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Double<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>dblFakultaet<span style=\"color:blue;\"> As Double<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     FakultaetIterativ = 1\r\n     For i = 1 To lngZahl\r\n         FakultaetIterativ = i * FakultaetIterativ\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 2: Iterative Berechnung der Fakult&auml;t<\/p>\n<p>Dabei multipliziert sie einfach das jeweils in <b>FakultaetIterativ <\/b>gespeicherte Ergebnis, das zu Beginn auf <b>1 <\/b>eingestellt wird, mit dem aktuellen Wert der Laufvariablen <b>i<\/b> &#8211; also <b>1 x 1 = 1 <\/b>im ersten Durchlauf, <b>2 x 1 = 2 <\/b>im zweiten, <b>3 x 2 = 6 <\/b>im dritten und <b>6 x 4 = 24 <\/b>im vierten Durchlauf.<\/p>\n<p>Die Vorteile dieser Variante liegen im geringeren Speicherbedarf und daraus resultierend in einer besseren Performance.<\/p>\n<p>Allerdings lassen sich viele Probleme, die sich mit einfachen rekursiven Funktionen abbilden lassen, nicht durch Iteration darstellen. Das hier genannte Beispiel der Fakult&auml;t ist geradlinig &#8211; jeder Funktionsaufruf f&uuml;hrt zu maximal einem weiteren Funktionsaufruf. Es gibt jedoch auch Probleme, bei denen innerhalb der rekursiven Funktion mehrfache Aufrufe der Funktion stattfinden &#8211; beispielsweise innerhalb einer Schleife.<\/p>\n<p>Daf&uuml;r gibt es einige Beispiele, zum Beispiel diese:<\/p>\n<ul>\n<li>Einlesen der Verzeichnisse und Dateien: Hier kann jedes Verzeichnis Unterverzeichnisse enthalten, die wiederum eingelesen werden m&uuml;ssen.<\/li>\n<li>Hierarchische Daten wie Vorgesetzte\/Untergebene oder St&uuml;cklisten, bei denen jedes Bauteil aus einem oder mehreren anderen Teilen besteht<\/li>\n<\/ul>\n<h2>Vorgesetze und Untergebene<\/h2>\n<p>Das wohl bekannteste Beispiel f&uuml;r den Einsatz von Rekursion unter Access und VBA ist das der Mitarbeiterhierarchie. <\/p>\n<p>Hier soll es einen oder mehrerer Vorgesetzte einer obersten Ebene geben, die sich dadurch auszeichnen, dass sie keinen Vorgesetzten haben. Alle anderen Mitarbeiter haben einen Vorgesetzten &#8211; entweder den der obersten Ebene oder einen darunter angesiedelten Mitarbeiter.<\/p>\n<p>Typischerweise legt man das Datenmodell so an, dass man die sogenannte reflexive Beziehung innerhalb einer einzigen Tabelle abbildet. Dies sieht so aus, dass etwa die Tabelle <b>tblMitarbeiter <\/b>wie in Bild 2 ein Feld namens <b>VorgesetzterID <\/b>aufweist, dass mit dem Prim&auml;rschl&uuml;sselfeld der gleichen Tabelle verkn&uuml;pft ist.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_207_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_207_002.png\" alt=\"Vorgesetzte, Variante I\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Vorgesetzte, Variante I<\/p>\n<p>Im Beziehungsfenster haben wir die Tabelle <b>tblMitarbeiter <\/b>zweimal hinzugef&uuml;gt, um die Beziehung anlegen zu k&ouml;nnen. Man kann dann wie in Bild 3 den jeweiligen Vorgesetzten in das Feld <b>VorgesetzterID <\/b>eintragen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_207_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_207_003.png\" alt=\"Werte der Tabelle tblMitarbeiter inklusive der Vorgesetzten\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Werte der Tabelle tblMitarbeiter inklusive der Vorgesetzten<\/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>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\/55000207\/\">\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\/55000207?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\/55000207\/\"\/>\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>Manche Abl&auml;ufe erfordern den Einsatz von Schleifen mit einer bestimmten Anzahl von Durchl&auml;ufen oder einer vordefinierten Abbruchbedingung. In speziellen F&auml;llen reichen Schleifen jedoch nicht aus, um zum Ziel zu kommen: Dann m&uuml;ssen rekursiv definierte Funktionen her. Dies sind solche Funktionen, die sich selbst aufrufen. Der vorliegende Artikel erkl&auml;rt, wie solche Funktionen arbeiten und liefert einige Beispiele.<\/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":[662013,66072013,44000011],"tags":[],"class_list":["post-55000207","post","type-post","status-publish","format-standard","hentry","category-662013","category-66072013","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>Rekursion mit VBA - Access [basics]<\/title>\n<meta name=\"description\" content=\"Manche Abl\u00e4ufe erfordern den Einsatz von Schleifen mit einer bestimmten Anzahl von Durchl\u00e4ufen oder einer vordefinierten Abbruchbedingung. In speziellen F\u00e4llen reichen Schleifen jedoch nicht aus, um zum Ziel zu kommen: Dann m\u00fcssen rekursiv definierte Funktionen her. Dies sind solche Funktionen, die sich selbst aufrufen. Der vorliegende Artikel erkl\u00e4rt, wie solche Funktionen arbeiten und liefert einige Beispiele.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rekursion mit VBA - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Manche Abl\u00e4ufe erfordern den Einsatz von Schleifen mit einer bestimmten Anzahl von Durchl\u00e4ufen oder einer vordefinierten Abbruchbedingung. In speziellen F\u00e4llen reichen Schleifen jedoch nicht aus, um zum Ziel zu kommen: Dann m\u00fcssen rekursiv definierte Funktionen her. Dies sind solche Funktionen, die sich selbst aufrufen. Der vorliegende Artikel erkl\u00e4rt, wie solche Funktionen arbeiten und liefert einige Beispiele.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T15:58:55+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_207_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=\"16\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\/Rekursion_mit_VBA.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_207_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.html\",\"name\":\"Rekursion mit VBA - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.html#primaryimage\"},\"datePublished\":\"2020-01-24T15:58:55+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Manche Abl\\u00e4ufe erfordern den Einsatz von Schleifen mit einer bestimmten Anzahl von Durchl\\u00e4ufen oder einer vordefinierten Abbruchbedingung. In speziellen F\\u00e4llen reichen Schleifen jedoch nicht aus, um zum Ziel zu kommen: Dann m\\u00fcssen rekursiv definierte Funktionen her. Dies sind solche Funktionen, die sich selbst aufrufen. Der vorliegende Artikel erkl\\u00e4rt, wie solche Funktionen arbeiten und liefert einige Beispiele.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.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\/Rekursion_mit_VBA.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Rekursion_mit_VBA.html\",\"name\":\"Rekursion mit VBA\"}}]},{\"@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\/55000207","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=55000207"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000207\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}