16

Excel VBA で XMLHTTPRequest の応答である JSON オブジェクトを処理する必要があります。以下のコードを書きましたが、うまくいきません。

  Dim sc As Object
  Set sc = CreateObject("ScriptControl")
  sc.Language = "JScript"

  Dim strURL As String: strURL = "blah blah"

  Dim strRequest
  Dim XMLhttp: Set XMLhttp = CreateObject("msxml2.xmlhttp")
  Dim response As String

  XMLhttp.Open "POST", strURL, False
  XMLhttp.setrequestheader "Content-Type", "application/x-www-form-urlencoded"
  XMLhttp.send strRequest
  response = XMLhttp.responseText
  sc.Eval ("JSON.parse('" + response + "')")

実行時エラー '429' ActiveX component can't create object in the line というエラーが表示されますSet sc = CreateObject("ScriptControl")

JSON オブジェクトを解析したら、JSON オブジェクトの値にどのようにアクセスしますか?

PS My JSON オブジェクトのサンプル:{"Success":true,"Message":"Blah blah"}

4

3 に答える 3

12

このコードは、nseindia サイトからデータを取得します。これは、responseDiv要素内の JSON 文字列として提供されます。

必要な参照

ここに画像の説明を入力

私が使用した3つのクラスモジュール

  • cJSONスクリプト
  • cStringBuilder
  • JSON

(ここからこれらのクラス モジュールを選択しました)

このリンクからファイルをダウンロードできます

標準モジュール

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
于 2013-05-31T07:15:38.393 に答える
9

次のライブラリで多くの成功を収めました。

https://github.com/VBA-tools/VBA-JSON

ライブラリはScripting.DictionaryオブジェクトとCollection配列に使用され、非常に複雑なjsonファイルの解析に問題はありませんでした.

json を自分で解析する方法の詳細については、sc.Eval 呼び出しから返される JScriptTypeInfo オブジェクトに関する問題の背景について、この質問を確認してください。

Excel VBA: 解析された JSON オブジェクト ループ

最後に、 で作業するためのいくつかの便利なクラスについてXMLHTTPRequest、私のプロジェクト VBA-Web の小さなプラグ:

https://github.com/VBA-tools/VBA-Web

于 2013-05-29T23:47:20.123 に答える