Read XML using Excel VBA
XML is the file format that is widely used to transfer data over internet or between 2 systems with different platforms. The most widely used & familiar xml file in the internet world is the Sitemap.xml. This file has the major links to a website.
Other widely used file formats for data transfer are JSON, CSV. In this article, we are going to learn how to read the xml file using XML DOM (Data Object Model).
Excel VBA XML Parser
Using this tutorial you can build a XML parser using Excel VBA. Lets start with this step by step procedure. Open an Excel Workbook & Open VB Editor by pressing Alt + F11. Then follow these important steps.
- Add reference to “Microsoft XML, V6.0” from Excel VB editor.
- VB Editor -> Menu->Tools -> Reference
- Scroll down till Microsoft XML, V2.0 or 3.0 or 6.0 appears. The version of XML depends on the OS & Office version installed in your machine.
- Click Ok.
- Now, Copy paste the code to your VBE.
- Download a file from Internet or if you have a file already, Modify the xml file path in the code.
- Run the code by pressing F5.
'-------------------------------------------------------------------------------- 'Code by author@officetricks.com 'Visit https://officetricks.com to get more Free & Fully Functional VBA Codes '-------------------------------------------------------------------------------- Public Sub Xml_To_Excel() Dim myURL As String, sFileNamePath As String, dsh As Worksheet, osh As Worksheet Dim WinHttpReq As Object, Node As IXMLDOMNode Dim xDoc As MSXML2.DOMDocument Dim list As MSXML2.IXMLDOMNodeList 'Create XML DOM Object Set xDoc = New MSXML2.DOMDocument Set osh = ThisWorkbook.Sheets("Sheet2") oRow = 1 'This is only a sample xml file - Change the File path to your Xml file path fname = "http://www.xmlfiles.com/examples/simple.xml" 'Load Xml file to Object & Process Each node. If xDoc.Load(fname) Then Set list = xDoc.SelectNodes("//breakfast-menu/food") loopCount = 0 Application.Wait DateAdd("s", 5, Now) DoEvents For Each Node In list oRow = oRow + 1 '***Note: node names are Casesensitive*** osh.Range("A" & oRow) = Node.SelectSingleNode("name").Text osh.Range("B" & oRow) = Node.Text Next Else MsgBox "Error Occured" End If MsgBox "Process Completed" End Sub
This code uses XML DOM model to parse each node from input xml file. Then write it to the Excel file one by one.