Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel zu XML per VBA, Zeilen in XML gruppieren

Excel zu XML per VBA, Zeilen in XML gruppieren
29.10.2017 15:58:10
AmBall
Hallo zusammen, ich habe ein funktionierendes VBA-Script für die Erstellung einer XML Datei aus einer Excel Tabelle. Damit werden zeilenweise Bestelldaten jeweils in einen Block "Bestellung" geschrieben. Nun kommt es vor, dass unter Spalte 2 doppelt oder mehrfach identische ID's vorkommen. Ist das der Fall, sollen bestimmte Spalten (fett gedruckt) noch in den Block der ersten Zeile dieser identischen ID's geschrieben und dann kein eigener Bestellblock angelegt werden.
Hat hier jemand eine Lösung, wie man den bestehenden Code entsprechend umschreiben kann ohne Hilfsspalten verwenden zu müssen? Meine Idee war die gleichen Werte mittels Range zu definieren, aber mein Wissen über VBA reicht bei weitem nicht aus um das umzusetzen.
Danke für Eure Hilfe!
Sub XML_Export()
'** Excel-Inside Solutions - (C) 9.1.2015*
'** Dimensionierung der Variablen
Dim strFile As String, Text As String
Dim lngRow, lngCol As Long
Dim varShow
Dim lngLz As Long
'** Vorgaben definieren
Set wsakt = ActiveSheet
'** Errorhandling
On Error GoTo Fehlermeldung
'** XML-Dateipfad und -Name festlegen
strFile = ThisWorkbook.Path & "\cdiscount-orders.xml"
'** Datei (ASCII) öffnen
Open strFile For Output As #1
'** Ermittlung der letzten Zeile
lngLz = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'** XML-Header schreiben
Print #1, " "
Print #1, ""
'** Mit Schleife die Spalten der Tabelle schreiben
For lngRow = 7 To lngLz
If wsakt.Cells(lngRow, 2).Value > 0 Then
'** Schreiben Datensatz-Beginn
Print #1, " " 'Tag Anfang"
'** Schreiben der Felder
Print #1, "" & Cells(lngRow, 2) & ""
Print #1, "" & Cells(lngRow, 3) & ""
Print #1, "" & Cells(lngRow, 1) & ""
    Print #1, ""
Print #1, "" & Cells(lngRow, 7) & ""
Print #1, "" & Cells(lngRow, 9) & ""
Print #1, "" & Cells(lngRow, 13) & ""
Print #1, "" & Cells(lngRow, 14) & ""
Print #1, ""
Print #1, ""
Print #1, "" & "Versand" & ""
Print #1, "" & Cells(lngRow, 15) & ""
Print #1, "" & 1 & ""
Print #1, ""
Print #1, ""
Print #1, "" & Cells(lngRow, 18) & ""
Print #1, "" & Cells(lngRow, 19) & ""
Print #1, "" & Cells(lngRow, 20) & ""
Print #1, "" & Cells(lngRow, 21) & ""
Print #1, "" & Cells(lngRow, 22) & ""
Print #1, "" & Cells(lngRow, 23) & ""
Print #1, "" & Cells(lngRow, 24) & ""
Print #1, ""
Print #1, ""
Print #1, "" & Cells(lngRow, 27) & ""
Print #1, "" & Cells(lngRow, 28) & ""
Print #1, "" & Cells(lngRow, 30) & ""
Print #1, "" & Cells(lngRow, 29) & ""
Print #1, "" & Cells(lngRow, 31) & ""
Print #1, ""
'** Schreiben Datensatz-Ende
Print #1, ""
End If
Next lngRow
'** Daten-Tag schließen
Print #1, ""
'** XML-Datei schließen
Close #1
'** Aufruf des Editors mit der geschriebenen xml-Datei
varShow = Shell(Environ("windir") & "\notepad.exe " & strFile, 1)
Exit Sub
'** Errorhandling
Fehlermeldung:
Close #1
MsgBox "Fehler-Nr.: " & Err.Number & vbNewLine & vbNewLine _
& "Beschreibung: " & Err.Description _
, vbCritical, "Fehler"
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel zu XML per VBA, Zeilen in XML gruppieren
29.10.2017 16:52:43
Luschi
Hallo AmBall,
Da hast Du aber die Vorlage ganz schön zerrupft, denn Du meinst sicher diesen Link:

https://www.excel-inside.de/vba-loesungen/sonstiges/993-xml-datei-per-vba-erzeugen
Deine Ziel-Datei hat überhaupt nichts mit XML zu tun.
Außerdem habe ich Dein Ausgangsproblem nicht ganz verstanden; kannst Du daß mal an einer Exceldatei zeigen?
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Excel zu XML per VBA, Zeilen in XML gruppieren
29.10.2017 18:55:07
AmBall
Hallo Luschi,
ja oder von hier: http://vba1.de/vba/096xml_export.php
Soweit funktioniert es ja und ich erhalte eine korrekte XML-Datei.
Die Excel Datei besteht aus Bestelldaten:
Jede Bestellung hat eine Zeile in der Excel Datei mit Order ID, Lieferadresse, Artikel usw.
Wenn mehrere Artikel vom selben Kunden geordert werden, steht jeder Artikel in der folgenden Zeile nochmal mit allen weiteren Daten, aber mit identischer Order ID. Das widerum wird mit dem jetzigen VBA Script wie eine eigenständige Bestellung ausgegeben, anstatt nur die Artikeldaten dem vorherigen Block in der XML anzufügen.
Hier die Excel Datei
https://www.herber.de/bbs/user/117289.xlsx
Und nochmal das gepostete VBA Script aber mit allen Spaltenbezeichnungen
https://www.herber.de/bbs/user/117290.txt
Anzeige
AW: Excel zu XML per VBA, Zeilen in XML gruppieren
29.10.2017 19:19:37
AmBall
Hier jetzt noch einmal das VBA Script und diesmal so, dass es auch mit der Excel-Datei wie beschrieben funktioniert.
https://www.herber.de/bbs/user/117291.txt
noch aktuell?
03.11.2017 12:09:25
Michael
Hi,
die Frage ist irgendwie versandet - interessiert noch eine Antwort?
Grüße,
M.
Anzeige
AW: noch aktuell?
04.11.2017 18:18:31
AmBall
Ich bin nun auf andere Art zum Ziel gekommen. Mit diesem Tool:
https://flowheater.net/de/dokumentation/designer
kann man aus CSV-Dateien per Drag and Drop eine XML in der gewünschten Form erstellen.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel zu XML: Zeilen in XML gruppieren mit VBA


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xls)“ und wähle „Einfügen“ > „Modul“.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub XML_Export()
       Dim strFile As String, Text As String
       Dim lngRow As Long
       Dim lngLz As Long
       Dim wsakt As Worksheet
    
       Set wsakt = ActiveSheet
       strFile = ThisWorkbook.Path & "\cdiscount-orders.xml"
       Open strFile For Output As #1
       lngLz = wsakt.Cells(wsakt.Rows.Count, 1).End(xlUp).Row
    
       Print #1, "<?xml version=""1.0"" encoding=""iso-8859-1"" standalone=""yes""?>"
       Print #1, "<bestellungen>"
    
       For lngRow = 7 To lngLz
           If wsakt.Cells(lngRow, 2).Value > 0 Then
               Print #1, "<bestellung>"
               Print #1, "<orderid>" & Cells(lngRow, 2) & "</orderid>"
               Print #1, "<date>" & Cells(lngRow, 3) & "</date>"
               Print #1, "<zahlweise>" & Cells(lngRow, 1) & "</zahlweise>"
               Print #1, "<warenkorb>"
               Print #1, "<artikelname>" & Cells(lngRow, 7) & "</artikelname>"
               Print #1, "<sku>" & Cells(lngRow, 9) & "</sku>"
               Print #1, "<quantity>" & Cells(lngRow, 13) & "</quantity>"
               Print #1, "<einzelpreis>" & Cells(lngRow, 14) & "</einzelpreis>"
               Print #1, "</warenkorb>"
               Print #1, "</bestellung>"
           End If
       Next lngRow
    
       Print #1, "</bestellungen>"
       Close #1
    
       Shell "notepad.exe " & strFile, vbNormalFocus
    End Sub
  4. Anpassungen vornehmen: Wenn mehrere Artikel mit der gleichen Order ID in deiner Excel-Datei vorhanden sind, musst du den Code so anpassen, dass die Daten in den ersten Bestellblock eingefügt werden, anstatt einen neuen Block zu erstellen.

  5. Script ausführen: Gehe zurück zu Excel und führe das Makro über ALT + F8 aus, wähle XML_Export und klicke auf „Ausführen“.


Häufige Fehler und Lösungen

  • Fehler beim Speichern der Datei: Stelle sicher, dass der Pfad zur XML-Datei korrekt ist und dass du Schreibrechte für das Zielverzeichnis hast.
  • XML-Datei nicht korrekt formatiert: Überprüfe den Code auf fehlende oder falsche XML-Tags. Achte darauf, dass die Struktur dem XML-Standard entspricht.
  • Doppelte Bestellungen: Wenn Bestellungen mit identischen IDs als separate Einträge erscheinen, musst du eine Logik einfügen, die die ID speichert und bei identischen IDs die Daten zusammenführt.

Alternative Methoden

Wenn du eine einfachere Lösung suchst, kannst du auch Tools oder Online-Dienste verwenden, um Excel-Daten in XML zu konvertieren. Einige dieser Dienste ermöglichen es dir, eine CSV-Datei hochzuladen und eine XML-Datei zu generieren, ohne dass du selbst ein VBA-Script schreiben musst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du mit VBA eine XML-Datei aus Excel-Daten erstellen kannst. Dieses Beispiel nimmt an, dass du eine Excel-Datei mit Bestelldaten hast und diese in ein XML-Format exportieren möchtest:

  1. Stelle sicher, dass deine Excel-Daten in der richtigen Struktur vorliegen.
  2. Verwende den oben angegebenen VBA-Code, um die Daten in eine XML-Datei zu exportieren.
  3. Überprüfe die generierte XML-Datei auf ihre Richtigkeit.

Tipps für Profis

  • Nutze Dictionary-Objekte in VBA, um die IDs zu speichern und duplizierte Bestellungen zu vermeiden.
  • Arbeite mit Error Handling in deinem VBA-Script, um sicherzustellen, dass das Skript auch bei Fehlern stabil bleibt.
  • Verwende XMLHTTP oder MSXML2.ServerXMLHTTP für fortgeschrittene Datenabrufe und API-Integrationen.

FAQ: Häufige Fragen

1. Wie kann ich meine Excel-Tabelle in XML konvertieren, ohne VBA zu verwenden? Du kannst Online-Tools nutzen, um CSV-Dateien in XML zu konvertieren. Diese Tools bieten oft eine Drag-and-Drop-Oberfläche.

2. Was ist der Unterschied zwischen XML und Excel? XML ist ein Datenformat, das zur strukturierten Speicherung von Daten verwendet wird, während Excel hauptsächlich für die Bearbeitung und Analyse von Tabellenkalkulationen verwendet wird.

3. Kann ich XML-Daten wieder in Excel importieren? Ja, du kannst XML-Daten in Excel importieren, indem du die Funktion „Daten aus XML“ im Menü verwendest.

4. Welche Excel-Version benötige ich, um VBA zu verwenden? VBA ist in den meisten Versionen von Excel verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Microsoft 365.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige