Menu Sluiten

XML bestand uitlezen met behulp van VBA

Functies vba excel macro

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:

  1.  De volledige naam van het XML document (dus inclusief pad en extensie)
  2. Het element dat je wilt gebruiken.
  3. 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?