我使用的VBA-JSON模块从下面的链接,从那里的天气信息被捕获的来源已经从一个列表结构的7天的数据被每小时列出,变成一个数组的一天,每一天有另一个arrary的小时。
这是我作为Marco. https://github.com/VBA-tools/VBA-JSON导入VBA的模块
forecastday和hour是一个集合对象,当使用这个VBA-JSON库转换时,我不熟悉VBA....我应该如何纠正for循环中的两行,以使数据显示为附加的图像?(这是在http源代码更改之前系统的工作方式)
http://api.weatherapi.com/v1/forecast.json?key=4c6f7219367f4aa5b0c174927231104&q=51.180224,-113.9385224&days=7&aqi=no&alerts=no
Public Sub exceljson()
Dim http As Object, JSON As Object, i As Integer
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "http://api.weatherapi.com/v1/forecast.json?key=4c6f7219367f4aa5b0c174927231104&q=51.180224,-113.9385224&days=7&aqi=no&alerts=no", False
http.Send
Set JSON = JsonConverter.ParseJson(http.responseText)
For i = 4 To 169
Sheets("Setup").Cells(i, 1).Value = JSON("forecast")("forecastday")("hour")(i)("time_epoch")
Sheets("Setup").Cells(i, 2).Value = JSON("forecast")("forecastday")("hour")(i)("temp_c")
Next
End Sub
(预期excel结果)
循环中的以下两行是执行时生成错误的地方。
For i = 4 To 169
Sheets("Setup").Cells(i, 1).Value = JSON("forecast")("forecastday")("hour")(i)("time_epoch")
Sheets("Setup").Cells(i, 2).Value = JSON("forecast")("forecastday")("hour")(i)("temp_c")
Next.
但是我不确定如何处理嵌套的集合对象。是否应该有一个(j)和(i)?j表示一周中的天数〈8?我读到VBA的JSON转换器将任何[]值转换为VBA集合对象。
无论我尝试了什么,都给予了运行时错误5或13。
这应该是预期的格式吗?但在调试时不接受。我认为forecastday应该在一周内循环7次,然后每天都应该有一个小时循环,一天中的24小时?不知道如何在VBA中实现这一点。
JSON("forecast")("forecastday")(j)("hour")(i)("temp_c")
请帮助,我怎么能做到这一点?我已经附加了一个名为“(预期的Excel结果)”的图像中的预期结果为一个名为“设置”的选项卡有一个列A开始在第4行记录的时间戳条目,列B是预测的温度为那一天,预测每小时。
1条答案
按热度按时间dwbf0jvd1#
由于
forecastday
实际上是一个集合而不是字典,所以需要循环7天,然后是24小时。因此,考虑一个带有行和列迭代器的嵌套循环。下面返回hour
的 * 所有 * 元素,除了嵌套的condition
。输出