Gespeicherte Importe und Exporte verwalten

Microsoft Access bietet die Möglichkeit, nach Abschluss eines Imports oder Exports die Importschritte oder Exportschritte zu speichern. Dazu erscheint ein Dialog, mit dem man wenige Parameter dazu einstellen kann. Diese gespeicherten Importe und Exporte kann man anschließend wiederholen, indem man diese über einen entsprechenden Dialog auswählt. Wir wollen uns in diesem Beitrag einmal ansehen, was hier überhaupt geschieht, wo die Daten gespeichert werden und wie wir diese gegebenenfalls anpassen können, ohne dass wir den Import oder Export erneut durchführen müssen, um die geänderte Konfiguration zu erhalten. Und wie sich zeigen wird, gibt es sogar eine Erweiterung des Objektmodells von VBA zu diesem Zweck, das wir uns genau ansehen werden.

Importe und Exporte können wir in Access auf verschiedene Arten starten. Der offensichtlichste ist der über die Befehle im Ribbon, die wir unter Externe Daten finden (siehe Bild 1).

Starten von Import-, Verknüpfungs- und Exportvorgängen über das Ribbon

Bild 1: Starten von Import-, Verknüpfungs- und Exportvorgängen über das Ribbon

Am Ende eines jeden dieser Vorgänge erscheint die Meldung aus Bild 2.

Dialog zum Speichern der Exportschritte

Bild 2: Dialog zum Speichern der Exportschritte

Hier klicken wir zunächst auf Exportschritte speichern, um die übrigen Optionen einzublenden. Diese sind recht begrenzt: Wir geben einfach den Namen ein, unter dem wir den Import oder Export später wieder aufrufen können. Außerdem können wir noch eine Beschreibung hinzufügen.

Weiter unten können wir noch die Option Outlook-Aufgabe erstellen aktivieren. Diese sorgt dafür, dass ein eneue Outlook-Aufgabe erstellt wird, die jedoch lediglich einen Text mit einer Anleitung enthält, wie der Import oder Export in Access gestartet werden kann (siehe Bild 3).

Outlook-Aufgabe mit einer Anleitung für den Import oder Export

Bild 3: Outlook-Aufgabe mit einer Anleitung für den Import oder Export

Import oder Export erneut starten

Wenn wir diesen gespeicherten Import oder Export nun erneut ausführen wollen, betätigen wir im Ribbon unter Externe Daten eine der Schaltflächen Gespeicherte Importe oder Gespeicherte Exporte (siehe Bild 4).

Anzeigen der gespeicherten Importe und Exporte

Bild 4: Anzeigen der gespeicherten Importe und Exporte

Dies öffnet in beiden Fällen den gleichen Dialog, der jeweils eine Registerkarte für die Importe und die Exporte enthält (siehe Bild 5).

Anzeigen der gespeicherten Importe und Exporte per Ribbonbutton

Bild 5: Anzeigen der gespeicherten Importe und Exporte per Ribbonbutton

Klicken wir doppelt auf einen der Einträge, wird der Import oder Export erneut ausgeführt. Dazu können wir den gewünschten Eintrag auch zuvor markieren und dann die Schaltfläche Ausführen betätigen. Wir können auch hier wieder eine Outlook-Aufgabe auf Basis des Imports oder Exports erstellen oder den Import oder Export löschen.

Gespeicherte Importe und Exporte per VBA

Spannend wird es, wenn wir uns ansehen, wir wir die gespeicherten Importe oder Exporte per VBA nutzen und verwalten können. Wenn wir im VBA-Editor im Objektkatalog nach Elementen suchen, die Import oder Export im Namen tragen, finden wir die folgenden interessanten Einträge:

  • RunSavedImportExport: Methode der DoCmd-Klasse, mit der wir einen gespeicherten Import oder Export starten können
  • acCmdSavedExports: RunCommand-Parameter. Öffnet den Dialog zur Anzeige von gespeicherten Importen und Exporten und aktiviert die Registerseite mit den Exporten.
  • acCmdSavedImports: RunCommand-Parameter. Öffnet den Dialog zur Anzeige von gespeicherten Importen und Exporten und aktiviert die Registerseite mit den Importen
  • ImportExportSpeficications: Auflistung der CurrentProject– und der CodeProject-Klasse. Erlaubt den Zugriff auf die gespeicherten Importe und Exporte.
  • ImportExportSpecification: Klasse, über die wir auf die Eigenschaften von gespeicherten Importen oder Exporten zugreifen können.

Schauen wir uns an, was wir mit den verschiedenen VBA-Befehlen anstellen können.

Anzeigen des Dialogs zur Anzeige von gespeicherten Importen

Mit dem folgenden Befehl zeigen wir per VBA den Dialog zur Anzeige von gespeicherten Importen an:

RunCommand acCmdSavedImports

Anzeigen des Dialogs zur Anzeige von gespeicherten Exporten

Mit dem folgenden Befehl zeigen wir per VBA den Dialog zur Anzeige von gespeicherten Exporten an:

RunCommand acCmdSavedExports

Aufrufen eines gespeicheten Imports oder Exports per VBA

Gegebenenfalls soll der Benutzer selbst Importe oder Exporte durchführen können, die wir zuvor angelegt haben. Da in professionellen Access-Anwendungen die eingebauten Ribbons nicht angezeigt werden, fügen wir entsprechende Steuerelemente im Ribbon oder in Formularen ein.

Wenn wir einen Import oder Export mit einem bestimmten Namen per VBA ausführen wollen, verwenden wir beispielsweise den folgenden Befehl:

DoCmd.RunSavedImportExport "Name des Exports oder Imports"

Arbeiten mit den gespeicherten Importen oder Exporten per VBA

Auf die einzelnen gespeicherten Import- und Exportspezifikationen können wir über die Auflistung ImportExportSpecifications zugreifen. Die enthaltenen Elemente haben den Typ ImportExportSpecification. Um die Namen der verfügbaren Import- und Exportspezifikationen auszugeben, können wir beispielsweise die folgende Prozedur verwenden:

Public Sub ImporteUndExporte()
     Dim objSpecification As ImportExportSpecification
     For Each objSpecification In _
             CurrentProject.ImportExportSpecifications
         Debug.Print objSpecification.Name
     Next objSpecification
End Sub

Per IntelliSense sehen wir die Eigenschaften und Methoden des ImportExportSpecification-Objekta auf einen Blick (siehe Bild 6).

Eigenschaften von Import- und Export-Spezifikationen

Bild 6: Eigenschaften von Import- und Export-Spezifikationen

Hier ist die Beschreibung der einzelnen Elemente:

  • Application: Liefert einen Verweis auf das übergeordnete Application-Objekt.
  • Delete: Löscht die referenzierte Spezifikation.
  • Description: Gibt die Beschreibung aus, die wir beim Speichern der Spezifikation angegeben haben.
  • Execute: Führt den Import oder Export aus. Die Methode weist den optionalen Parameter Prompt auf. Dieser hat den Standardwert True. Wenn wir False angeben, werden eventuell notwendige Dialoge wie zum Beispiel zur Abfrage, ob eine vorhandene Datei überschrieben werden soll, nicht angezeigt und die Datei wird einfach überschrieben.
  • Name: Liefert den Namen, den wir beim Speichern angegeben haben.
  • Parent: Liefert einen Verweis auf das übergeordnete Objekt, hier CurrentProject oder CodeProject.
  • XML: Liefert die Definition der Spezifikation im XML-Format.

Mögliche Fehler beim Export

Wenn wir die Execute-Methode für einen Export aufrufen und dabei eine Datei erzeugen, die geöffnet ist und nicht überschrieben werden kann, lösen wir damit den Fehler 2001 aus. Diesen können wir wie folgt umgehen:

Select Case Err.Number
     Case 2001
         MsgBox "Die Datei ist vorhanden und geöffnet " _
             & "und kann nicht überschrieben werden."
     Case 0
     Case Else
         MsgBox "Fehler " & Err.Number & vbCrLf _
             & Err.Description
End Select

XML-Beschreibung der Spezifikation ausgeben

Mit der Eigenschaft XML geben wir die vollständige Dokumentation der Spezifikation aus. Diese sieht beispielsweise für den Export einer Tabelle im PDF-Format wie in Listing 1 aus.

<?xml version="1.0" encoding="utf-8" ?>
<ImportExportSpecification Path = "C:\...\MSysObjects.pdf" xmlns="urn:www.microsoft.com/office/access/imexspec">
     <ExportPDF  AccessObject="MSysObjects" ObjectType="Table" AutoStart="false" Quality="screen" 
         UseISO19005_1="false" />
</ImportExportSpecification>

Listing 1: Exportspezifikation für eine Tabelle, die als PDF-Dokument exportiert werden soll

Die Spezifikation gibt den Ziel- oder Quellpfad und den Namespace an. Außerdem enthält sie ein Element namens ExportPDF. Dieses stellt die Attribute mit den übrigen Eigenschaften bereit:

  • AccessObject: Name des zu exportierenden Access-Objekts
  • ObjectType: Typ des zu exportierenden Access-Objekts
  • AutoStart: Angabe, ob die erstellte Datei automatisch geöffnet werden soll.
  • Quality: Qualität des Exports (hier zum Beispiel screen).
  • UseISO19005_1: Gibt an, ob das Format PDF/A verwendet werden soll.

Für den Export einer Textdatei fallen bereits wesentlich mehr Informationen an, wie Listing 2 zeigt.

<?xml version="1.0" encoding="utf-8" ?>
<ImportExportSpecification Path = "C:\...\MSysObjects.txt" xmlns="urn:www.microsoft.com/office/access/imexspec">
     <ExportText TextFormat="Delimited" FirstRowHasNames="false" FieldDelimiter=";" TextDelimiter="{DoubleQuote}" 
             CodePage="1252" AccessObject="MSysObjects" ObjectType="Table" >
         <DateFormat DateOrder="DMY" DateDelimiter="." TimeDelimiter=":" FourYearDates="true" DatesLeadingZeros="false" />
         <NumberFormat DecimalSymbol="," />
         <Columns PrimaryKey="{Auto}">
             <Column Name="Col1" FieldName="Connect" Indexed="NO" SkipColumn="false" DataType="Memo" Width="512" />
             <Column Name="Col2" FieldName="Database" Indexed="NO" SkipColumn="false" DataType="Memo" 
                 Width="512" />
             <Column Name="Col3" FieldName="DateCreate" Indexed="NO" SkipColumn="false" DataType="DateTime" Width="19" />
             <Column Name="Col4" FieldName="DateUpdate" Indexed="NO" SkipColumn="false" DataType="DateTime" Width="19" />
             <Column Name="Col5" FieldName="Flags" Indexed="NO" SkipColumn="false" DataType="Long" Width="11" />
             <Column Name="Col6" FieldName="ForeignName" Indexed="NO" SkipColumn="false" DataType="Text" Width="255" />
             <Column Name="Col7" FieldName="Id" Indexed="NO" SkipColumn="false" DataType="Long" Width="11" />
             <Column Name="Col8" FieldName="Lv" Indexed="NO" SkipColumn="false" DataType="LongBinary" Width="5" />
             ...
         </Columns>
     </ExportText>
</ImportExportSpecification>

Listing 2: Exportspezifikation für eine Tabelle, die als Textdatei exportiert werden soll

Die entscheidende Frage, die sich hier stellt, ist: Können wir diese XML-Dokumente anpassen und in die Eigenschaft XML zurückschreiben, um die Spezifikationen per Code anzupassen oder sogar zu erstellen?

Die Antwort lautet ja. Wie genau funktioniert das? Wir müssen einfach den Inhalt der Eigenschaft XML auslesen, diese beispielsweise in einer Variablen speichern und dort bearbeiten und sie dann wieder der Eigenschaft XML zuweisen. Es braucht nichts gespeichert zu werden.

Schreibe einen Kommentar