Tabellenimport per VBA

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Im Beitrag “Gespeicherte Importe und Exporte per VBA” zeigen wir, wie Sie etwa den Export oder Import von Textdateien per VBA steuern können. Mit diesen grundlegenden Techniken ausgestattet können wir noch einen Schritt weitergehen und beispielsweise auch komplette Tabelle aus einer anderen Datenbank importieren und diesen Vorgang per VBA ausführen. Wenn Sie etwa regelmäßig immer wieder die gleichen Tabellen aus einer Vorlagendatenbank in die Zieldatenbank importieren, müssen Sie normalerweise immer den entsprechenden Import-Assistenten dazu nutzen. Das können Sie von nun an auch mit ein paar Zeilen VBA-Code erledigen.

Wenn Sie einen Import von Access-Objekten wie hier von Access-Tabellen aus einer anderen Datenbank automatisieren wollen, können Sie dies ganz einfach erledigen.

Manueller Import als Voraussetzung

Als Erstes führen Sie den Import einmal mit dem dafür vorgesehenen Assistenten durch. Dazu wählen Sie im Ribbon den Eintrag Externe Daten|Importieren und Verknüpfen|Neue Datenquelle|Aus Datenbank|Access aus (siehe Bild 1).

Aufruf des Importassistenten für Daten aus einer Access-Datenbank

Bild 1: Aufruf des Importassistenten für Daten aus einer Access-Datenbank

Im nun erscheinenden Dialog Externe Daten – Access-Datenbank geben Sie oben zunächst den Namen der als Quelle zu verwendenden Access-Datenbank ein oder wählen diesen über die Durchsuchen…-Schaltflä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üpft werden sollen (siehe Bild 2). Klicken Sie dann auf die Schaltfläche OK. In diesem Beispiel wollen wir einige Tabellen der Datenbankdatei Suedsturm.accdb in die aktuell geöffnete Datenbank importieren.

Auswahl der Import-Art und der Quelldatei für den Import

Bild 2: Auswahl der Import-Art und der Quelldatei für den Import

Im folgenden Dialog finden wir nun verschiedene Registerseiten mit den verschiedenen Objekttypen als überschriften vor. Wir interessieren uns nur für die erste Seite mit den Tabellen. Hier können wir mit einem Klick auf die Schaltfläche Optionen >> weitere Optionen anzeigen, die im unteren Bereich des Dialogs eingeblendet werden. Wir behalten die Optionen bei und wä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 Definitionen und Daten bei (siehe Bild 3).

Dialog zum Auswählen der zu importierenden Daten und zu Einstellen weiterer Optionen

Bild 3: Dialog zum Auswählen der zu importierenden Daten und zu Einstellen weiterer Optionen

Es fehlt noch der letzte Schritt, der den Benutzer fragt, ob dieser die Importschritte speichern möchte (Importschritte speichern). Nach dem Aktivieren dieser Option blendet der Dialog einige weitere Optionen ein, von denen wir nur das Textfeld Speichern unter: nutzen wollen (siehe Bild 4). Hier geben wir einen sinnvollen Namen für den zu speichernden Import ein und speichern diesen dann durch einen Klick auf die Schaltfläche Import speichern.

Optionen zum Speichern der Importvorlage

Bild 4: Optionen zum Speichern der Importvorlage

Gespeicherten Import aufrufen

Nachdem wir dies erledigt haben, können wir den gespeicherten Import über einen Dialog einsehen, den wir mit dem Ribbonbefehl Externe Daten|Importieren und Verknüpfen|Gespeicherte Importe einsehen können. Dieser öffnet den Dialog aus Bild 5, wo wir auch unseren gespeicherten Import vorfinden. Durch Markieren des gewünschten Eintrags und anschließendes Betätigen der Schaltfläche Ausführen können Sie diesen nun erneut ausführen. Die im Navigationsbereich angezeigten Tabellen werden nun nicht direkt aktualisiert, dies geschieht erst nach dem Schließen des Dialogs.

Die gespeicherte Importvorlage in der Liste der vorhandenen Importvorlagen

Bild 5: Die gespeicherte Importvorlage in der Liste der vorhandenen Importvorlagen

Wenn Sie einen Import mehrmals ausführen oder aus anderen Grü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 – bei tblArtikel also tblArtikel1, tblArtikel2 und so weiter.

Direkter Zugriff auf den gespeicherten Import

Sie können nun direkt per VBA auf die Einstellungen des gespeicherten Imports zugreifen. Um etwa den Namen auszugeben, können Sie auch den Namen als Index für die Auflistung ImportExportSpecifications verwenden:

  CurrentProject.ImportExportSpecifications("Suedsturm für Import").Name

Die Definition erhalten Sie über die Eigenschaft XML dieses Elements der Auflistung ImportExportSpecifications. Sie sieht wie in Listing 1 aus.

<xml version="1.0"> 
<ImportExportSpecification Path="C:\Users\User\Dropbox\_____Wichtig_______\Suedsturm.accdb" 
         xmlns="urn:www.microsoft.com/office/access/imexspec">
     <ImportAccess ImportExportSpecs="false" MenusAndToolbars="false" Relationships="true" NavPane="false" 
             StructureAndData="true" QueriesAsTables="false" Resources="false">
         <AccessObject Source="tblArtikel" ObjectType="Table"/>
         <AccessObject Source="tblBestelldetails" ObjectType="Table"/>
         <AccessObject Source="tblBestellungen" ObjectType="Table"/>
         <AccessObject Source="tblKategorien" ObjectType="Table"/>
         <AccessObject Source="tblKunden" ObjectType="Table"/>
         <AccessObject Source="tblLieferanten" ObjectType="Table"/>
         <AccessObject Source="tblPersonal" ObjectType="Table"/>
         <AccessObject Source="tblVersandfirmen" ObjectType="Table"/>
     </ImportAccess>
</ImportExportSpecification>

Listing 1: Definition des ImportExportSpecification-Objekts

Informationen der Import-Definition

Das XML-Dokument mit den Import-Daten enthält im Root-Element unter Path wieder den Pfad zu der Datei mit den zu importierenden Daten. Darunter folgt das Element ImportAccess. Dieses weist die folgenden Attribute auf, die im Wesentlichen die Informationen über die festgelegten Optionen enthalten:

  • ImportExportSpecs: Import/Export-Spezifikationen importieren
  • MenusAndToolbars: Menüs und Symbolleisten importieren
  • Relationships: Beziehungen importieren
  • NavPane: Navigationsbereichsgruppen importieren
  • StructureAndData: Definitionen und Daten importieren oder nur Definitionen
  • QueriesAsTables: Abfragen als Abfragen oder Tabellen importieren
  • Resources: Alle Bilder und Designs importieren (nur für neuere Datenbank mit der Dateiendung .accdb)

Damit sind alle Optionen des Dialogs Objekte importieren abgedeckt.

Darunter folgen dann mehrere Elemente mit dem Namen AccessObject. Hier gibt es zwei Attribute:

  • Source: Name des Access-Objekts
  • ObjectType: Objekttyp, also Table, Query, Form für Tabellen, Abfragen, Formulare und so weiter

Eigenen Import für nur eine Tabelle bauen

Schauen wir uns an, ob wir den Import für eine einzige Tabelle selbst per VBA nachbauen können. Dazu benötigen wir nur wenige Zeilen Code, wir wie in Listing 2 sehen.

Public Sub TabellenimportErstellen()
     Dim strXML As String
     Dim objSpec As ImportExportSpecification
     strXML = "<xml version=""1.0"">" _
         & "<ImportExportSpecification Path=""C:\Users\User\Dropbox\_____Wichtig_______\Suedsturm.accdb"" _
         & "xmlns=""urn:www.microsoft.com/office/access/imexspec"">" _
         & "<ImportAccess ImportExportSpecs=""false"" MenusAndToolbars=""false"" Relationships=""true"" "_
         & "NavPane=""false"" StructureAndData=""true"" QueriesAsTables=""false"" Resources=""false"">" _
         & "    <AccessObject Source=""tblArtikel"" ObjectType=""Table""/>" _
         & "  </ImportAccess>" _
         & "</ImportExportSpecification>"
     Set objSpec = CurrentProject.ImportExportSpecifications.Add("Import_tblArtikel", strXML)
End Sub

Listing 2: Erstellen eines neuen gespeicherten Imports

Hier deklarieren wir eine Variable namens strXML des Typs String sowie eine namens objSpec mit dem Typ ImportExportSpecification. Die Variable strXML füllen wir mit dem Code der zuvor erstellten Export-Spezifikation – mit dem Unterschied, dass wir diesmal nur eine Tabelle importieren wollen (hier tblArtikel).

objSpec füllen wir über die Methode Add der Auflistung ImportExportSpecifications, der wir als ersten Parameter den Namen der neu zu erstellenden Spezifikation übergeben (Import_tblArtikel) und als zweiten Parameter den Inhalt der Variablen strXML. Wenn Sie diese Prozedur mit F5 ausführen, geschieht erst einmal nichts. Erst wenn Sie den Dialog Datentasks verwalten aufrufen, finden Sie den neuen Eintrag namens Import_tblArtikel vor (siehe Bild 6). Wenn Sie diesen nun markieren und aufrufen, wird genau die Tabelle tblArtikel zur Zieldatenbank hinzugefügt.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar