Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA JSON数组url导入和解析_Json_Vba - Fatal编程技术网

Excel VBA JSON数组url导入和解析

Excel VBA JSON数组url导入和解析,json,vba,Json,Vba,我正在尝试使用VBA将JSON数据从以下链接导入并解析到excel中: 不幸的是,我无法完成它,因为它不断给出错误:对象不支持此属性或方法。有人能帮我解决吗 所有我需要的是得到的日期是列出了一个很长的SMA是提供给它。JSON文件的URL实际上在Sheet2中,并在代码中引用。这是因为我将有多个URL,代码需要循环并导入这些URL 这里是一个预期输出的屏幕截图 以下是我正在使用的代码: 子测试() 作为对象的Dim objHTTP 将MyScript设置为对象 Dim x为整数,NoA为整

我正在尝试使用VBA将JSON数据从以下链接导入并解析到excel中:

不幸的是,我无法完成它,因为它不断给出错误:对象不支持此属性或方法。有人能帮我解决吗

所有我需要的是得到的日期是列出了一个很长的SMA是提供给它。JSON文件的URL实际上在Sheet2中,并在代码中引用。这是因为我将有多个URL,代码需要循环并导入这些URL

这里是一个预期输出的屏幕截图

以下是我正在使用的代码:

子测试()
作为对象的Dim objHTTP
将MyScript设置为对象
Dim x为整数,NoA为整数,NoC为整数
将myData设置为对象
设置MyScript=CreateObject(“MSScriptControl.ScriptControl”)
MyScript.Language=“JScript”
设置objHTTP=CreateObject(“MSXML2.XMLHTTP”)
对于x=1到Application.CountA(表2.列(1))
工作表(“工作表1”)。激活
第(1)页。单元格。清除
表(1).范围(“A1:D1”).Font.Bold=True
表(1).范围(“A1:D1”).Font.Color=vbRed
第(1)页。范围(“A1”)=“日期”
板材(1).范围(“B1”)=“SMA”
URL=工作表(2)。单元格(x,1)
objHTTP.Open“GET”,URL,False
发送
如果objHTTP.ReadyState=4,则
如果objHTTP.Status=200,则
Set RetVal=MyScript.Eval(“&objHTTP.responseText&”)
中止
设置MyList1=RetVal.result.buy
NoA=Sheet1.单元格(65536,1).结束(xlUp).行+1
对于MyList1中的每个myData
表(1).单元格(NoA,1).值=myData.Last\u刷新
表(1).单元格(NoA,2).值=myData.SMA
NoA=NoA+1
下一个
如果结束
如果结束
下一个
设置MyList2=无
设置MyList=Nothing
设置objHTTP=Nothing
设置MyScript=Nothing
End Sub
这样就可以了。使用模块,您需要在vbe>工具>引用中添加对的引用

Option Explicit

Public Sub test()

    Dim objHTTP As Object
    Dim URL As String
    Dim Json As Object

    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")

    URL = "https://www.alphavantage.co/query?function=SMA&interval=daily&time_period=90&series_type=close&apikey=ES1RXJ7VF1C1L9N5&symbol=MSFT"
    objHTTP.Open "GET", URL, False
    objHTTP.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
    objHTTP.Send

    Set Json = JsonConverter.ParseJson(objHTTP.ResponseText)("Technical Analysis: SMA")

    Dim key As Variant
    Dim counter As Long

    counter = 1

    For Each key In Json                         'loop items of collection which returns dictionaries of dictionaries

      Dim innerKey As Variant

      For Each innerKey In Json(key).Keys
          counter = counter + 1
         ActiveSheet.Cells(counter, 1) = key '
         ActiveSheet.Cells(counter, 2) = Json(key)(innerKey) ' innerKey
      Next innerKey

    Next key

End Sub
结果:

要测试URL列表是否有效,请参见@FlorentB的答案


请提供一个示例URL(您可以隐藏API密钥位),并指出错误发生在哪一行。很抱歉,不确定为什么URL会出现在问题中:太棒了,这很有效。如果我有一个URL列表,其中一些会导致错误,有没有一种方法可以让我先运行一个宏来显示哪些URL会导致错误?或者,即使我们可以将“错误”打印到A1和B1单元格,这对我也适用。是的,尽管这是一个不同的问题。如果上述问题得到回答,请标记为接受和/或投票。我会看看我是否能找出我在URL点之前给出的答案。另外,我很确定我在其他地方看到了答案。请看@FlorentB这里的答案,或者为延迟道歉,我忘了我需要按下复选标记。