meine VBA Kenntnisse sind noch nicht sehr ausgereift. Derzeit versuche ich neben der Arbeit durch viel lesen und ausprobieren diese zu erweitern. Momentan beschränke ich mich sehr auf das Thema XML und Auslesen mit Excel VBA, weil mir nichts anderes zur Verfügung steht. Der Rest klappt eh schon halbwegs :-)
Folgendes Problem. Ich versuche mittels XPath und SelectSingleNode bestimmte Daten aus dem beigefügtem XML abzugreifen und in ein Excel einzulesen. Das klappt soweit auch ganz gut.
Bei einem Punkt komme ich allerdings nicht weiter.
Das XML gliedert sich grob in accountreports je Kunde auf. Ich lese die Daten je accountreport aus und übertrage sie in eine Zeile nebeneinander.
Beim Knoten "Payment", bei dem ich gerne alle vorkommenden "Type"s und "PaymentAmnt"s je Kunde auslesen möchte, komme ich mit SelectSingleNodes natürlich nicht weiter, da der immer nur den ersten Datensatz auswirft.
"Type"s und "PaymentAmnt"s können je accountreport bis zu 4 mal vorkommen.
Ich habe nur keine Ahnung, wie ich die je accountreport abrufen kann und neben die weiteren Kundendaten setzen kann.
Mein Code bislang lautet (mit Sicherheit verbesserungswürdig)
Public Sub XML()
Dim objXML
Dim objNodeList
Dim objNodeList2
Dim objNode As MSXML2.IXMLDOMNode
Dim Zeile As Long
Sheets("Tabelle1").Cells.Clear
Zeile = 5
Set objXML = New MSXML2.DOMDocument60
objXML.validateOnParse = True
objXML.SetProperty "SelectionLanguage", "XPath"
' Dokument laden
If Not objXML.Load("R:\Test XML auslesen\Test XML\Test_1.XML") Then
' Fehler beim Laden
MsgBox "Fehler beim Laden des Dokumentes." & vbCrLf & vbCrLf _
& "Grund: " & objXML.parseError.reason & vbCrLf _
& "Zeile: " & objXML.parseError.Line, vbOKOnly Or vbExclamation, "Fehler"
Set objXML = Nothing
End If
objXML.SetProperty "SelectionLanguage", "XPath"
objXML.SetProperty "SelectionNamespaces", "xmlns:ftc=""urn:oecd:ties:fatca:v2"" xmlns:sfa="" _
_
_
_
urn:oecd:ties:stffatcatypes:v2"""
Set objNodeList = objXML.SelectNodes("/ftc:FATCA_OECD/ftc:FATCA/ftc:ReportingGroup/ftc: _
AccountReport")
For Each objNode In objNodeList
Debug.Print objNode.Text
With Worksheets("Tabelle1")
.Range("A" & Zeile).Value = objNode.SelectSingleNode("ftc:AccountNumber").Text
If Not objNode.SelectSingleNode("ftc:AccountHolder/ftc:Individual/sfa:TIN") Is _
Nothing Then
.Range("B" & Zeile).Value = objNode.SelectSingleNode("ftc:AccountHolder/ftc: _
Individual/sfa:TIN").Text
End If
.Range("C" & Zeile).Value = objNode.SelectSingleNode("ftc:AccountHolder/ftc: _
Individual/sfa:Name/sfa:FirstName").Text
.Range("D" & Zeile).Value = objNode.SelectSingleNode("ftc:AccountHolder/ftc: _
Individual/sfa:Name/sfa:LastName").Text
.Range("E" & Zeile).Value = objNode.SelectSingleNode("ftc:AccountHolder/ftc: _
Individual/sfa:Address/sfa:AddressFix/sfa:Street").Text
.Range("F" & Zeile).Value = objNode.SelectSingleNode("ftc:AccountHolder/ftc: _
Individual/sfa:Address/sfa:AddressFix/sfa:PostCode").Text
.Range("G" & Zeile).Value = objNode.SelectSingleNode("ftc:AccountHolder/ftc: _
Individual/sfa:Address/sfa:AddressFix/sfa:City").Text
.Range("H" & Zeile).Value = objNode.SelectSingleNode("ftc:AccountBalance").Text
.Range("I" & Zeile).Value = objNode.SelectSingleNode("ftc:AccountBalance"). _
Attributes(0).Text
Zeile = Zeile + 1
End With
Next
Vielen Dank im voraus ;-)
End Sub
https://www.herber.de/bbs/user/145371.zip