Aktualisieren
Das unten dargestellte Verfahren zeigt ein Beispiel für das Parsen von XML mit VBA unter Verwendung der XML-DOM-Objekte. Der Code basiert auf einem Anfängerleitfaden des XML-DOM .
Public Sub LoadDocument()
Dim xDoc As MSXML.DOMDocument
Set xDoc = New MSXML.DOMDocument
xDoc.validateOnParse = False
If xDoc.Load("C:\My Documents\sample.xml") Then
DisplayNode xDoc.childNodes, 0
Else
End If
End Sub
Public Sub DisplayNode(ByRef Nodes As MSXML.IXMLDOMNodeList, _
ByVal Indent As Integer)
Dim xNode As MSXML.IXMLDOMNode
Indent = Indent + 2
For Each xNode In Nodes
If xNode.nodeType = NODE_TEXT Then
Debug.Print Space$(Indent) & xNode.parentNode.nodeName & _
":" & xNode.nodeValue
End If
If xNode.hasChildNodes Then
DisplayNode xNode.childNodes, Indent
End If
Next xNode
End Sub
Nota Bene - Diese erste Antwort zeigt das Einfachste, was ich mir vorstellen kann (zu der Zeit, als ich an einem ganz bestimmten Thema arbeitete). Natürlich wäre die Verwendung der in den VBA XML Dom integrierten XML-Funktionen viel besser. Siehe die Updates oben.
Ursprüngliche Antwort
Ich weiß, dass dies ein sehr alter Beitrag ist, aber ich wollte meine einfache Lösung für diese komplizierte Frage teilen. In erster Linie habe ich grundlegende Zeichenfolgenfunktionen verwendet, um auf die XML-Daten zuzugreifen.
Dies setzt voraus, dass Sie einige XML-Daten (in der temporären Variablen) haben, die innerhalb einer VBA-Funktion zurückgegeben wurden. Interessanterweise kann man auch sehen, wie ich auf einen XML-Webdienst verlinke, um den Wert abzurufen. Die im Bild gezeigte Funktion nimmt auch einen Suchwert an, da auf diese Excel-VBA-Funktion aus einer Zelle heraus mit = FunctionName (Wert1, Wert2) zugegriffen werden kann, um Werte über den Webdienst in eine Tabelle zurückzugeben.
openTag = ""
closeTag = ""
startPos = InStr(1, temp, openTag)
endPos = InStr(1, temp, closeTag)
startTagPos = InStr(startPos, temp, ">") + 1
Data = Mid(temp, startTagPos, endPos - startTagPos)