{"id":55001141,"date":"2018-08-01T00:00:00","date_gmt":"2020-05-13T21:11:35","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1141"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Tabellenimport_per_VBA","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/","title":{"rendered":"Tabellenimport per VBA"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg06.met.vgwort.de\/na\/71ca2e604bbf4db0ae22e77478991536\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Im Beitrag &#8222;Gespeicherte Importe und Exporte per VBA&#8220; zeigen wir, wie Sie etwa den Export oder Import von Textdateien per VBA steuern k&ouml;nnen. Mit diesen grundlegenden Techniken ausgestattet k&ouml;nnen wir noch einen Schritt weitergehen und beispielsweise auch komplette Tabelle aus einer anderen Datenbank importieren und diesen Vorgang per VBA ausf&uuml;hren. Wenn Sie etwa regelm&auml;&szlig;ig immer wieder die gleichen Tabellen aus einer Vorlagendatenbank in die Zieldatenbank importieren, m&uuml;ssen Sie normalerweise immer den entsprechenden Import-Assistenten dazu nutzen. Das k&ouml;nnen Sie von nun an auch mit ein paar Zeilen VBA-Code erledigen.<\/b><\/p>\n<p>Wenn Sie einen Import von Access-Objekten wie hier von Access-Tabellen aus einer anderen Datenbank automatisieren wollen, k&ouml;nnen Sie dies ganz einfach erledigen.<\/p>\n<h2>Manueller Import als Voraussetzung<\/h2>\n<p>Als Erstes f&uuml;hren Sie den Import einmal mit dem daf&uuml;r vorgesehenen Assistenten durch. Dazu w&auml;hlen Sie im Ribbon den Eintrag <b>Externe Daten|Importieren und Verkn&uuml;pfen|Neue Datenquelle|Aus Datenbank|Access <\/b>aus (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1141_001.png\" alt=\"Aufruf des Importassistenten f&uuml;r Daten aus einer Access-Datenbank\" width=\"424,7115\" height=\"371,0543\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Aufruf des Importassistenten f&uuml;r Daten aus einer Access-Datenbank<\/span><\/b><\/p>\n<p>Im nun erscheinenden Dialog <b>Externe Daten &#8211; Access-Datenbank <\/b>geben Sie oben zun&auml;chst den Namen der als Quelle zu verwendenden Access-Datenbank ein oder w&auml;hlen diesen &uuml;ber die <b>Durchsuchen&#8230;<\/b>-Schaltfl&auml;che aus. Danach entscheiden Sie sich, ob Sie die Access-Objekte importieren wollen oder, wenn Sie nur Tabellen in den Import einbeziehen wollen, ob diese verkn&uuml;pft werden sollen (siehe Bild 2). Klicken Sie dann auf die Schaltfl&auml;che <b>OK<\/b>. In diesem Beispiel wollen wir einige Tabellen der Datenbankdatei <b>Suedsturm.accdb <\/b>in die aktuell ge&ouml;ffnete Datenbank importieren.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1141_002.png\" alt=\"Auswahl der Import-Art und der Quelldatei f&uuml;r den Import\" width=\"649,559\" height=\"364,4943\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Auswahl der Import-Art und der Quelldatei f&uuml;r den Import<\/span><\/b><\/p>\n<p>Im folgenden Dialog finden wir nun verschiedene Registerseiten mit den verschiedenen Objekttypen als &uuml;berschriften vor. Wir interessieren uns nur f&uuml;r die erste Seite mit den Tabellen. Hier k&ouml;nnen wir mit einem Klick auf die Schaltfl&auml;che <b>Optionen >> <\/b>weitere Optionen anzeigen, die im unteren Bereich des Dialogs eingeblendet werden. Wir behalten die Optionen bei und w&auml;hlen alle Tabellen aus, die wir in die Zieldatenbank importieren wollen. Damit die Definitionen samt den enthaltenen Daten importiert werden, behalten wir im Bereich Tabellen importieren die Option <b>Definitionen und Daten <\/b>bei (siehe Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1141_003.png\" alt=\"Dialog zum Ausw&auml;hlen der zu importierenden Daten und zu Einstellen weiterer Optionen\" width=\"499,6607\" height=\"428,5515\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Dialog zum Ausw&auml;hlen der zu importierenden Daten und zu Einstellen weiterer Optionen<\/span><\/b><\/p>\n<p>Es fehlt noch der letzte Schritt, der den Benutzer fragt, ob dieser die Importschritte speichern m&ouml;chte (<b>Importschritte speichern<\/b>). Nach dem Aktivieren dieser Option blendet der Dialog einige weitere Optionen ein, von denen wir nur das Textfeld <b>Speichern unter: <\/b>nutzen wollen (siehe Bild 4). Hier geben wir einen sinnvollen Namen f&uuml;r den zu speichernden Import ein und speichern diesen dann durch einen Klick auf die Schaltfl&auml;che <b>Import speichern<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1141_004.png\" alt=\"Optionen zum Speichern der Importvorlage\" width=\"674,542\" height=\"551,7315\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Optionen zum Speichern der Importvorlage<\/span><\/b><\/p>\n<h2>Gespeicherten Import aufrufen<\/h2>\n<p>Nachdem wir dies erledigt haben, k&ouml;nnen wir den gespeicherten Import &uuml;ber einen Dialog einsehen, den wir mit dem Ribbonbefehl <b>Externe Daten|Importieren und Verkn&uuml;pfen|Gespeicherte Importe <\/b>einsehen k&ouml;nnen. Dieser &ouml;ffnet den Dialog aus Bild 5, wo wir auch unseren gespeicherten Import vorfinden. Durch Markieren des gew&uuml;nschten Eintrags und anschlie&szlig;endes Bet&auml;tigen der Schaltfl&auml;che <b>Ausf&uuml;hren <\/b>k&ouml;nnen Sie diesen nun erneut ausf&uuml;hren. Die im Navigationsbereich angezeigten Tabellen werden nun nicht direkt aktualisiert, dies geschieht erst nach dem Schlie&szlig;en des Dialogs.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1141_005.png\" alt=\"Die gespeicherte Importvorlage in der Liste der vorhandenen Importvorlagen\" width=\"649,559\" height=\"387,5939\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Die gespeicherte Importvorlage in der Liste der vorhandenen Importvorlagen<\/span><\/b><\/p>\n<p>Wenn Sie einen Import mehrmals ausf&uuml;hren oder aus anderen Gr&uuml;nden bereits Tabellen vorhanden sind, welche die Namen der zu importierenden Tabellen aufweisen, werden diese unter einem neuen Namen importiert, der aus dem vorhandenen Namen plus einer Zahl als Zusatz besteht &#8211; bei <b>tblArtikel <\/b>also <b>tblArtikel1<\/b>, <b>tblArtikel2 <\/b>und so weiter.<\/p>\n<h2>Direkter Zugriff auf den gespeicherten Import<\/h2>\n<p>Sie k&ouml;nnen nun direkt per VBA auf die Einstellungen des gespeicherten Imports zugreifen. Um etwa den Namen auszugeben, k&ouml;nnen Sie auch den Namen als Index f&uuml;r die Auflistung <b>ImportExportSpecifications <\/b>verwenden:<\/p>\n<pre>  CurrentProject.ImportExportSpecifications(\"Suedsturm f&uuml;r Import\").Name<\/pre>\n<p>Die Definition erhalten Sie &uuml;ber die Eigenschaft <b>XML <\/b>dieses Elements der Auflistung <b>ImportExportSpecifications<\/b>. Sie sieht wie in Listing 1 aus.<\/p>\n<pre>&lt;xml version=\"1.0\"&gt; \r\n&lt;ImportExportSpecification Path=\"C:\\Users\\User\\Dropbox\\_____Wichtig_______\\Suedsturm.accdb\" \r\n         xmlns=\"urn:www.microsoft.com\/office\/access\/imexspec\"&gt;\r\n     &lt;ImportAccess ImportExportSpecs=\"false\" MenusAndToolbars=\"false\" Relationships=\"true\" NavPane=\"false\" \r\n             StructureAndData=\"true\" QueriesAsTables=\"false\" Resources=\"false\"&gt;\r\n         &lt;AccessObject Source=\"tblArtikel\" ObjectType=\"Table\"\/&gt;\r\n         &lt;AccessObject Source=\"tblBestelldetails\" ObjectType=\"Table\"\/&gt;\r\n         &lt;AccessObject Source=\"tblBestellungen\" ObjectType=\"Table\"\/&gt;\r\n         &lt;AccessObject Source=\"tblKategorien\" ObjectType=\"Table\"\/&gt;\r\n         &lt;AccessObject Source=\"tblKunden\" ObjectType=\"Table\"\/&gt;\r\n         &lt;AccessObject Source=\"tblLieferanten\" ObjectType=\"Table\"\/&gt;\r\n         &lt;AccessObject Source=\"tblPersonal\" ObjectType=\"Table\"\/&gt;\r\n         &lt;AccessObject Source=\"tblVersandfirmen\" ObjectType=\"Table\"\/&gt;\r\n     &lt;\/ImportAccess&gt;\r\n&lt;\/ImportExportSpecification&gt;<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Definition des ImportExportSpecification-Objekts<\/span><\/b><\/p>\n<h2>Informationen der Import-Definition<\/h2>\n<p>Das XML-Dokument mit den Import-Daten enth&auml;lt im Root-Element unter <b>Path <\/b>wieder den Pfad zu der Datei mit den zu importierenden Daten. Darunter folgt das Element <b>ImportAccess<\/b>. Dieses weist die folgenden Attribute auf, die im Wesentlichen die Informationen &uuml;ber die festgelegten Optionen enthalten:<\/p>\n<ul>\n<li><b>ImportExportSpecs<\/b>: Import\/Export-Spezifikationen importieren  <\/li>\n<li><b>MenusAndToolbars<\/b>: Men&uuml;s und Symbolleisten importieren<\/li>\n<li><b>Relationships<\/b>: Beziehungen importieren<\/li>\n<li><b>NavPane<\/b>: Navigationsbereichsgruppen importieren<\/li>\n<li><b>StructureAndData<\/b>: Definitionen und Daten importieren oder nur Definitionen<\/li>\n<li><b>QueriesAsTables<\/b>: Abfragen als Abfragen oder Tabellen importieren<\/li>\n<li><b>Resources<\/b>: Alle Bilder und Designs importieren (nur f&uuml;r neuere Datenbank mit der Dateiendung <b>.accdb<\/b>)<\/li>\n<\/ul>\n<p>Damit sind alle Optionen des Dialogs <b>Objekte importieren <\/b>abgedeckt.<\/p>\n<p>Darunter folgen dann mehrere Elemente mit dem Namen <b>AccessObject<\/b>. Hier gibt es zwei Attribute:<\/p>\n<ul>\n<li><b>Source<\/b>: Name des Access-Objekts<\/li>\n<li><b>ObjectType<\/b>: Objekttyp, also <b>Table<\/b>, <b>Query<\/b>, <b>Form <\/b>f&uuml;r Tabellen, Abfragen, Formulare und so weiter<\/li>\n<\/ul>\n<h2>Eigenen Import f&uuml;r nur eine Tabelle bauen<\/h2>\n<p>Schauen wir uns an, ob wir den Import f&uuml;r eine einzige Tabelle selbst per VBA nachbauen k&ouml;nnen. Dazu ben&ouml;tigen wir nur wenige Zeilen Code, wir wie in Listing 2 sehen.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TabellenimportErstellen()\r\n     <span style=\"color:blue;\">Dim <\/span>strXML<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objSpec<span style=\"color:blue;\"> As <\/span>ImportExportSpecification\r\n     strXML = \"&lt;xml version=\"\"1.0\"\"&gt;\" _\r\n         & \"&lt;ImportExportSpecification Path=\"\"C:\\Users\\User\\Dropbox\\_____Wichtig_______\\Suedsturm.accdb\"\" _\r\n         & \"xmlns=\"\"urn:www.microsoft.com\/office\/access\/imexspec\"\"&gt;\" _\r\n         & \"&lt;ImportAccess ImportExportSpecs=\"\"false\"\" MenusAndToolbars=\"\"false\"\" Relationships=\"\"true\"\" \"_\r\n         & \"NavPane=\"\"false\"\" StructureAndData=\"\"true\"\" QueriesAsTables=\"\"false\"\" Resources=\"\"false\"\"&gt;\" _\r\n         & \"    &lt;AccessObject Source=\"\"tblArtikel\"\" ObjectType=\"\"Table\"\"\/&gt;\" _\r\n         & \"  &lt;\/ImportAccess&gt;\" _\r\n         & \"&lt;\/ImportExportSpecification&gt;\"\r\n     <span style=\"color:blue;\">Set<\/span> objSpec = CurrentProject.ImportExportSpecifications.Add(\"Import_tblArtikel\", strXML)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Erstellen eines neuen gespeicherten Imports<\/span><\/b><\/p>\n<p>Hier deklarieren wir eine Variable namens <b>strXML <\/b>des Typs <b>String <\/b>sowie eine namens <b>objSpec <\/b>mit dem Typ <b>ImportExportSpecification<\/b>. Die Variable <b>strXML <\/b>f&uuml;llen wir mit dem Code der zuvor erstellten Export-Spezifikation &#8211; mit dem Unterschied, dass wir diesmal nur eine Tabelle importieren wollen (hier <b>tblArtikel<\/b>).<\/p>\n<p><b>objSpec <\/b>f&uuml;llen wir &uuml;ber die Methode <b>Add <\/b>der Auflistung <b>ImportExportSpecifications<\/b>, der wir als ersten Parameter den Namen der neu zu erstellenden Spezifikation &uuml;bergeben (<b>Import_tblArtikel<\/b>) und als zweiten Parameter den Inhalt der Variablen <b>strXML<\/b>. Wenn Sie diese Prozedur mit <b>F5 <\/b>ausf&uuml;hren, geschieht erst einmal nichts. Erst wenn Sie den Dialog <b>Datentasks verwalten <\/b>aufrufen, finden Sie den neuen Eintrag namens <b>Import_tblArtikel <\/b>vor (siehe Bild 6). Wenn Sie diesen nun markieren und aufrufen, wird genau die Tabelle <b>tblArtikel <\/b>zur Zieldatenbank hinzugef&uuml;gt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1141_006.png\" alt=\"Die neu erstellte Importvorlage im Dialog Datentasks verwalten\" width=\"649,559\" height=\"387,5939\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Die neu erstellte Importvorlage im Dialog Datentasks verwalten<\/span><\/b><\/p>\n<p>Dies k&ouml;nne Sie nun auch noch per VBA-Code starten, und zwar mit der folgenden Anweisung:<\/p>\n<pre>DoCmd.RunSavedImportExport \"Import_tblArtikel\"<\/pre>\n<h2>Bestehende Objekte zuvor l&ouml;schen<\/h2>\n<p>Leider fehlt dem Import-Dialog eine Option, mit der man angeben kann, ob eventuell vorhandene Objekte gleichen Namens &uuml;berschrieben werden sollen. Aber dies k&ouml;nnen wir ja mit wenigen Zeilen VBA-Code nachr&uuml;sten:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TabelleImportieren()\r\n     On Error Resume <span style=\"color:blue;\">Next<\/span>\r\n     DoCmd.DeleteObject acTable, \"tblArtikel\"\r\n     <span style=\"color:blue;\">On Error GoTo<\/span> 0\r\n     DoCmd.RunSavedImportExport \"Import_tblArtikel\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Es kann &uuml;brigens sein, dass dies nicht funktioniert, weil der L&ouml;schvorgang fehlschl&auml;gt. Das ist beispielsweise der Fall, wenn die Tabelle <b>tblArtikel <\/b>Beziehungen zu anderen Tabellen aufweist. F&uuml;r diesen Fall k&ouml;nnen wir allerdings ebenfalls vorbeugen, indem wir die betroffenen Beziehungen vorher entfernen. Aber werden die Beziehungen zwischen der neu importierten Tabelle und den vorhandenen Tabellen wiederhergestellt Das schauen wir uns jetzt an. Die dazu verwendete Prozedur sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TabelleImportierenVerknuepfungLoeschen()\r\n     <span style=\"color:blue;\">Dim <\/span>rel<span style=\"color:blue;\"> As <\/span>DAO.Relation\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>strTable<span style=\"color:blue;\"> As String<\/span>\r\n     strTable = \"tblArtikel\"\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     For Each rel In db.Relations\r\n         <span style=\"color:blue;\">Debug.Print<\/span> rel.Name\r\n         <span style=\"color:blue;\">If <\/span>rel.Table = strTable  Or rel.ForeignTable = strTable<span style=\"color:blue;\"> Then<\/span>\r\n             db.Relations.Delete rel.Name\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> rel\r\n     DoCmd.DeleteObject acTable, strTable\r\n     DoCmd.RunSavedImportExport \"Import_tblArtikel\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Sie tr&auml;gt den Namen der zu ersetzenden Tabelle, hier <b>tblArtikel<\/b>, in die Variable <b>strTable <\/b>ein. Dann f&uuml;llt sie die Variable <b>db <\/b>mit einem Verweis auf das <b>Database<\/b>-Objekt der aktuellen Session. Dieses weist eine <b>Relations<\/b>-Auflistung mit allen Beziehungen der Datenbank auf. Diese durchlaufen wir und referenzieren das jeweilige Element mit der Variablen <b>rel <\/b>des Typs <b>Relation<\/b>. Woran erkennen wir die Beziehungen, an der unsere Tabelle beteiligt ist Oder besser gefragt: Welche Beziehungen verhindern das L&ouml;schen der Tabelle, wenn wir sie nicht vorher entfernen Das <b>Relation<\/b>-Objekte bietet zwei Eigenschaften an, welche die an der Beziehung beteiligten Beziehungen angeben, n&auml;mlich <b>ForeignTable <\/b>und <b>Table<\/b>. <b>ForeignTable <\/b>enth&auml;lt die Tabelle, die das Fremdschl&uuml;sselfeld der Beziehung enth&auml;lt, <b>Table <\/b>die Tabelle mit dem Prim&auml;rschl&uuml;sselfeld der Beziehung.<\/p>\n<p>Wenn wir beispielsweise die Tabelle <b>tblArtikel <\/b>l&ouml;schen wollen, die &uuml;ber Fremdschl&uuml;sselfelder mit den Tabellen <b>tblKategorien <\/b>und <b>tblLieferanten <\/b>verkn&uuml;pft ist und &uuml;ber das Prim&auml;rschl&uuml;sselfeld mit der Tabelle <b>tblBestelldetails<\/b>, die dann logischerweise das Fremdschl&uuml;sselfeld der Tabelle enth&auml;lt, m&uuml;ssen wir zun&auml;chst diejenigen Beziehungen l&ouml;schen, deren Fremdschl&uuml;sselfeld in der zu l&ouml;schenden Tabelle vorliegt.<\/p>\n<p>Das sind dann die Elemente der <b>Relations<\/b>-Auflistung, deren Eigenschaft <b>ForeignTable <\/b>den Namen der zu l&ouml;schenden Tabelle enth&auml;lt. Wir m&uuml;ssen aber auch die Beziehungen l&ouml;schen, welche die zu l&ouml;schende Tabelle im Feld <b>Table <\/b>enthalten. Genau das erledigt die Prozedur <b>TabelleImportieren-Ver-knuep-fungLoeschen <\/b>in der <b>For Each<\/b>-Schleife. Sie pr&uuml;ft, ob das aktuell durchlaufene <b>Relation<\/b>-Element entweder in der Eigenschaft <b>Table <\/b>oder <b>ForeignTable <\/b>den Namen der zu l&ouml;schenden Tabelle aufweist und entfernt dann die relevanten <b>Relation<\/b>-Objekte mit der <b>Delete<\/b>-Methode aus der Auflistung <b>Relations<\/b>.<\/p>\n<h2>Fehlende Beziehungen<\/h2>\n<p>Somit gelingt dann schlie&szlig;lich das Ersetzen der alten Version der Tabelle <b>tblArtikel <\/b>durch die aus der Quelldatenbank. Aber haben wir nun auch den gleichen Zustand wie zuvor Nein, denn wenn wir die Prozedur <b>TabelleImportierenVerknuepfungLoeschen <\/b>in eine neue Prozedur namens <b>BeziehungenAnzeigen<\/b> &uuml;bertragen und diese wie folgt k&uuml;rzen und ausf&uuml;hren, erhalten wir in der Liste der Beziehungen keinen der Eintr&auml;ge, der die Tabelle <b>tblArtikel <\/b>in einer der beiden Eigenschaften <b>Table <\/b>oder <b>ForeignTable <\/b>aufweist:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>BeziehungenAnzeigen()\r\n     <span style=\"color:blue;\">Dim <\/span>rel<span style=\"color:blue;\"> As <\/span>DAO.Relation\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>strTable<span style=\"color:blue;\"> As String<\/span>\r\n     strTable = \"tblArtikel\"\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     For Each rel In db.Relations\r\n         <span style=\"color:blue;\">Debug.Print<\/span> rel.Name, rel.ForeignTable, rel.Table\r\n     <span style=\"color:blue;\">Next<\/span> rel\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis nach dem Ausf&uuml;hren der Prozedur sieht im Direktbereich wie in Bild 7 aus, die Tabelle <b>tblArtikel <\/b>kommt in keiner der aufgelisteten Beziehungen vor.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2018_04\/pic_1141_007.png\" alt=\"Relations im Direktfenster\" width=\"649,559\" height=\"132,7393\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Relations im Direktfenster<\/span><\/b><\/p>\n<p>Beim Import einer einzigen Tabelle werden also keine der Beziehungen zu den anderen Tabellen der Originaldatenbank importiert &#8211; auch nicht, wenn die anderen an der Beziehung beteiligten Tabellen dort vorhanden sind. Also m&uuml;ssen wir unserer Prozedur noch ein paar Anweisungen hinzuf&uuml;gen, welche auch die vor dem L&ouml;schen vorhandenen Beziehungen wiederherstellen.<\/p>\n<p>Dazu wollen wir die Eigenschaften der zu l&ouml;schenden Elemente in einer Collection zwischenspeichern. Die Collection namens <b>colRelations <\/b>soll jeweils ein Objekt auf Basis einer Klasse namens <b>clsRelation <\/b>aufnehmen, die wir wie in Listing 3 deklarieren. Dazu deklarieren wir f&uuml;r die drei Felder <b>Table<\/b>, <b>ForeignTable <\/b>und <b>Name <\/b>jeweils eine private Variable.<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>m_Table<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Private <\/span>m_ForeignTable<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Private <\/span>m_Name<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Private <\/span>colFields<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Collection\r\n<span style=\"color:blue;\">Public Property Let <\/span>Table(str<span style=\"color:blue;\"> As String<\/span>)\r\n     m_Table = str\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Let <\/span>ForeignTable(str<span style=\"color:blue;\"> As String<\/span>)\r\n     m_ForeignTable = str\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Let <\/span>Name(str<span style=\"color:blue;\"> As String<\/span>)\r\n     m_Name = str\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>Name()<span style=\"color:blue;\"> As String<\/span>\r\n     Name = m_Name\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>Table()<span style=\"color:blue;\"> As String<\/span>\r\n     Table = m_Table\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>ForeignTable()<span style=\"color:blue;\"> As String<\/span>\r\n     ForeignTable = m_ForeignTable\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Sub <\/span>AddField(strName<span style=\"color:blue;\"> As String<\/span>, _\r\n         strForeignName<span style=\"color:blue;\"> As String<\/span>)\r\n     <span style=\"color:blue;\">Dim <\/span>objField<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> clsField\r\n     <span style=\"color:blue;\">With<\/span> objField\r\n         .Name = strName\r\n         .ForeignName = strForeignName\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     colFields.Add objField\r\n<span style=\"color:blue;\">End Sub<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>Fields()<span style=\"color:blue;\"> As <\/span>Collection\r\n     <span style=\"color:blue;\">Set<\/span> Fields = colFields\r\n<span style=\"color:blue;\">End Property<\/span> <\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Klasse zum Zwischenspeichern von Relationen<\/span><\/b><\/p>\n<p>F&uuml;r jede dieser Variablen f&uuml;gen wir der Klasse jeweils eine <b>Property Let<\/b>&#8211; und eine <b>Property Get<\/b>-Prozedur hinzu, &uuml;ber die wir die Eigenschaften schreiben und lesen k&ouml;nnen.<\/p>\n<p>Die Prozedur <b>AddField <\/b>dient dazu, das oder die Felder der Beziehung aufzunehmen (es gibt ja auch Beziehungen, die &uuml;ber mehr als ein Feld hergestellt werden). Dieses verwendet das im Kopf des Klassenmoduls deklarierte <b>Collection<\/b>-Objekt <b>colFields<\/b>, in der wir Instanzen auf Basis der Klasse <b>clsField<\/b> speichern wollen. Beim Aufruf der Methode <b>AddField <\/b>&uuml;bergibt man den Namen des Feldes in der Tabelle und der Verkn&uuml;pfungstabelle. Anschlie&szlig;end erstellt die Methode ein neues Objekt auf Basis der Klasse <b>clsField<\/b>. Diese nimmt die beiden Eigenschaften <b>Table <\/b>und <b>ForeignTable <\/b>auf. Nach dem Erstellen und F&uuml;llen des Objekts wird dieses mit der <b>Add<\/b>-Methode an die Collection <b>colFields <\/b>angeh&auml;ngt. Diese Collection stellt die Klasse <b>clsRelation <\/b>wiederum &uuml;ber die Eigenschaft <b>Fields <\/b>zur Verf&uuml;gung.<\/p>\n<p>Die Klasse <b>clsField <\/b>finden Sie in Listing 4.<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>m_Name<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Private <\/span>m_ForeignName<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Public Property Let <\/span>Name(str<span style=\"color:blue;\"> As String<\/span>)\r\n     m_Name = str\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Let <\/span>ForeignName(str<span style=\"color:blue;\"> As String<\/span>)\r\n     m_ForeignName = str\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>Name()<span style=\"color:blue;\"> As String<\/span>\r\n     Name = m_Name\r\n<span style=\"color:blue;\">End Property<\/span>\r\n<span style=\"color:blue;\">Public Property Get <\/span>ForeignName()<span style=\"color:blue;\"> As String<\/span>\r\n     ForeignName = m_ForeignName\r\n<span style=\"color:blue;\">End Property<\/span> <\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Klasse zum Zwischenspeichern von Feldern<\/span><\/b><\/p>\n<h2>Speichern und Wiederherstellen der Beziehungen<\/h2>\n<p>Die Prozedur <b>TabelleImportierenMitBeziehung<\/b> ist die neue Version der Prozedur <b>TabelleImportieren-Ver-knuep-fung-Loeschen<\/b>, und sie ist etwas umfangreicher (siehe Listing 5).<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TabelleImportierenMitBeziehung()\r\n     <span style=\"color:blue;\">Dim <\/span>rel<span style=\"color:blue;\"> As <\/span>DAO.Relation\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>fld<span style=\"color:blue;\"> As <\/span>DAO.Field\r\n     <span style=\"color:blue;\">Dim <\/span>strTable<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>colRelations<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Collection\r\n     <span style=\"color:blue;\">Dim <\/span>objRelation<span style=\"color:blue;\"> As <\/span>clsRelation\r\n     <span style=\"color:blue;\">Dim <\/span>i<span style=\"color:blue;\"> As Integer<\/span>\r\n     strTable = \"tblArtikel\"\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     For i = db.Relations.Count - 1 To 0 Step -1\r\n         <span style=\"color:blue;\">Set<\/span> rel = db.Relations(i)\r\n         <span style=\"color:blue;\">Debug.Print<\/span> rel.Name, rel.ForeignTable, rel.Table\r\n         <span style=\"color:blue;\">If <\/span>rel.Table = strTable Or rel.ForeignTable = strTable<span style=\"color:blue;\"> Then<\/span>\r\n             <span style=\"color:blue;\">Set<\/span> objRelation = <span style=\"color:blue;\">New<\/span> clsRelation\r\n             <span style=\"color:blue;\">With<\/span> objRelation\r\n                 .ForeignTable = rel.ForeignTable\r\n                 .Table = rel.Table\r\n                 .Name = rel.Name\r\n                 .AddField rel.Fields(0).Name, rel.Fields(0).ForeignName\r\n             End <span style=\"color:blue;\">With<\/span>\r\n             colRelations.Add objRelation\r\n             db.Relations.Delete rel.Name\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">Next<\/span> i\r\n     DoCmd.DeleteObject acTable, strTable\r\n     DoCmd.RunSavedImportExport \"Import_tblArtikel\"\r\n     For Each objRelation In colRelations\r\n         <span style=\"color:blue;\">With<\/span> objRelation\r\n             <span style=\"color:blue;\">Set<\/span> rel = db.CreateRelation(.Name, .Table, .ForeignTable)\r\n             <span style=\"color:blue;\">Set<\/span> fld = <span style=\"color:blue;\">New<\/span> DAO.Field\r\n             fld.Name = .Fields(1).Name\r\n             fld.ForeignName = .Fields(1).ForeignName\r\n             rel.Fields.Append fld\r\n         End <span style=\"color:blue;\">With<\/span>\r\n         db.Relations.Append rel\r\n     <span style=\"color:blue;\">Next<\/span> objRelation\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Prozedur zum Importieren einer Tabelle mit Wiederherstellung der Beziehungen<\/span><\/b><\/p>\n<p>Die Prozedur deklariert neben den bekannten Elementen eine Collection namens <b>colRelations <\/b>und instanziert diese auch gleich mit dem <b>New<\/b>-Schl&uuml;sselwort. Au&szlig;erdem deklariert sie eine Variable namens <b>objRelation <\/b>mit dem Typ <b>clsRelation <\/b>zum Zwischenspeichern der Eigenschaften der zu l&ouml;schenden Beziehung, um diese sp&auml;ter wiederherstellen zu k&ouml;nnen.<\/p>\n<p>Dann geht es los: Wir speichern den Namen der auszutauschenden Tabelle in <b>strTable<\/b>. Dann durchlaufen wir r&uuml;ckw&auml;rts in einer <b>For&#8230;Next<\/b>-Schleife alle <b>Relation<\/b>-Objekte, also alle Beziehungen und pr&uuml;fen, ob diese mit der Tabelle <b>tblArtikel <\/b>in Verbindung steht. Falls ja, erstellen wir ein neues Objekt des Typs <b>clsRelation <\/b>und weisen diesem die Eigenschaften der Beziehung zu. Dann f&uuml;gen wir es zur Collection <b>colRelations <\/b>hinzu.<\/p>\n<p>Anschlie&szlig;end k&ouml;nnen wir die Relation mit der <b>Delete<\/b>-Methode der <b>Relations<\/b>-Auflistung l&ouml;schen. Nun folgen die bereits bekannten Schritte, also das L&ouml;schen und erneute Importieren der Tabelle. Schlie&szlig;lich baut die Prozedur die Beziehungen rund um diese Tabelle auf Basis der gespeicherten Informationen in der Collection <b>colRelations <\/b>wieder auf.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Ein anschlie&szlig;ender Blick in das Beziehungen-Fenster zeigt, dass die Beziehungen der Tabelle wieder vorhanden sind. Zwar fehlt hier gegebenenfalls noch das Wiederherstellungen der Einstellungen f&uuml;r die L&ouml;schweitergabe oder die Aktualisierungsweitergabe sowie weiterer Eigenschaften, dies w&uuml;rde jedoch den Rahmen dieses Beitrags sprengen.<\/p>\n<p>Die hier vorgestellten Techniken k&ouml;nnen Sie beispielsweise nutzen, wenn Sie w&auml;hrend der Entwicklung Tests mit einer Datenbank durchf&uuml;hren, welche die Daten programmatisch anpassen. Den Import k&ouml;nnten Sie dabei einsetzen, um die urspr&uuml;nglichen Daten schnell wiederherzustellen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>TabellenimportPerVBA.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/55C08D4B-E6CF-4ECF-9263-8FBEA58A2617\/aiu_1141.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Beitrag &#8222;Import- und Exportspezifikationen per VBA&#8220; zeigen wir, wie Sie etwa den Export oder Import von Textdateien per VBA steuern k&ouml;nnen. Mit diesen grundlegenden Techniken ausgestattet k&ouml;nnen wir noch einen Schritt weitergehen und beispielsweise auch komplette Tabelle aus einer anderen Datenbank importieren und diesen Vorgang per VBA ausf&uuml;hren. Wenn Sie etwa regelm&auml;&szlig;ig immer wieder die gleichen Tabellen aus einer Vorlagendatenbank in die Zieldatenbank importieren, m&uuml;ssen Sie normalerweise immer den entsprechenden Import-Assistenten dazu nutzen. Das k&ouml;nnen Sie von nun an auch mit ein paar Zeilen VBA-Code erledigen.<\/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,66042018,44000025],"tags":[],"class_list":["post-55001141","post","type-post","status-publish","format-standard","hentry","category-662018","category-66042018","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Tabellenimport per VBA - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tabellenimport per VBA\" \/>\n<meta property=\"og:description\" content=\"Im Beitrag &quot;Import- und Exportspezifikationen per VBA&quot; zeigen wir, wie Sie etwa den Export oder Import von Textdateien per VBA steuern k&ouml;nnen. Mit diesen grundlegenden Techniken ausgestattet k&ouml;nnen wir noch einen Schritt weitergehen und beispielsweise auch komplette Tabelle aus einer anderen Datenbank importieren und diesen Vorgang per VBA ausf&uuml;hren. Wenn Sie etwa regelm&auml;&szlig;ig immer wieder die gleichen Tabellen aus einer Vorlagendatenbank in die Zieldatenbank importieren, m&uuml;ssen Sie normalerweise immer den entsprechenden Import-Assistenten dazu nutzen. Das k&ouml;nnen Sie von nun an auch mit ein paar Zeilen VBA-Code erledigen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T21:11:35+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg06.met.vgwort.de\/na\/71ca2e604bbf4db0ae22e77478991536\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Tabellenimport per VBA\",\"datePublished\":\"2020-05-13T21:11:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/\"},\"wordCount\":2197,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/71ca2e604bbf4db0ae22e77478991536\",\"articleSection\":[\"2018\",\"4\\\/2018\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/\",\"name\":\"Tabellenimport per VBA - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/71ca2e604bbf4db0ae22e77478991536\",\"datePublished\":\"2020-05-13T21:11:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/71ca2e604bbf4db0ae22e77478991536\",\"contentUrl\":\"http:\\\/\\\/vg06.met.vgwort.de\\\/na\\\/71ca2e604bbf4db0ae22e77478991536\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Tabellenimport_per_VBA\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tabellenimport per VBA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Tabellenimport per VBA - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/","og_locale":"de_DE","og_type":"article","og_title":"Tabellenimport per VBA","og_description":"Im Beitrag \"Import- und Exportspezifikationen per VBA\" zeigen wir, wie Sie etwa den Export oder Import von Textdateien per VBA steuern k&ouml;nnen. Mit diesen grundlegenden Techniken ausgestattet k&ouml;nnen wir noch einen Schritt weitergehen und beispielsweise auch komplette Tabelle aus einer anderen Datenbank importieren und diesen Vorgang per VBA ausf&uuml;hren. Wenn Sie etwa regelm&auml;&szlig;ig immer wieder die gleichen Tabellen aus einer Vorlagendatenbank in die Zieldatenbank importieren, m&uuml;ssen Sie normalerweise immer den entsprechenden Import-Assistenten dazu nutzen. Das k&ouml;nnen Sie von nun an auch mit ein paar Zeilen VBA-Code erledigen.","og_url":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-13T21:11:35+00:00","og_image":[{"url":"http:\/\/vg06.met.vgwort.de\/na\/71ca2e604bbf4db0ae22e77478991536","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Tabellenimport per VBA","datePublished":"2020-05-13T21:11:35+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/"},"wordCount":2197,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/71ca2e604bbf4db0ae22e77478991536","articleSection":["2018","4\/2018","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/","url":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/","name":"Tabellenimport per VBA - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg06.met.vgwort.de\/na\/71ca2e604bbf4db0ae22e77478991536","datePublished":"2020-05-13T21:11:35+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/#primaryimage","url":"http:\/\/vg06.met.vgwort.de\/na\/71ca2e604bbf4db0ae22e77478991536","contentUrl":"http:\/\/vg06.met.vgwort.de\/na\/71ca2e604bbf4db0ae22e77478991536"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Tabellenimport_per_VBA\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Tabellenimport per VBA"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001141"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001141\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}