Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[VBA] XML einlesen
#1
Moin!

Ich habe folgendes Problem: Ich bekomme meine XML Datei nicht eingelesen.

Die XML sieht wie folgt aus:

Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<type>F</type>
<name>Mustermann, Max</name>
<number>111</number>
<date>20.09.1978</date>
<work>Klempner</work>
<bes1>Bereich1</bes1>
<bes2>Bereich2</bes2>
<bes3>Bereich3</bes3>
<from>Schlumpfenhausen</from>

Ich versuche die Daten wie folgt herauszulesen:

Code:
Dim objXML As MSXML2.DOMDocument
Dim Art_S As String
Dim Name_S As String
Dim Nummer_S As String
Dim Datum_S As String
Dim Arbeit_S As String
Dim Bes1_S As String
Dim Bes2_S As String
Dim Bes3_S As String

Set objXML = New MSXML2.DOMDocument

If Not objXML.LoadXML(strXML) Then  'strXML is the string with XML'
    Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
End If

Dim point As IXMLDOMNode
Set point = objXML.FirstChild

Art_S = point.SelectSingleNode("type").Text
Name_S = point.SelectSingleNode("name").Text
Nummer_S = point.SelectSingleNode("number").Text
Datum_S = point.SelectSingleNode("date").Text
Arbeit_S = point.SelectSingleNode("work").Text
Bes1_S = point.SelectSingleNode("bes1").Text
Bes2_S = point.SelectSingleNode("bes2").Text
Bes3_S = point.SelectSingleNode("bes3").Text

An der Stelle Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason bekomme ich stets den Fehler "ungültig auf oberster Ebene des Dokuments", ich habe jedoch schon alles probiert, ob iso, utf, jp, nichts wird eingelesen. Zur Info, ich habe den Microsoft XML 3.0 Verweis drin, da 6.0 gar nicht erst anlief.

Kann mir jemand auf die Sprünge helfen?

Liebe Grüße
Antworten Top
#2
Vielleicht =XMLFILTERN() (gibt es seit XL2013) als Formel aufzeichnen? Dann spart man sich den sonstigen Code.
Antworten Top
#3
Es wäre schön, die Lösung direkt in VBA zu haben, da ich damit eine UserForm füllen möchte, und die Daten gar nicht erst irgendwo in Zellen greifbar haben möchte.
Antworten Top
#4
Du kannst Excelformeln/Funktionen in der Regel auch über VBA verwenden. Am Beispiel von Lupos vorgeschlagener Funktion:
Code:
Application.WorksheetFunction.FilterXML(...)

Alternativ kannst Du es auch über DOM machen. Im Netz gibt es genug Seiten, die das beschreiben, hier eine kleine Auswahl:
https://analystcave.com/vba-xml-working-xml-files/
https://www.e_d_u_c_b_a.com/vba-xml/
https://excel-macro.tutorialhorizon.com/...-xml-file/

Noch eine Alternative: Du programmierst den Parser selbst in VBA

Noch eine weitere Alternative: Du verwendest Power Query
Gruß
Michael
Antworten Top
#5
Es fehlt ganz einfach das umschließende Element - oder so Smile
Gruß Jeanie
Antworten Top
#6
(03.03.2022, 09:50)Der Steuerfuzzi schrieb: Alternativ kannst Du es auch über DOM machen. Im Netz gibt es genug Seiten, die das beschreiben, hier eine kleine Auswahl:
https://analystcave.com/vba-xml-working-xml-files/
https://www.e_d_u_c_b_a.com/vba-xml/
https://excel-macro.tutorialhorizon.com/...-xml-file/

Das hat mir sehr geholfen! Vielen Dank! Wundert mich, dass meine Suchmaschine diese nicht ausgespuckt hat.
Antworten Top
#7
In diesem Fall (die Daten die du gepostet hast):

Code:
Sub M_snb()
  sn = Filter(Split(CreateObject("scripting.filesystemobject").opentextfile("G:\OF\XML_snb.xml").readall, vbCrLf), "</")
  sn = Split(Join(Filter(Split(Replace(Replace(Join(sn, ","), Left(sn(0), InStr(sn(0), ">")), "|"), ">", "/<"), "<"), "/", 0), ""), "|")
 
  MsgBox Join(sn, vbLf)
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste