Handle JSON Object in XMLHttp response in Excel VBA Code

前端 未结 3 725
难免孤独
难免孤独 2020-12-01 09:31

I need to handle a JSON Object which is the response of XMLHTTPRequest in Excel VBA. I wrote the code below, but it doesn\'t work:

  Dim sc As Object
  Set s         


        
3条回答
  •  不思量自难忘°
    2020-12-01 10:17

    The code gets the data from nseindia site which comes as a JSON string in responseDiv element.

    Required References

    enter image description here

    3 Class Module i have used

    • cJSONScript
    • cStringBuilder
    • JSON

    (I have picked these class modules from here)

    You may download the file from this link

    Standard Module

    Const URl As String = "http://www.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuote.jsp?symbol=ICICIBANK"
    Sub xmlHttp()
    
        Dim xmlHttp As Object
        Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
        xmlHttp.Open "GET", URl & "&rnd=" & WorksheetFunction.RandBetween(1, 99), False
        xmlHttp.setRequestHeader "Content-Type", "text/xml"
        xmlHttp.send
    
        Dim html As MSHTML.HTMLDocument
        Set html = New MSHTML.HTMLDocument
        html.body.innerHTML = xmlHttp.ResponseText
    
        Dim divData As Object
        Set divData = html.getElementById("responseDiv")
        '?divData.innerHTML
        ' Here you will get a string which is a JSON data
    
        Dim strDiv As String, startVal As Long, endVal As Long
        strDiv = divData.innerHTML
        startVal = InStr(1, strDiv, "data", 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("data")(1)
           Cells(i, 1) = item
           Cells(i, 2) = p("data")(1)(item)
            i = i + 1
        Next
    
     End Sub
    

提交回复
热议问题