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