{"id":55000412,"date":"2018-06-01T00:00:00","date_gmt":"2020-01-24T16:00:10","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=412"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Exceldaten_per_SQL_und_DAO","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html","title":{"rendered":"Exceldaten per SQL und DAO"},"content":{"rendered":"<p class='introduction'>Im der Artikelreihe &#8222;Excel fernsteuern&#8220; haben Sie erfahren, wie Sie per Automation auf eine Excel-Datei zugreifen und dabei Daten aus der Tabelle lesen, schreiben oder bearbeiten k&ouml;nnen. Die Daten Zelle f&uuml;r Zelle zu durchlaufen ist dabei in vielen F&auml;llen unumg&auml;nglich, vor allem, wenn Sie dabei auch noch individuelle Formatierungen unterbringen wollen. Wenn Sie jedoch schnell Daten von Excel nach Access oder umgekehrt bewegen wollen, ohne eine Excel-Instanz zu erzeugen und keine besonderen Anforderungen an die Formatierung haben, gibt es eine praktische Alternative &#8211; und zwar eine, bei der Sie sogar von Ihren vorhandenen DAO-Kenntnissen profitieren k&ouml;nnen.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1803_ExceldatenPerSQLUndDAO.accdb<\/b>.<\/p>\n<h2>Excel-Zugriff per OpenRecordset und SELECT<\/h2>\n<p>Wenn Sie per DAO auf die Daten einer Datenbank zugreifen wollen, um diese entweder per VBA zu durchlaufen oder diese zu l&ouml;schen, anzulegen oder zu bearbeiten, beginnen Sie in der Regel mit dem &ouml;ffnen eines Recordset-Objekts auf Basis der Tabelle oder Abfrage, in der sich die Daten befinden, die durchlaufen oder bearbeitet werden sollen. Die Syntax f&uuml;r die dazu verwendete <b>OpenRecordset<\/b>-Methode des <b>Database<\/b>-Objekts ist dabei hinl&auml;nglich bekannt &#8211; Sie ben&ouml;tigen zwei Objektvariablen namens <b>db <\/b>und <b>rst <\/b>und dann geht es los:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n<span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n<span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n<span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT *                  FROM tblArtikel\", dbOpenDynaset)\r\n'... etwas mit den Datens&auml;tzen machen<\/pre>\n<h2>Ben&ouml;tigte Excel-Informationen<\/h2>\n<p>Aber wie k&ouml;nnen wir das nun f&uuml;r den Zugriff auf die Daten einer Excel-Tabelle wie etwa der aus Bild 1 nutzen Dazu ben&ouml;tigen wir nur einige wenige Informationen &uuml;ber die Excel-Daten, auf die wir zugreifen wollen:<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_412_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_412_001.png\" alt=\"Formular-Entwurf unseres Beispielformulars\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Formular-Entwurf unseres Beispielformulars<\/p>\n<ul>\n<li>den Dateinamen inklusive Verzeichnis,<\/li>\n<li>den Namen der Tabelle und<\/li>\n<li>den Bereich, auf den wir zugreifen wollen.<\/li>\n<\/ul>\n<p>Den Rest bekommen wir durch geschickte Formulierung der <b>SELECT<\/b>-Abfrage hin. Diese ist gar nicht so viel komplizierter aufgebaut wie eine herk&ouml;mmliche SELECT-Anweisung &#8211; wenn man wei&szlig;, wie es geht. Ein Beispiel ist das folgende:<\/p>\n<pre>SELECT * FROM [Artikelliste$A:J] IN 'C:\\...\\Artikel.xlsx'[Excel 8.0;HDR=No;IMEX=0;]<\/pre>\n<p>Diese Abfrage erwartet hinter dem <b>FROM<\/b>-Schl&uuml;sselwort den Namen der Tabelle in der Excel-Datei  (hier <b>Artikelliste<\/b>)und davon durch ein Dollar-Zeichen (<b>$<\/b>) getrennt den betroffenen Bereich, hier <b>A:J<\/b>. Dieser Ausdruck muss in eckigen Klammern zusammengefasst werden. Danach m&uuml;ssen wir allerdings noch angeben, in welcher Datei sich die Daten befinden. Diese geben wir mit dem <b>IN<\/b>-Schl&uuml;sselwort an.<\/p>\n<p>Dieses erwartet zwei Bestandteile. Als Erstes den Dateinamen in Hochkommata (<b>&#8218;C:\\&#8230;\\Artikel.xlsx&#8216;<\/b>) und als zweites in eckigen Klammern Informationen dar&uuml;ber, in welchem Format die gelieferten Daten vorliegen (<b>[Excel 8.0;HDR=No;IMEX=0;]<\/b>).<\/p>\n<p>Mit <b>HDR <\/b>geben Sie an, ob beim Zugriff vom Vorhandensein von Spalten&uuml;berschriften in der ersten Zeile ausgegangen werden soll. In unseren Tests machte es allerdings keinen Unterschied &#8211; wir erhielten sowohl mit <b>Yes <\/b>als auch mit <b>No <\/b>nur die gew&uuml;nschten Daten zur&uuml;ck und nicht die Spalten&uuml;berschriften.<\/p>\n<p>Die Prozedur aus Listing 1 zeigt, wie Sie die verschiedenen Parameter wie Dateiname, Tabellenname und Bereich einzeln in Variablen erfassen und diese dann zu einer <b>SELECT<\/b>-Anweisung zusammenstellen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ExcelPerRecordset()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>strDatei<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strTabelle<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strBereich<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strSQL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     strDatei = CurrentProject.Path & \"\\Artikel.xlsx\"\r\n     strTabelle = \"Artikelliste\"\r\n     strBereich = \"A:J\"\r\n     strSQL = \"SELECT * FROM [\" & strTabelle & \"$\" & strBereich & \"] IN '\" & strDatei & \"'[Excel 8.0;HDR=Yes;IMEX=0;]\"\r\n     <span style=\"color:blue;\">Debug.Print<\/span> strSQL\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(strSQL)\r\n     <span style=\"color:blue;\">Debug.Print<\/span> rst.Fields(0).Name, rst.Fields(1).Name\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         <span style=\"color:blue;\">Debug.Print<\/span> rst.Fields(0), rst.Fields(1)\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Diese Prozedur erstellt ein Recordset auf Basis einer Excel-Tabelle und gibt die enthaltenen Daten aus.<\/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\/55000412\/\">\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\/55000412?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\/55000412\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\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>Im der Artikelreihe &#8222;Excel fernsteuern&#8220; haben Sie erfahren, wie Sie per Automation auf eine Excel-Datei zugreifen und dabei Daten aus der Tabelle lesen, schreiben oder bearbeiten k&ouml;nnen. Die Daten Zelle f&uuml;r Zelle zu durchlaufen ist dabei in vielen F&auml;llen unumg&auml;nglich, vor allem, wenn Sie dabei auch noch individuelle Formatierungen unterbringen wollen. Wenn Sie jedoch schnell Daten von Excel nach Access oder umgekehrt bewegen wollen, ohne eine Excel-Instanz zu erzeugen und keine besonderen Anforderungen an die Formatierung haben, gibt es eine praktische Alternative &#8211; und zwar eine, bei der Sie sogar von Ihren vorhandenen DAO-Kenntnissen profitieren k&ouml;nnen.<\/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":[662018,66032018,44000015],"tags":[],"class_list":["post-55000412","post","type-post","status-publish","format-standard","hentry","category-662018","category-66032018","category-Interaktiv"],"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>Exceldaten per SQL und DAO - Access [basics]<\/title>\n<meta name=\"description\" content=\"Im der Artikelreihe \u00bbExcel fernsteuern\u00ab haben Sie erfahren, wie Sie per Automation auf eine Excel-Datei zugreifen und dabei Daten aus der Tabelle lesen, schreiben oder bearbeiten k\u00f6nnen. Die Daten Zelle f\u00fcr Zelle zu durchlaufen ist dabei in vielen F\u00e4llen unumg\u00e4nglich, vor allem, wenn Sie dabei auch noch individuelle Formatierungen unterbringen wollen. Wenn Sie jedoch schnell Daten von Excel nach Access oder umgekehrt bewegen wollen, ohne eine Excel-Instanz zu erzeugen und keine besonderen Anforderungen an die Formatierung haben, gibt es eine praktische Alternative \u2013 und zwar eine, bei der Sie sogar von Ihren vorhandenen DAO-Kenntnissen profitieren k\u00f6nnen.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exceldaten per SQL und DAO - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Im der Artikelreihe \u00bbExcel fernsteuern\u00ab haben Sie erfahren, wie Sie per Automation auf eine Excel-Datei zugreifen und dabei Daten aus der Tabelle lesen, schreiben oder bearbeiten k\u00f6nnen. Die Daten Zelle f\u00fcr Zelle zu durchlaufen ist dabei in vielen F\u00e4llen unumg\u00e4nglich, vor allem, wenn Sie dabei auch noch individuelle Formatierungen unterbringen wollen. Wenn Sie jedoch schnell Daten von Excel nach Access oder umgekehrt bewegen wollen, ohne eine Excel-Instanz zu erzeugen und keine besonderen Anforderungen an die Formatierung haben, gibt es eine praktische Alternative \u2013 und zwar eine, bei der Sie sogar von Ihren vorhandenen DAO-Kenntnissen profitieren k\u00f6nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T16:00:10+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_412_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=\"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\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_412_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html\",\"name\":\"Exceldaten per SQL und DAO - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html#primaryimage\"},\"datePublished\":\"2020-01-24T16:00:10+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Im der Artikelreihe \\u00bbExcel fernsteuern\\u00ab haben Sie erfahren, wie Sie per Automation auf eine Excel-Datei zugreifen und dabei Daten aus der Tabelle lesen, schreiben oder bearbeiten k\\u00f6nnen. Die Daten Zelle f\\u00fcr Zelle zu durchlaufen ist dabei in vielen F\\u00e4llen unumg\\u00e4nglich, vor allem, wenn Sie dabei auch noch individuelle Formatierungen unterbringen wollen. Wenn Sie jedoch schnell Daten von Excel nach Access oder umgekehrt bewegen wollen, ohne eine Excel-Instanz zu erzeugen und keine besonderen Anforderungen an die Formatierung haben, gibt es eine praktische Alternative \\u2013 und zwar eine, bei der Sie sogar von Ihren vorhandenen DAO-Kenntnissen profitieren k\\u00f6nnen.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.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\/Exceldaten_per_SQL_und_DAO.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Exceldaten_per_SQL_und_DAO.html\",\"name\":\"Exceldaten per SQL und DAO\"}}]},{\"@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\/55000412","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=55000412"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000412\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000412"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000412"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000412"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}