{"id":55001046,"date":"2016-08-01T00:00:00","date_gmt":"2020-05-22T15:28:58","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1046"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"XMLExport_mit_VBA","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/","title":{"rendered":"XML-Export mit VBA"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg09.met.vgwort.de\/na\/bbad444c128142eb91db7ca47d15ef76\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Access stellt verschiedene M&ouml;glichkeiten f&uuml;r den Export von Daten im XML-Format zur Verf&uuml;gung. Die Variante, mit der Sie Tabellen &uuml;ber die Benutzeroberfl&auml;che in das XML-Format exportieren k&ouml;nnen, k&ouml;nnen Sie nat&uuml;rlich auch per VBA nutzen &#8211; und zwar mit dem Befehl &#8222;ExportXML&#8220; des &#8222;Application&#8220;-Objekts. Dieser Beitrag zeigt, welcher Parameter welcher Option entspricht und welche zus&auml;tzlichen Features Sie per VBA erhalten.<\/b><\/p>\n<p>Der Export von Daten aus Access heraus in ein XML-Dokument erfordert immer zumindest die Angabe einer Tabelle sowie der Zieldatei. Au&szlig;erdem k&ouml;nnen Sie nicht nur Tabellen, sondern auch alle anderen Objekttypen von Access im XML-Format exportieren &#8211; also m&uuml;ssen Sie auch noch den Objekttyp angeben. Dementsprechend lautet die minimale Version eines Aufrufs der Methode <b>ExportXML <\/b>des <b>Application<\/b>-Objekts wie folgt:<\/p>\n<pre>Application.ExportXML acExportTable, \"tblAnreden\", _\r\n    CurrentProject.Path & \"\\tblAnreden.xml\"<\/pre>\n<p>Der erste Parameter erwartet den Objekttyp, in diesem Fall <b>acExportTable <\/b>(bei einer Abfrage w&uuml;rden Sie etwa <b>acExportQuery <\/b>nutzen). Der zweite gibt den Namen des zu exportierenden Objekts an (hier <b>tblAnreden<\/b>) und der dritte den Pfad zu der zu erzeugenden Datei. Hier haben wir <b>CurrentProject.Path <\/b>zur Ermittlung des Verzeichnisses der aktuellen Datenbank genutzt, damit die XML-Datei direkt in diesem Verzeichnis angelegt wird &#8211; und zwar unter dem Namen <b>tblAnreden.xml<\/b>. Damit k&ouml;nnen Sie den ersten einfachen Export per Einzeiler erledigen und sich das Ergebnis ansehen:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-8\"&gt;\r\n&lt;dataroot ...&gt;\r\n   &lt;tblAnreden&gt;\r\n     &lt;AnredeID&gt;1&lt;\/AnredeID&gt;\r\n     &lt;Anrede&gt;Herr&lt;\/Anrede&gt;\r\n   &lt;\/tblAnreden&gt;\r\n   &lt;tblAnreden&gt;\r\n     &lt;AnredeID&gt;2&lt;\/AnredeID&gt;\r\n     &lt;Anrede&gt;Frau&lt;\/Anrede&gt;\r\n   &lt;\/tblAnreden&gt;\r\n&lt;\/dataroot&gt;<\/pre>\n<p>Mit diesem Einzeiler sparen Sie sich einige Mausklicks, die Sie bei der Benutzung des Export-Assistenten &uuml;ber die Benutzeroberfl&auml;che h&auml;tten ausf&uuml;hren m&uuml;ssen &#8211; zumindest, wenn Sie diese Anweisung einmal in eine Prozedur eingetragen haben und dann aufrufen.<\/p>\n<p>Nun bietet der Assistent noch einige weitere M&ouml;glichkeiten, die wir uns auch schon im Beitrag <b>XML-Export ohne VBA <\/b>(<b>www.access-im-unternehmen.de\/1045<\/b>) angesehen haben. Diese wollen wir nun auch mit VBA abbilden.<\/p>\n<h2>Zu exportierende Daten einschr&auml;nken<\/h2>\n<p>In manchen F&auml;llen m&ouml;chten Sie vielleicht nicht alle Daten einer Tabelle exportieren, sondern nur eine Teilmenge. Bei Benutzung des Assistenten musste daf&uuml;r die Tabelle mit den zu exportierenden Daten ge&ouml;ffnet sein.<\/p>\n<p>Wenn Sie einen einzelnen Datensatz exportieren wollten, mussten Sie diesen zun&auml;chst markieren und dann den Assistenten starten, der nun die Option <b>Aktueller Datensatz <\/b>bereitstellte. Wenn Sie zuvor einen Filter f&uuml;r die Tabelle oder Abfrage festgelegt haben, konnten Sie auch mit der Option  <b>Bestehenden Filter anwenden <\/b>arbeiten.<\/p>\n<p>Nun sollen Sie vor dem Exportieren der Tabellendaten nicht erst die Tabelle &ouml;ffnen und den Filter definieren. Dies erledigen Sie n&auml;mlich mit einem einfachen Parameter der <b>ExportXML<\/b>-Methode. Im Gegensatz zu den bereits im vorherigen Beispiel vorgestellten drei Parametern befindet sich der nun gesuchte Parameter relativ weit hinten in der Parameterliste, sodass Sie entweder eine entsprechende Anzahl Kommata setzen, um zum gew&uuml;nschten Parameter zu gelangen oder den Parameter benennen. Wir wollen in diesem Fall alle Datens&auml;tze der Tabelle <b>tblArtikel <\/b>exportieren, deren Artikelname mit <b>A <\/b>beginnt.<\/p>\n<p>Im ersten Anlauf f&uuml;gen wir die entsprechende Anzahl Kommata ein, wobei uns IntelliSense wie in Bild 1 unterst&uuml;tzt. Der Befehl sieht dann wie folgt aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_1046_001.png\" alt=\"Eingabe der Parameter f&uuml;r den Export mit einer Bedingung\" width=\"700\" height=\"132,3762\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Eingabe der Parameter f&uuml;r den Export mit einer Bedingung<\/span><\/b><\/p>\n<pre>Application.ExportXML acExportTable, \"tblArtikel\",  _\r\n    CurrentProject.Path & \"\\tblArtikel.xml\", , , , , ,  \"Artikelname LIKE ''''A*''''\"<\/pre>\n<p>Das Ergebnis &uuml;berrascht: Es liefert nur den Kopf des Exportdokuments, aber keinerlei Artikeldaten (s. Bild 2). Eine kurze Pr&uuml;fung der zu exportierenden Tabelle <b>tblArtikel <\/b>zeigt, dass dort durchaus Artikel vorliegen, deren <b>Artikelname <\/b>mit <b>A <\/b>beginnt. Ein Blick in die Online-Dokumentation liefert auch keine Hinweise auf einen Fehler in der Formulierung unserer Bedingung.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_1046_002.png\" alt=\"XML-Export ohne Daten\" width=\"649,4275\" height=\"213,1454\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: XML-Export ohne Daten<\/span><\/b><\/p>\n<p>Also experimentieren wir einfach etwas herum und finden heraus, dass es mit kompletten Vergleichswerten funktioniert &#8211; also etwa mit folgendem Aufruf:<\/p>\n<pre>Application.ExportXML acExportTable, \"tblArtikel\",  _\r\n    CurrentProject.Path & \"\\tblArtikel.xml\", , , , , ,  \"Artikelname LIKE ''''Alice Mutton''''\"<\/pre>\n<p>Wie Bild 3 zeigt, funktioniert das Setzen einer Bedingung also grunds&auml;tzlich.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_1046_003.png\" alt=\"XML-Export mit Filter nach Artikelname\" width=\"649,4275\" height=\"333,8722\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: XML-Export mit Filter nach Artikelname<\/span><\/b><\/p>\n<p>Woran also hapert es bei Verwendung eines Platzhalters wie dem Sternchen (<b>*<\/b>)<\/p>\n<p>Da wir wissen, dass in anderen SQL-Dialekten durchaus auch mal andere Platzhalter-Zeichen zum Einsatz kommen, wobei statt des Sternchens beispielsweise das Prozentzeichen <b>(%<\/b>) verwendet wird, probieren wir es einfach einmal so aus:<\/p>\n<pre>Application.ExportXML acExportTable, \"tblArtikel\", _\r\n    CurrentProject.Path & \"\\tblArtikel.xml\", , , , , ,  \"Artikelname LIKE ''''A%''''\"<\/pre>\n<p>Und siehe da: Es funktioniert! Hier ist die Ausgabe f&uuml;r diese Anweisung mit den beiden betroffenen Artikel-Datens&auml;tzen:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-8\"&gt;\r\n&lt;dataroot ...&gt;\r\n   &lt;tblArtikel&gt;\r\n     &lt;ArtikelID&gt;3&lt;\/ArtikelID&gt;\r\n     &lt;Artikelname&gt;Aniseed Syrup&lt;\/Artikelname&gt;\r\n     &lt;LieferantID&gt;1&lt;\/LieferantID&gt;\r\n     &lt;KategorieID&gt;2&lt;\/KategorieID&gt;\r\n     &lt;Liefereinheit&gt;12 x 550-ml-Flaschen&lt;\/Liefereinheit&gt;\r\n     &lt;Einzelpreis&gt;5&lt;\/Einzelpreis&gt;\r\n     &lt;Lagerbestand&gt;13&lt;\/Lagerbestand&gt;\r\n     &lt;BestellteEinheiten&gt;70&lt;\/BestellteEinheiten&gt;\r\n     &lt;Mindestbestand&gt;25&lt;\/Mindestbestand&gt;\r\n     &lt;Auslaufartikel&gt;0&lt;\/Auslaufartikel&gt;\r\n   &lt;\/tblArtikel&gt;\r\n   &lt;tblArtikel&gt;\r\n     &lt;ArtikelID&gt;17&lt;\/ArtikelID&gt;\r\n     &lt;Artikelname&gt;Alice Mutton&lt;\/Artikelname&gt;\r\n     &lt;LieferantID&gt;7&lt;\/LieferantID&gt;\r\n     &lt;KategorieID&gt;6&lt;\/KategorieID&gt;\r\n     &lt;Liefereinheit&gt;20 x 1-kg-Dosen&lt;\/Liefereinheit&gt;\r\n     &lt;Einzelpreis&gt;19.5&lt;\/Einzelpreis&gt;\r\n     &lt;Lagerbestand&gt;0&lt;\/Lagerbestand&gt;\r\n     &lt;BestellteEinheiten&gt;0&lt;\/BestellteEinheiten&gt;\r\n     &lt;Mindestbestand&gt;0&lt;\/Mindestbestand&gt;\r\n     &lt;Auslaufartikel&gt;1&lt;\/Auslaufartikel&gt;\r\n   &lt;\/tblArtikel&gt;\r\n&lt;\/dataroot&gt;<\/pre>\n<p>Wenn Sie nicht mit den vielen Kommata durcheinanderkommen wollen, k&ouml;nnen Sie, wie oben erw&auml;hnt, mit einem benannten Parameter arbeiten. Der Aufruf sieht dann so aus:<\/p>\n<pre>Application.ExportXML acExportTable, _\r\n    \"tblArtikel\", CurrentProject.Path & \"\\tblArtikel.xml\", _\r\n    WhereCondition:=\"Artikelname LIKE ''''A%''''\"<\/pre>\n<p>Sie k&ouml;nnen auch alle Parameter benennen:<\/p>\n<pre>Application.ExportXML ObjectType:=acExportTable,  DataSource:=\"tblArtikel\", _\r\n    DataTarget:=CurrentProject.Path & \"\\tblArtikel.xml\",  WhereCondition:=\"Artikelname LIKE ''''A%''''\"<\/pre>\n<h2>Parameter des Aufrufs<\/h2>\n<p>Einige Parameter haben Sie nun schon kennen gelernt, dennoch hier die &uuml;bersicht aller m&ouml;glichen Parameter:<\/p>\n<ul>\n<li><b>ObjectType<\/b>: Konstante f&uuml;r den Objekttyp, hier sinnvollerweise <b>acExportTable <\/b>oder <b>acExportQuery<\/b>. Andere Werte wie <b>acExportForm <\/b>oder <b>acExportReport <\/b>erscheinen auf den ersten Blick sinnlos, aber haben doch ihre Daseinsberechtigung: Sie exportieren damit n&auml;mlich nicht etwa eine Formular- oder Berichtsdefinition, sondern die darin angezeigten Daten.<\/li>\n<li><b>DataSource<\/b>: Name der Datenquelle, also etwa der Tabelle oder der Abfrage.<\/li>\n<li><b>DataTarget<\/b>: Pfad zur Zieldatei f&uuml;r den Export. Vorhandene Dateien werden ohne Warnung &uuml;berschrieben.<\/li>\n<li><b>SchemaTarget<\/b>: Ziel f&uuml;r die erstellte Schema-Datei.<\/li>\n<li><b>PresentationTarget<\/b>: Ziel f&uuml;r eine Datei mit Informationen zur Pr&auml;sentation der Daten.<\/li>\n<li><b>ImageTarget<\/b>: Pfad f&uuml;r eventuell zu exportierende Bilder. Im Test konnten wir damit keine Bilder exportieren.<\/li>\n<li><b>Encoding<\/b>: Konstante f&uuml;r die Kodierung des XML-Dokuments (<b>acUTF16 <\/b>oder <b>acUTF32<\/b>)<\/li>\n<li><b>OtherFlags<\/b>: Kombination aus keinem, einem oder mehreren der folgenden Konstanten (hier nur die wichtigsten &#8211; mehr in der Onlinehilfe): <b>acEmbedSchema <\/b>(<b>1<\/b>) &#8211; sorgt daf&uuml;r, dass Schemainformationen in das XML-Dokument geschrieben werden, <b>acExcludePrimaryKeyAndIndexes <\/b>(<b>2<\/b>) &#8211; schlie&szlig;t Prim&auml;rschl&uuml;ssel und Indizes beim Export aus, <b>acExportAllTableAndFieldProperties <\/b>(<b>32<\/b>) &#8211; exportiert Eigenschaften von Tabellen und Feldern mit dem Schema.<\/li>\n<li><b>WhereCondition<\/b>: Bedingung f&uuml;r die auszugebenden Datens&auml;tze<\/li>\n<li><b>AdditionalData<\/b>: Angabe weiterer Tabellen, die exportiert werden sollen. Erm&ouml;glicht die Auswahl der Tabellen, wie es beim Assistenten per TreeView m&ouml;glich ist (s. Bild 4). <b>AdditionalData <\/b>bietet allerdings noch mehr M&ouml;glichkeiten.<\/li>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_1046_004.png\" alt=\"Auswahl der zu exportierenden Tabellen per TreeView und Kontrollk&auml;stchen\" width=\"549,5155\" height=\"356,0782\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Auswahl der zu exportierenden Tabellen per TreeView und Kontrollk&auml;stchen<\/span><\/b><\/p>\n<\/ul>\n<h2>Daten aus mehreren Tabellen<\/h2>\n<p>Den Parameter <b>AdditionalData <\/b>schauen wir uns als N&auml;chstes an. Onlinehilfe und Objektkatalog schweigen sich ebenso wie Intellisense &uuml;ber den Datentyp des zu &uuml;bergebenden Wertes oder Objekts aus &#8211; hier taucht lediglich der Datentyp <b>Variant <\/b>auf, der ja verschiedene Typen aufnehmen kann. Schlie&szlig;lich hilft eine Suche nach dem Schl&uuml;sselwort <b>AdditionalData<\/b> im Objektkatalog weiter (s. Bild 5). Hier erfahren wir, dass es sich um eine eigene Klasse handelt, der wir wohl auch noch rekursiv weitere <b>AdditionalData<\/b>-Elemente zuweisen k&ouml;nnen. Das macht nat&uuml;rlich Sinn, denn auch der Assistent f&uuml;r den XML-Export bietet ja die verkn&uuml;pften Tabellen in hierarchischer Anordnung an.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_1046_005.png\" alt=\"Der Objektkatalog liefert Informationen &uuml;ber den Datentyp von AdditionalData.\" width=\"424,6255\" height=\"413,8528\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Der Objektkatalog liefert Informationen &uuml;ber den Datentyp von AdditionalData.<\/span><\/b><\/p>\n<h2>Export von Tabellen mit verkn&uuml;pfter Lookuptabelle<\/h2>\n<p>Schauen wir uns ein einfaches Beispiel an &#8211; Kunden und ihre Anreden. Dazu wollen wir die Tabelle <b>tblKunden <\/b>exportieren und die Daten der Tabelle <b>tblAnreden <\/b>als zus&auml;tzliche Daten mitliefern. Wenn wir das mit dem Assistenten erledigen, definieren wir den Export wie in Bild 6. Das Ergebnis sieht dann so aus:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_1046_006.png\" alt=\"Definition des Exports von Kunden und ihren Anreden\" width=\"549,5155\" height=\"356,0782\"\/><\/p>\n<p><!--30percent--><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Definition des Exports von Kunden und ihren Anreden<\/span><\/b><\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-8\"&gt;\r\n&lt;dataroot ...&gt;\r\n   &lt;tblKunden&gt;\r\n     &lt;KundeID&gt;1&lt;\/KundeID&gt;\r\n     &lt;KundenCode&gt;ALFKI&lt;\/KundenCode&gt;\r\n     &lt;Firma&gt;Alfreds Futterkiste&lt;\/Firma&gt;\r\n     &lt;AnredeID&gt;2&lt;\/AnredeID&gt;\r\n     &lt;Vorname&gt;Maria&lt;\/Vorname&gt;\r\n     &lt;Nachname&gt;Anders&lt;\/Nachname&gt;\r\n     ...\r\n   &lt;\/tblKunden&gt;\r\n   ...\r\n   &lt;tblAnreden&gt;\r\n     &lt;AnredeID&gt;1&lt;\/AnredeID&gt;\r\n     &lt;Anrede&gt;Herr&lt;\/Anrede&gt;\r\n   &lt;\/tblAnreden&gt;\r\n   &lt;tblAnreden&gt;\r\n     &lt;AnredeID&gt;2&lt;\/AnredeID&gt;\r\n     &lt;Anrede&gt;Frau&lt;\/Anrede&gt;\r\n   &lt;\/tblAnreden&gt;\r\n&lt;\/dataroot&gt;<\/pre>\n<p>Das hei&szlig;t, dass die Anrede im <b>tblKunden<\/b>-Element als Fremdschl&uuml;sselwert gespeichert wird und alle Datens&auml;tze der Tabelle <b>tblAnreden <\/b>ebenfalls angeh&auml;ngt werden, sodass diese einfach wieder importiert werden k&ouml;nnen.<\/p>\n<p>Nun schauen wir uns an, was geschieht, wenn wir den Export per VBA durchf&uuml;hren und dem Parameter <b>AdditionalData <\/b>ein Objekt des gleichnamigen Typs &uuml;bergeben, das wir zuvor mit dem Element <b>tblAnreden <\/b>gef&uuml;llt haben.<\/p>\n<p>Den Code finden Sie in Listing 1. Hier deklarieren wir das <b>AdditionalData<\/b>-Objekt mit der Variablen <b>objAdditionalData <\/b>und erstellen es dann mit der Methode <b>CreateAdditionalData <\/b>des <b>Application<\/b>-Objekts. Dann f&uuml;gen wir mit der <b>Add<\/b>-Methode die Tabelle <b>tblAnreden <\/b>hinzu. Schlie&szlig;lich &uuml;bergeben wir das Objekt mit dem Parameter <b>AdditionalData <\/b>an die Methode <b>ExportXML<\/b>.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ExportKundenUndAnreden()\r\n     <span style=\"color:blue;\">Dim <\/span>objAdditionalData<span style=\"color:blue;\"> As <\/span>AdditionalData\r\n     <span style=\"color:blue;\">Set<\/span> objAdditionalData = Application.CreateAdditionalData\r\n     objAdditionalData.Add \"tblAnreden\"\r\n     Application.ExportXML acExportTable, \"tblKunden\", _\r\n         CurrentProject.Path & \"\\KundenUndAnreden.xml\", _\r\n         AdditionalData:=objAdditionalData\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Export der Kundendaten und der Anreden<\/span><\/b><\/p>\n<p>Das Ergebnis des Exports sieht diesmal wie folgt aus:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-8\"&gt;\r\n&lt;dataroot ...&gt;\r\n   &lt;tblKunden&gt;\r\n     &lt;KundeID&gt;1&lt;\/KundeID&gt;\r\n     &lt;KundenCode&gt;ALFKI&lt;\/KundenCode&gt;\r\n     &lt;Firma&gt;Alfreds Futterkiste&lt;\/Firma&gt;\r\n     &lt;AnredeID&gt;2&lt;\/AnredeID&gt;\r\n     &lt;Vorname&gt;Maria&lt;\/Vorname&gt;\r\n     &lt;Nachname&gt;Anders&lt;\/Nachname&gt;\r\n     ...\r\n     &lt;tblAnreden&gt;\r\n       &lt;AnredeID&gt;2&lt;\/AnredeID&gt;\r\n       &lt;Anrede&gt;Frau&lt;\/Anrede&gt;\r\n     &lt;\/tblAnreden&gt;\r\n   &lt;\/tblKunden&gt;\r\n   ...\r\n   &lt;tblKunden&gt;\r\n     &lt;KundeID&gt;3&lt;\/KundeID&gt;\r\n     &lt;KundenCode&gt;ANTON&lt;\/KundenCode&gt;\r\n     &lt;Firma&gt;Antonio Moreno Taquer&iacute;a&lt;\/Firma&gt;\r\n     &lt;AnredeID&gt;1&lt;\/AnredeID&gt;\r\n     &lt;Vorname&gt;Antonio&lt;\/Vorname&gt;\r\n     &lt;Nachname&gt;Moreno&lt;\/Nachname&gt;\r\n     ...\r\n     &lt;tblAnreden&gt;\r\n       &lt;AnredeID&gt;1&lt;\/AnredeID&gt;\r\n       &lt;Anrede&gt;Herr&lt;\/Anrede&gt;\r\n     &lt;\/tblAnreden&gt;\r\n   &lt;\/tblKunden&gt;\r\n   ...\r\n&lt;\/dataroot&gt;<\/pre>\n<p>Hier h&auml;ngen die beiden m&ouml;glichen Datens&auml;tze der Tabelle <b>tblAnreden <\/b>also nicht hinten am XML-Dokument an, sondern es wird jeweils der zutreffende Datensatz als Element dem aktuellen <b>tblKunden<\/b>-Element untergeordnet. Auch wenn der Import in eine Datenbank mit gleicher Datenstruktur nun nicht mehr so einfach m&ouml;glich ist, so gibt es dennoch sicher Anwendungsf&auml;lle, in denen gerade die hier produzierte Variante n&uuml;tzlich ist.<\/p>\n<p>Das bekommen Sie mit dem Assistenten so nicht hin. Aber k&ouml;nnen wir die vom Assistenten gelieferte Version, die ja die Daten beider Tabellen hintereinander ausgibt, per VBA nachbilden<\/p>\n<h2>Export ohne Beziehung<\/h2>\n<p>Dies scheint nur zu funktionieren, wenn wir zwei Tabellen verwenden, die nicht &uuml;ber ein Fremdschl&uuml;sselfeld miteinander verkn&uuml;pft sind. Da wir nun kaum die Beziehungen aus der Datenbank l&ouml;schen wollen und auch nicht darauf aus sind, die relevanten Tabellen unter anderem Namen und ohne Beziehung zu duplizieren, verwenden wir einfach entsprechende Abfragen.<\/p>\n<p>Erstellen Sie also eine Abfrage namens <b>tblKunden_NoRelation<\/b>, welche die Tabelle <b>tblKunden <\/b>als Datenquelle verwendet und alle Felder dieser Tabelle enth&auml;lt. Das Gleiche erledigen Sie f&uuml;r die Tabelle <b>tblAnreden<\/b>. Hier nennen Sie die resultierende Abfrage <b>tblAnreden_NoRelation<\/b>. Beide zusammen sehen dann wie in Bild 7 aus.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_1046_007.png\" alt=\"Abfragen, um nicht verkn&uuml;pfte Tabellen zu simulieren\" width=\"700\" height=\"250,7663\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Abfragen, um nicht verkn&uuml;pfte Tabellen zu simulieren<\/span><\/b><\/p>\n<p>Die Prozedur zum Exportieren brauchen wir nur an drei Stellen umzuformulieren: Wir f&uuml;gen dem Objekt <b>objAdditionalData <\/b>die Abfrage <b>tblAnreden_NoRelation <\/b>hinzu, geben als Quelle der <b>ExportXML<\/b>-Methode die Abfrage <b>tblKunden_NoRelation <\/b>an und &#8211; ganz wichtig &#8211; legen als Wert f&uuml;r den Parameter <b>Objekttyp <\/b>statt <b>acExportTable <\/b>den Wert <b>acExportQuery <\/b>fest.<\/p>\n<p>Sonst gibt es n&auml;mlich den Fehler mit der Nummer <b>2467 <\/b>(&#8222;In dem von Ihnen eingegebenen Ausdruck wird auf ein Objekt verwiesen, das geschlossen oder nicht vorhanden ist.&#8220;). Die neue Version der Prozedur finden Sie in Listing 2.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ExportKundenUndAnreden_NoRelation()\r\n    <span style=\"color:blue;\">Dim <\/span>objAdditionalData<span style=\"color:blue;\"> As <\/span>AdditionalData\r\n    <span style=\"color:blue;\">Set<\/span> objAdditionalData = Application.CreateAdditionalData\r\n    objAdditionalData.Add \"tblAnreden_NoRelation\"\r\n    Application.ExportXML acExportQuery, \"tblKunden_NoRelation\", _\r\n        CurrentProject.Path & \"\\KundenUndAnreden.xml\", _\r\n        AdditionalData:=objAdditionalData\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Export der Kundendaten und der Anreden ohne Beziehung zwischen den Daten<\/span><\/b><\/p>\n<p>Das Ergebnis sieht nun wie gew&uuml;nscht aus &#8211; die Datens&auml;tze der Tabelle <b>tblAnreden <\/b>werden hinter den Kundendatens&auml;tzen eingef&uuml;gt, statt mittendrin:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-8\"&gt;\r\n&lt;dataroot ...&gt;\r\n   &lt;tblKunden_NoRelation&gt;\r\n     &lt;KundeID&gt;1&lt;\/KundeID&gt;\r\n     &lt;KundenCode&gt;ALFKI&lt;\/KundenCode&gt;\r\n     &lt;Firma&gt;Alfreds Futterkiste&lt;\/Firma&gt;\r\n     &lt;AnredeID&gt;2&lt;\/AnredeID&gt;\r\n     &lt;Vorname&gt;Maria&lt;\/Vorname&gt;\r\n     &lt;Nachname&gt;Anders&lt;\/Nachname&gt;\r\n     &lt;Position&gt;Vertriebsmitarbeiterin&lt;\/Position&gt;\r\n     &lt;PLZ&gt;12209&lt;\/PLZ&gt;\r\n     &lt;Strasse&gt;Obere Str. 57&lt;\/Strasse&gt;\r\n     &lt;Ort&gt;Berlin&lt;\/Ort&gt;\r\n     &lt;Land&gt;Deutschland&lt;\/Land&gt;\r\n     &lt;Telefon&gt;030-0074321&lt;\/Telefon&gt;\r\n     &lt;Telefax&gt;030-0076545&lt;\/Telefax&gt;\r\n   &lt;\/tblKunden_NoRelation&gt;\r\n   ...\r\n   &lt;tblAnreden_NoRelation&gt;\r\n     &lt;AnredeID&gt;1&lt;\/AnredeID&gt;\r\n     &lt;Anrede&gt;Herr&lt;\/Anrede&gt;\r\n   &lt;\/tblAnreden_NoRelation&gt;\r\n   &lt;tblAnreden_NoRelation&gt;\r\n     &lt;AnredeID&gt;2&lt;\/AnredeID&gt;\r\n     &lt;Anrede&gt;Frau&lt;\/Anrede&gt;\r\n   &lt;\/tblAnreden_NoRelation&gt;\r\n&lt;\/dataroot&gt;<\/pre>\n<h2>Export von 1:n-Daten<\/h2>\n<p>Beim Export einer Tabelle wie <b>tblKunden <\/b>und seiner Lookuptabelle <b>tblAnreden <\/b>geben wir die Tabelle mit dem Fremdschl&uuml;sselfeld der Beziehung als Parameter der <b>ExportXML<\/b>-Methode an und f&uuml;gen die Tabelle mit dem an der Beziehung beteiligten Prim&auml;rschl&uuml;sselfeld mit dem Parameter <b>AdditionalData <\/b>hinzu. Damit erhalten wir, wie wir oben gesehen haben, standardm&auml;&szlig;ig keine Verschachtelung der Daten, sondern diese werden nacheinander in das XML-Dokument geschrieben.<\/p>\n<p>Wie sieht es aber aus, wenn wir die Tabellen der Beziehung in umgekehrter Reihenfolge angeben, also die Tabelle mit dem an der Beziehung beteiligten Prim&auml;rschl&uuml;sselfeld als Parameter der <b>ExportXML<\/b>-Methode angeben und die Tabelle mit dem Fremdschl&uuml;sselfeld per <b>AdditionalData<\/b>-Parameter Wir schauen uns dies am Beispiel der Tabellen <b>tblKategorien <\/b>und <b>tblArtikel <\/b>an. Im Assistenten w&uuml;rden wir dies wie in Bild 8 definieren.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2016_04\/pic_1046_008.png\" alt=\"Export von Kategorien und den verkn&uuml;pften Artikeln per Assistent\" width=\"499,5594\" height=\"323,7075\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Export von Kategorien und den verkn&uuml;pften Artikeln per Assistent<\/span><\/b><\/p>\n<p>Der Export w&uuml;rde in diesem Fall so aussehen:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-8\"&gt;\r\n&lt;dataroot ...&gt;\r\n   &lt;tblKategorien&gt;\r\n     &lt;KategorieID&gt;1&lt;\/KategorieID&gt;\r\n     &lt;Kategoriename&gt;Getr&auml;nke&lt;\/Kategoriename&gt;\r\n     &lt;Beschreibung&gt;Alkoholfreie Getr&auml;nke...&lt;\/Beschreibung&gt;\r\n     &lt;Abbildung&gt;...&lt;\/Abbildung&gt;\r\n     &lt;tblArtikel&gt;\r\n       &lt;ArtikelID&gt;1&lt;\/ArtikelID&gt;\r\n       &lt;Artikelname&gt;Chai&lt;\/Artikelname&gt;\r\n       &lt;LieferantID&gt;1&lt;\/LieferantID&gt;\r\n       &lt;KategorieID&gt;1&lt;\/KategorieID&gt;\r\n       &lt;Liefereinheit&gt;10 Kartons x 20 Beutel&lt;\/Liefereinheit&gt;\r\n       &lt;Einzelpreis&gt;9&lt;\/Einzelpreis&gt;\r\n       &lt;Lagerbestand&gt;39&lt;\/Lagerbestand&gt;\r\n       &lt;BestellteEinheiten&gt;0&lt;\/BestellteEinheiten&gt;\r\n       &lt;Mindestbestand&gt;10&lt;\/Mindestbestand&gt;\r\n       &lt;Auslaufartikel&gt;0&lt;\/Auslaufartikel&gt;\r\n     &lt;\/tblArtikel&gt;\r\n     &lt;tblArtikel&gt;\r\n       &lt;ArtikelID&gt;2&lt;\/ArtikelID&gt;\r\n       &lt;Artikelname&gt;Chang&lt;\/Artikelname&gt;\r\n       &lt;LieferantID&gt;1&lt;\/LieferantID&gt;\r\n       &lt;KategorieID&gt;1&lt;\/KategorieID&gt;\r\n       &lt;Liefereinheit&gt;24 x 12-oz-Flaschen&lt;\/Liefereinheit&gt;\r\n       &lt;Einzelpreis&gt;9.5&lt;\/Einzelpreis&gt;\r\n       &lt;Lagerbestand&gt;17&lt;\/Lagerbestand&gt;\r\n       &lt;BestellteEinheiten&gt;40&lt;\/BestellteEinheiten&gt;\r\n       &lt;Mindestbestand&gt;25&lt;\/Mindestbestand&gt;\r\n       &lt;Auslaufartikel&gt;0&lt;\/Auslaufartikel&gt;\r\n     &lt;\/tblArtikel&gt;\r\n     ...\r\n   &lt;\/tblKategorien&gt;\r\n...\r\n&lt;\/dataroot&gt;<\/pre>\n<p>Die Artikel einer Kategorie werden also dem jeweiligen <b>tblKategorie<\/b>-Element untergeordnet.<\/p>\n<p>Unter VBA w&uuml;rden Sie den Export wie in Listing 3 realisieren. Das Ergebnis ist das Gleiche wie im zuvor beschriebenen Export &uuml;ber den Assistenten &#8211; hier verhalten sich der Export-Assistent und die <b>ExportXML<\/b>-Methode also identisch.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ExportKategorienUndArtikel()\r\n     <span style=\"color:blue;\">Dim <\/span>objAdditionalData<span style=\"color:blue;\"> As <\/span>AdditionalData\r\n     <span style=\"color:blue;\">Set<\/span> objAdditionalData = Application.CreateAdditionalData\r\n     objAdditionalData.Add \"tblArtikel\"\r\n     Application.ExportXML acExportTable, \"tblKategorien\", _\r\n         CurrentProject.Path & \"\\KategorienUndArtikel.xml\", _\r\n         AdditionalData:=objAdditionalData\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Export der Kategorien und der dazu geh&ouml;renden Artikel<\/span><\/b><\/p>\n<h2>Tiefer in die Hierarchie gehen<\/h2>\n<p>Nun wissen Sie, wie zus&auml;tzlich zu der zu exportierenden Tabelle noch eine weitere, verkn&uuml;pfte Tabelle zum Export hinzuf&uuml;gen k&ouml;nnen und wie Sie diese direkt in die Elemente der Haupttabelle integrieren oder auch nicht. Was aber, wenn Sie nicht nur die Daten von Tabellen exportieren wollen, die direkt mit der Haupttabelle verkn&uuml;pft sind, sondern noch dar&uuml;ber hinaus Dazu wollen wir beispielsweise die Bestellungen inklusive Bestelldetails, Artikelinformationen, Kundendaten und Anreden exportieren. F&uuml;r den Beginn reichen uns die drei Tabellen <b>tblBestellungen<\/b>, <b>tblBestelldetails <\/b>und <b>tblArtikel <\/b>aus. Wir geben einfach die Tabelle <b>tblBestellungen <\/b>als Datenquelle f&uuml;r <b>Export-XML <\/b>an und f&uuml;gen die beiden Tabellen <b>tblBestelldetails <\/b>und <b>tblArtikel <\/b>&uuml;ber die <b>Add<\/b>-Methode dem <b>AdditionalData<\/b>-Objekt hinzu, das wir dann ebenfalls als Parameter an <b>ExportXML <\/b>&uuml;bergeben (s. Listing 4). Das Ergebnis sieht nun wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ExportBestellungenBestelldetailsArtikel_I()\r\n     <span style=\"color:blue;\">Dim <\/span>objAdditionalData<span style=\"color:blue;\"> As <\/span>AdditionalData\r\n     <span style=\"color:blue;\">Set<\/span> objAdditionalData = Application.CreateAdditionalData\r\n     objAdditionalData.Add \"tblBestelldetails\"\r\n     objAdditionalData.Add \"tblArtikel\"\r\n     Application.ExportXML acExportTable, \"tblBestellungen\", _\r\n         CurrentProject.Path & \"\\Bestellungen.xml\", _\r\n         AdditionalData:=objAdditionalData\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Export der Bestellungen samt Bestelldetails und Artikeldetails<\/span><\/b><\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-8\"&gt;\r\n&lt;dataroot ...&gt;\r\n   &lt;tblBestellungen&gt;\r\n     &lt;BestellungID&gt;10248&lt;\/BestellungID&gt;\r\n     &lt;KundeID&gt;90&lt;\/KundeID&gt;\r\n     &lt;PersonalID&gt;5&lt;\/PersonalID&gt;\r\n     &lt;Bestelldatum&gt;2011-07-26T00:00:00&lt;\/Bestelldatum&gt;\r\n     &lt;Lieferdatum&gt;2011-08-23T00:00:00&lt;\/Lieferdatum&gt;\r\n     ...\r\n     &lt;tblBestelldetails&gt;\r\n       &lt;BestelldetailID&gt;1&lt;\/BestelldetailID&gt;\r\n       &lt;BestellungID&gt;10248&lt;\/BestellungID&gt;\r\n       &lt;ArtikelID&gt;11&lt;\/ArtikelID&gt;\r\n       &lt;Einzelpreis&gt;7&lt;\/Einzelpreis&gt;\r\n       &lt;Anzahl&gt;12&lt;\/Anzahl&gt;\r\n       &lt;Rabatt&gt;0&lt;\/Rabatt&gt;\r\n     &lt;\/tblBestelldetails&gt;\r\n     &lt;tblBestelldetails&gt;\r\n       ...\r\n     &lt;\/tblBestelldetails&gt;\r\n     &lt;tblBestelldetails&gt;\r\n       ...\r\n     &lt;\/tblBestelldetails&gt;\r\n   &lt;\/tblBestellungen&gt;\r\n   ...\r\n   &lt;tblArtikel&gt;\r\n     &lt;ArtikelID&gt;1&lt;\/ArtikelID&gt;\r\n     &lt;Artikelname&gt;Chai&lt;\/Artikelname&gt;\r\n     ...\r\n   &lt;\/tblArtikel&gt;\r\n   ...\r\n&lt;\/dataroot&gt;<\/pre>\n<p>Hier werden also die Datens&auml;tze der Tabelle <b>tblBestelldetails <\/b>unterhalb denen der Tabelle <b>tblBestellungen <\/b>im XML-Dokument angeordnet. Die Datens&auml;tze der Tabelle <b>tblArtikel <\/b>folgen im Anschluss an die <b>tblBestellungen<\/b>-Elemente.<\/p>\n<h2>Bestellungen, Bestelldetails und Artikeldetails verschachteln<\/h2>\n<p>Nun wollen wir aber, dass die Artikeldetails aus der Tabelle <b>tblArtikel <\/b>immer direkt unter den Bestelldetails angeordnet werden, die sich auf den jeweiligen Artikel beziehen &#8211; also etwa wie hier:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-8\"&gt;\r\n&lt;dataroot ...&gt;\r\n   &lt;tblBestellungen&gt;\r\n     &lt;BestellungID&gt;10248&lt;\/BestellungID&gt;\r\n     &lt;KundeID&gt;90&lt;\/KundeID&gt;\r\n     &lt;PersonalID&gt;5&lt;\/PersonalID&gt;\r\n     &lt;Bestelldatum&gt;2011-07-26T00:00:00&lt;\/Bestelldatum&gt;\r\n     ...\r\n     &lt;tblBestelldetails&gt;\r\n       &lt;BestelldetailID&gt;1&lt;\/BestelldetailID&gt;\r\n       &lt;BestellungID&gt;10248&lt;\/BestellungID&gt;\r\n       &lt;ArtikelID&gt;11&lt;\/ArtikelID&gt;\r\n       &lt;Einzelpreis&gt;7&lt;\/Einzelpreis&gt;\r\n       &lt;Anzahl&gt;12&lt;\/Anzahl&gt;\r\n       &lt;Rabatt&gt;0&lt;\/Rabatt&gt;\r\n       &lt;tblArtikel&gt;\r\n         &lt;ArtikelID&gt;11&lt;\/ArtikelID&gt;\r\n         &lt;Artikelname&gt;Queso Cabrales&lt;\/Artikelname&gt;\r\n         ...\r\n       &lt;\/tblArtikel&gt;\r\n     &lt;\/tblBestelldetails&gt;\r\n     &lt;tblBestelldetails&gt;\r\n       &lt;BestelldetailID&gt;2&lt;\/BestelldetailID&gt;\r\n       &lt;BestellungID&gt;10248&lt;\/BestellungID&gt;\r\n       &lt;ArtikelID&gt;42&lt;\/ArtikelID&gt;\r\n       &lt;Einzelpreis&gt;4.9&lt;\/Einzelpreis&gt;\r\n       &lt;Anzahl&gt;10&lt;\/Anzahl&gt;\r\n       &lt;Rabatt&gt;0&lt;\/Rabatt&gt;\r\n       &lt;tblArtikel&gt;\r\n         &lt;ArtikelID&gt;42&lt;\/ArtikelID&gt;\r\n         &lt;Artikelname&gt;Singaporean Hokkien&lt;\/Artikelname&gt;\r\n         ...\r\n       &lt;\/tblArtikel&gt;\r\n     &lt;\/tblBestelldetails&gt;\r\n     ...\r\n   &lt;\/tblBestellungen&gt;\r\n&lt;\/dataroot&gt;<\/pre>\n<p>Diese Konstellation k&ouml;nnen Sie mit dem XML-Export-Assistenten nicht bewerkstelligen, aber mit VBA. Die dazu ben&ouml;tigte Prozedur finden Sie in Listing 5. Der Clou hierbei ist, dass wir die Tabelle <b>tblArtikel <\/b>nicht einfach als weiteres Element des <b>AdditionalData<\/b>-Objekts angeben, sondern dieses dem zuerst hinzugef&uuml;gten Element auf Basis der Tabelle <b>tblBestelldetails <\/b>hinzuf&uuml;gen. Dabei referenzieren wir das bereits angelegte Element mit <b>obj-AdditionalData.Item(&#8222;tblBestelldetails&#8220;) <\/b>und f&uuml;gen mit dessen <b>Add<\/b>-Methode die Tabelle <b>tblArtikel <\/b>als untergeordnetes Element hinzu. Auf diese Weise erhalten wir die zuvor beschriebene Anordnung, bei welcher die Artikeldetails noch den Bestelldetails untergeordnet werden.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ExportBestellungenBestelldetailsArtikel_II()\r\n     <span style=\"color:blue;\">Dim <\/span>objAdditionalData<span style=\"color:blue;\"> As <\/span>AdditionalData\r\n     <span style=\"color:blue;\">Set<\/span> objAdditionalData = Application.CreateAdditionalData\r\n     objAdditionalData.Add \"tblBestelldetails\"\r\n     objAdditionalData.Item(\"tblBestelldetails\").Add \"tblArtikel\"\r\n     Application.ExportXML acExportTable, \"tblBestellungen\", _\r\n         CurrentProject.Path & \"\\Bestellungen.xml\", _\r\n         AdditionalData:=objAdditionalData\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Export der Bestellungen samt Bestelldetails und Artikeldetails, diesmal weiter verschachtelt<\/span><\/b><\/p>\n<p>Dies ergibt zwar redundante Daten im XML-Dokument, aber es gibt sicher Anwendungsf&auml;lle, bei denen Sie die Daten wie hier dargestellt besser verarbeiten k&ouml;nnen als wenn etwa die Artikeldetails in einfacher Form hinten an das XML-Dokument angeh&auml;ngt werden.<\/p>\n<h2>Transformation mit .xslt-Datei<\/h2>\n<p>Im Beitrag <b>XML-Export ohne VBA <\/b>(<b>www.access-im-unternehmen.de\/1045<\/b>) haben Sie erfahren, wie Sie unter Angabe einer <b>.xslt<\/b>-Datei eine Transformation der exportierten Daten durchf&uuml;hren k&ouml;nnen.<\/p>\n<p>So ist es beispielsweise m&ouml;glich, nur bestimmte Felder im XML-Dokument zu erhalten, Daten statt als Inhalt eines Elements als Attribut anzugeben oder auch die komplette Struktur zu ver&auml;ndern.<\/p>\n<p>Dort haben Sie die <b>.xslt<\/b>-Datei nach einem Klick auf die Schaltfl&auml;che <b>Transformieren&#8230; <\/b>der erweiterten Optionen des Export-Assistenten angegeben. Die Methode <b>Export-XML <\/b>bietet leider keine solche Option.<\/p>\n<p>Sie m&uuml;ssen die Transformation also nach der Erstellung der Export-XML-Datei selbst durchf&uuml;hren, was mit einigen VBA-Anweisungen jedoch leicht zu erledigen ist.<\/p>\n<p>Wie dies gelingt, beschreiben wir im Detail im Beitrag <b>XML-Dokumente transformieren mit XSLT <\/b>(<b>www.access-im-unternehmen.de\/1047<\/b>). In Listing 6 finden Sie nur die Kurzfassung, bei der wir die im Beitrag <b>XML-Export ohne VBA <\/b>vorgestellte <b>.xslt<\/b>-Datei auf ein Export-Ergebnis anwenden.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ExportUndXSLT()\r\n     <span style=\"color:blue;\">Dim <\/span>objAdditionalData<span style=\"color:blue;\"> As <\/span>AdditionalData\r\n     <span style=\"color:blue;\">Dim <\/span>objUntransformiert<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Dim <\/span>objXSLT<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Dim <\/span>objTransformiert<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n     <span style=\"color:blue;\">Set<\/span> objAdditionalData = Application.CreateAdditionalData\r\n     objAdditionalData.Add \"tblArtikel\"\r\n     Application.ExportXML acExportTable, \"tblKategorien\", _\r\n         CurrentProject.Path & \"\\KategorienUndArtikel_Untransformiert.xml\", _\r\n         AdditionalData:=objAdditionalData\r\n     <span style=\"color:blue;\">Set<\/span> objUntransformiert = <span style=\"color:blue;\">New<\/span> MSXML2.DOMDocument\r\n     objUntransformiert.Load CurrentProject.Path & \"\\KategorienUndArtikel_Untransformiert.xml\"\r\n     <span style=\"color:blue;\">Set<\/span> objXSLT = <span style=\"color:blue;\">New<\/span> MSXML2.DOMDocument\r\n     objXSLT.Load CurrentProject.Path & \"\\KategorienUndArtikel.xslt\"\r\n     <span style=\"color:blue;\">Set<\/span> objTransformiert = <span style=\"color:blue;\">New<\/span> MSXML2.DOMDocument\r\n     objUntransformiert.transformNodeToObject objXSLT, objTransformiert\r\n     objTransformiert.Save CurrentProject.Path & \"\\KategorienUndArtikel_Transformiert.xml\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Transformieren einer frisch exportierten XML-Datei<\/span><\/b><\/p>\n<p>Hier erstellen wir drei XML-<b>DOMDocument<\/b>-Objekte. Das erste nimmt die erstellte XML-Datei auf, das zweite die <b>.xslt<\/b>-Datei. F&uuml;r das zu transformierende <b>DOMDocument<\/b>-Objekt rufen wir die Methode <b>transformNodeToObject <\/b>auf und &uuml;bergeben dieser als ersten Parameter den Verweis auf die <b>.xslt<\/b>-Datei und als zweiten den Verweis auf das zu erstellende transformierte XML-Dokument.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>XMLExportVBA.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/9C729FE7-8616-4010-B0B3-949F0BA69F8B\/aiu_1046.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Access stellt verschiedene M&ouml;glichkeiten f&uuml;r den Export von Daten im XML-Format zur Verf&uuml;gung. Die Variante, mit der Sie Tabellen &uuml;ber die Benutzeroberfl&auml;che in das XML-Format exportieren k&ouml;nnen, k&ouml;nnen Sie nat&uuml;rlich auch per VBA nutzen &#8211; und zwar mit dem Befehl &#8222;ExportXML&#8220; des &#8222;Application&#8220;-Objekts. Dieser Beitrag zeigt, welcher Parameter welcher Option entspricht und welche zus&auml;tzlichen Features Sie per VBA erhalten.<\/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":[662016,66042016,44000026],"tags":[],"class_list":["post-55001046","post","type-post","status-publish","format-standard","hentry","category-662016","category-66042016","category-Interaktiv"],"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>XML-Export mit 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\/XMLExport_mit_VBA\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"XML-Export mit VBA\" \/>\n<meta property=\"og:description\" content=\"Access stellt verschiedene M&ouml;glichkeiten f&uuml;r den Export von Daten im XML-Format zur Verf&uuml;gung. Die Variante, mit der Sie Tabellen &uuml;ber die Benutzeroberfl&auml;che in das XML-Format exportieren k&ouml;nnen, k&ouml;nnen Sie nat&uuml;rlich auch per VBA nutzen - und zwar mit dem Befehl &quot;ExportXML&quot; des &quot;Application&quot;-Objekts. Dieser Beitrag zeigt, welcher Parameter welcher Option entspricht und welche zus&auml;tzlichen Features Sie per VBA erhalten.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T15:28:58+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg09.met.vgwort.de\/na\/bbad444c128142eb91db7ca47d15ef76\" \/>\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=\"19\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"XML-Export mit VBA\",\"datePublished\":\"2020-05-22T15:28:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/\"},\"wordCount\":2507,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/bbad444c128142eb91db7ca47d15ef76\",\"articleSection\":[\"2016\",\"4\\\/2016\",\"Interaktiv\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/\",\"name\":\"XML-Export mit VBA - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/bbad444c128142eb91db7ca47d15ef76\",\"datePublished\":\"2020-05-22T15:28:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/bbad444c128142eb91db7ca47d15ef76\",\"contentUrl\":\"http:\\\/\\\/vg09.met.vgwort.de\\\/na\\\/bbad444c128142eb91db7ca47d15ef76\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLExport_mit_VBA\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"XML-Export mit 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":"XML-Export mit 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\/XMLExport_mit_VBA\/","og_locale":"de_DE","og_type":"article","og_title":"XML-Export mit VBA","og_description":"Access stellt verschiedene M&ouml;glichkeiten f&uuml;r den Export von Daten im XML-Format zur Verf&uuml;gung. Die Variante, mit der Sie Tabellen &uuml;ber die Benutzeroberfl&auml;che in das XML-Format exportieren k&ouml;nnen, k&ouml;nnen Sie nat&uuml;rlich auch per VBA nutzen - und zwar mit dem Befehl \"ExportXML\" des \"Application\"-Objekts. Dieser Beitrag zeigt, welcher Parameter welcher Option entspricht und welche zus&auml;tzlichen Features Sie per VBA erhalten.","og_url":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T15:28:58+00:00","og_image":[{"url":"http:\/\/vg09.met.vgwort.de\/na\/bbad444c128142eb91db7ca47d15ef76","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"19\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"XML-Export mit VBA","datePublished":"2020-05-22T15:28:58+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/"},"wordCount":2507,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/bbad444c128142eb91db7ca47d15ef76","articleSection":["2016","4\/2016","Interaktiv"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/","url":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/","name":"XML-Export mit VBA - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/#primaryimage"},"thumbnailUrl":"http:\/\/vg09.met.vgwort.de\/na\/bbad444c128142eb91db7ca47d15ef76","datePublished":"2020-05-22T15:28:58+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/#primaryimage","url":"http:\/\/vg09.met.vgwort.de\/na\/bbad444c128142eb91db7ca47d15ef76","contentUrl":"http:\/\/vg09.met.vgwort.de\/na\/bbad444c128142eb91db7ca47d15ef76"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/XMLExport_mit_VBA\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"XML-Export mit 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\/55001046","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=55001046"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001046\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001046"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001046"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001046"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}