I am attempting to connect to the SmartSheet API through VBA to pull the contents into an Excel sheet. I found the VBJSON library which has helped me a bit but I am struggling with iterating through the objects and pulling specific values.
I want to access the contents of the "Value" attribute for each row then do the same for subsequent rows. My biggest problem is that I do not know how this VBJSON library works since I cannot find any documentation on it and there are only a few examples and they deal with relatively straightforward JSON examples.
Desired Output
Row 1 Column 1 Content | Row 1 Column 2 Content
Row 2 Column 1 Content | Row 2 Column 2 Content
JSON
{ "id": 1, "name": "Sheet Name", "columns": [ { "id": 1, "index": 0, "title": "Title of Column", "type": "TEXT_NUMBER", "primary": true }, { "id": 2, "index": 1, "title": "Title of Second Column", "type": "TEXT_NUMBER" }, ], "rows": [ { "id": 1, "rowNumber": 1, "cells": [ { "type": "TEXT_NUMBER", "value": "Row 1 Column 1 Content", "columnId": 1, }, { "type": "TEXT_NUMBER", "value": "Row 1 Column 2 Content", "columnId": 2, }, ], "locked": true, "lockedForUser": true, "expanded": true, "createdAt": "2013-10-11T13:43:24-05:00", "modifiedAt": "2013-11-12T15:13:54-06:00" }, { "id": 2276445193037700, "rowNumber": 2, "cells": [ { "type": "TEXT_NUMBER", "value": "row 2 column 1 content", "columnId": 1, }, { "type": "TEXT_NUMBER", "value": "row 2 column 2 content", "columnId": 2, } ] } VBJSON library http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html
Below is code I've pieced together from what I could find online and right now it pulls the values associated with each attribute in the row. But I only need to pull the contents of the "Value" portion and I can't seem to figure out how to do that. I think I really just need help with my for loop because I have the JSON, I have a library that appears to work, I am just struggling to figure out how to combine it all.
Dim xmlHttp As Object Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0") xmlHttp.Open "GET", URl, False xmlHttp.setRequestHeader "Content-Type", "text/xml" xmlHttp.send Dim strDiv As String, startVal As Long, endVal As Long strDiv = xmlHttp.ResponseText startVal = InStr(1, strDiv, "rows", vbTextCompare) endVal = InStr(startVal, strDiv, "]", vbTextCompare) strDiv = "{" & Mid(strDiv, startVal - 1, (endVal - startVal) + 2) & "}" Dim JSON As New JSON Dim p As Object Set p = JSON.parse(strDiv) i = 1 For Each Item In p("rows")(1)("cells")(1) Cells(2, i) = p("rows")(1)("cells")(1)(Item) i = i + 1 Next