Stel je hebt een bepaalde waarde nodig uit een XML bestand in een stuk VBA code. Met de onderstaande functie kun je door de naam van het attribuut op te geven de bijbehorende waarde uit een XML document ophalen.
De Functie heeft 3 parameters:
- De volledige naam van het XML document (dus inclusief pad en extensie)
- Het element dat je wilt gebruiken.
- Het attribuut van het element waarvan je de waarde op wilt halen.
Als voorbeeld van een eenvoudig XML bestand gebruiken wij het onderstaande voorbeeld.
<?xml version="1.0" encoding="UTF-8"?>
<environ>
<HerenfietsGazelle>
<fietsband>Rond</fietsband>
<fietsbel>typeA</fietsbel>
</HerenfietsGazelle>
<EbikePhatfour>
<fietsband>dikkeband</fietsband>
<fietsbel>typeB</fietsbel>
</EbikePhatfour>
</environ>
Met de onderstaande VBA functie kunnen we nu de waarde van een attribuut ophalen. In dit geval is dit dus de waarde van een fietsband of fietsbel
Public Function fnXMLveld(xmlBestand As String, element As String, attribuut As String) As String
Dim XDoc As Object
Set XDoc = CreateObject("MSXML2.DOMDocument")
XDoc.async = False: XDoc.validateOnParse = False
XDoc.Load (xmlBestand)
'Get Document Elements
Set lists = XDoc.DocumentElement
'Traverse all elements 2 branches deep
For Each listnode In lists.ChildNodes
For Each fieldnode In listnode.ChildNodes
omgevingUitXml = listnode.BaseName
If LCase(omgevingUitXml) = LCase(element) Then
If LCase(fieldnode.BaseName) = LCase(attribuut) Then
fnXMLveld = fieldnode.Text
Exit For
End If
End If
Next fieldnode
Next listnode
Set XDoc = Nothing
End Function
Je kunt de bovenstaande functie aanroepen door in een Sub (code) de onderstaande regel te schrijven:
Sub xmluitlezen()
fietsbel = fnXMLveld("D:\Excel VBA\Functies\Test XML.xml", "herenfietsgazelle", "fietsbel")
MsgBox fietsbel
End Sub
Je zult zien dat de waarde van de variabele fietsbel ‘TypeA’ wordt.
Heeft dit artikel je geholpen?
Laat ons weten of dit artikel jou heeft geholpen. Op deze manier kunnen wij onze dienstverlening verbeteren.