【发布时间】:2019-08-17 09:55:26
【问题描述】:
我的代码运行良好,但在下面代码的注释行中触发了“下标超出范围”错误。
我在网上使用了一个json格式化程序查看了xml结构,我似乎没有看到触发错误的原因。现在,如果我注释掉最后两个节点,代码就可以正常工作。我正在使用的代码可以在这里引用-Extracting HTML elements values using their classes
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.betfair.com/www/sports/exchange/readonly/v1/bymarket?_ak=nzIFcwyWhrlwYMrh&alt=json¤cyCode=USD&locale=en&marketIds=1.161189078,1.161073119,1.161362337,1.161362195,1.161362198,1.161362200,1.161362186,1.161362202,1.161362187,1.161362205,1.161362188,1.161362189,1.161425408&rollupLimit=25&rollupModel=STAKE&types=MARKET_STATE,%20EVENT,RUNNER_DESCRIPTION,RUNNER_STATE,RUNNER_EXCHANGE_PRICES_BEST", False
.send
s = .responseText
Set json = JsonConverter.ParseJson(s)
End With
Dim runners As Object, runner As Object, results(), r As Variant
Set runners = json("eventTypes")(1)("eventNodes")
ReDim results(1 To runners.Count, 1 To 7)
For Each runner In runners
r = r + 1
results(r, 1) = runner("event")("eventName")
results(r, 2) = runner("marketNodes")(1)("runners")(1)("exchange")("availableToBack")(1)("price")
results(r, 3) = runner("marketNodes")(1)("runners")(1)("exchange")("availableToLay")(1)("price")
results(r, 4) = runner("marketNodes")(1)("runners")(2)("exchange")("availableToBack")(1)("price")
results(r, 5) = runner("marketNodes")(1)("runners")(2)("exchange")("availableToLay")(1)("price")
''results(r, 6) = runner("marketNodes")(1)("runners")(3)("exchange")("availableToBack")(1)("price")
''results(r, 7) = runner("marketNodes")(1)("runners")(3)("exchange")("availableToLay")(1)("price")
Next
我需要帮助来修复该错误并让所有节点正常工作。
【问题讨论】:
-
runners.Count的值是什么?随着r的递增,您可能会超出results的范围。 -
我从 Debug.print 得到了 13 个。我错过了什么吗?
-
@SmithO。进一步检查。
runner("marketNodes")、runner("marketNodes")(1)等的计数是多少? -
出现错误。也许我没有正确检查它
标签: json excel vba web-scraping