Skip to Content
Course content

11.4 Working with XML and JSON Data.

In VBA, working with XML and JSON data allows you to exchange information with web services, databases, or other applications. These data formats are commonly used for web APIs and data storage, making it essential for VBA developers to know how to parse, manipulate, and generate these formats.

This section explores the tools and techniques you can use to work with XML and JSON data in VBA.

1. Working with XML Data in VBA

XML (Extensible Markup Language) is a hierarchical data format that is commonly used for representing structured data. You can use the MSXML library in VBA to work with XML data, which allows you to load, read, and manipulate XML documents.

1.1 Loading and Parsing XML

To work with XML in VBA, you need to use the MSXML library (Microsoft XML, v6.0). Here's how you can load and parse an XML file:

Dim xmlDoc As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")

' Load XML from a file
xmlDoc.Load ("C:\path\to\file.xml")

' Check if the document loaded successfully
If xmlDoc.ParseError.ErrorCode <> 0 Then
    MsgBox "XML Parsing Error: " & xmlDoc.ParseError.Reason
Else
    MsgBox "XML loaded successfully!"
End If

1.2 Accessing XML Data

Once the XML document is loaded, you can navigate its structure and access individual elements using methods such as getElementsByTagName, selectSingleNode, or selectNodes.

Dim xmlNode As Object
Set xmlNode = xmlDoc.SelectSingleNode("//book/title")

' Get the text value of the node
MsgBox "Book Title: " & xmlNode.Text

1.3 Modifying XML Data

You can also modify XML data by changing node values or adding/removing elements:

Dim xmlNode As Object
Set xmlNode = xmlDoc.SelectSingleNode("//book/title")

' Modify the title
xmlNode.Text = "New Book Title"

' Save the modified XML to a file
xmlDoc.Save "C:\path\to\modified_file.xml"

1.4 Creating XML Data

You can create an XML document programmatically:

Dim xmlDoc As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")

' Create the root element
Dim root As Object
Set root = xmlDoc.createElement("library")
xmlDoc.appendChild root

' Create a book element and add it to the root
Dim book As Object
Set book = xmlDoc.createElement("book")
root.appendChild book

' Add title and author to the book element
Dim title As Object
Set title = xmlDoc.createElement("title")
title.Text = "Learn VBA"
book.appendChild title

Dim author As Object
Set author = xmlDoc.createElement("author")
author.Text = "John Doe"
book.appendChild author

' Save the XML document
xmlDoc.Save "C:\path\to\new_file.xml"

2. Working with JSON Data in VBA

JSON (JavaScript Object Notation) is a lightweight, text-based format used to represent structured data. It is widely used in web APIs and is more compact and easier to read than XML. To work with JSON in VBA, you need to parse the data into VBA objects, typically using the JSON parser.

2.1 Using a JSON Parser in VBA

You can use external libraries like VBA-JSON (available on GitHub) to handle JSON parsing. First, download and import the VBA-JSON library into your project.

Here's how you can use it to parse a JSON string:

' Add the VBA-JSON library to your project
' Set reference to "JsonConverter.bas" from VBA-JSON library

Dim json As Object
Set json = JsonConverter.ParseJson("{""name"": ""John"", ""age"": 30, ""city"": ""New York""}")

' Access JSON data
MsgBox "Name: " & json("name")
MsgBox "Age: " & json("age")
MsgBox "City: " & json("city")

2.2 Converting VBA Objects to JSON

You can also convert VBA data (like collections, arrays, or dictionaries) into JSON format. Here's an example:

Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "name", "John"
dict.Add "age", 30
dict.Add "city", "New York"

' Convert dictionary to JSON
Dim json As String
json = JsonConverter.ConvertToJson(dict)

' Display the JSON string
MsgBox json

This will output a JSON string like:

{"name":"John","age":30,"city":"New York"}

2.3 Sending JSON Data with HTTP Requests

You can use JSON when making HTTP requests, for example, when interacting with REST APIs. Here’s an example of sending JSON data in a POST request:

Dim http As Object
Set http = CreateObject("MSXML2.XMLHTTP")

Dim url As String
url = "https://api.example.com/endpoint"

' Prepare JSON data
Dim jsonData As String
jsonData = "{""name"":""John"", ""age"":30, ""city"":""New York""}"

' Send POST request with JSON data
http.Open "POST", url, False
http.setRequestHeader "Content-Type", "application/json"
http.Send jsonData

' Display response
MsgBox http.responseText

2.4 Parsing JSON Arrays

JSON arrays are collections of elements, and you can loop through them in VBA. Here’s an example of parsing an array from a JSON response:

Dim json As Object
Set json = JsonConverter.ParseJson("[{""name"":""John""},{""name"":""Jane""},{""name"":""Doe""}]")

' Loop through JSON array
Dim item As Variant
For Each item In json
    MsgBox "Name: " & item("name")
Next item

3. Conclusion

Working with XML and JSON data in VBA opens up the ability to interact with modern web services, databases, and external applications. By utilizing the appropriate libraries and functions, you can seamlessly integrate XML and JSON data into your VBA workflows. Whether you’re extracting data from an API or creating and modifying structured data for exchange, these tools make it easy to work with these popular formats directly in VBA.

Commenting is not enabled on this course.