Json 无法再次处理运行时错误9
我有一个json代码,如下所示:Json 无法再次处理运行时错误9,json,excel,vba,runtime-error,Json,Excel,Vba,Runtime Error,我有一个json代码,如下所示: { "gstin": "32AAOFV7699A1ZR", "fp": "012019", "filing_typ": "M", "gt": 0, "cur_gt": 0, "b2b": [ { "cname": null, "inv": [ { "val": 17136, "itms": [
{
"gstin": "32AAOFV7699A1ZR",
"fp": "012019",
"filing_typ": "M",
"gt": 0,
"cur_gt": 0,
"b2b": [
{
"cname": null,
"inv": [
{
"val": 17136,
"itms": [
{
"num": 1,
"itm_det": {
"csamt": 0,
"samt": 408,
"rt": 5,
"txval": 160,
"camt": 408
}
}
],
"inv_typ": "R",
"flag": "U",
"updby": "S",
"idt": "14-02019",
"rchrg": "N",
"inum": "VTR/142",
}
]
},
{
"cfs": "N",
"cname": null,
"inv": [
{
"val": 4745,
"itms": [
{
"num": 1,
}
],
"inv_typ": "R",
"idt": "31-2019",
"rchrg": "N",
"inum": "BLM/35",
},
{
"val": 3631,
"itms": [
{
"num": 1,
"itm_det": {
"csamt": 0,
"samt": 824.53,
"rt": 5,
"txval": 32982,
"camt": 824.53
}
}
],
"inv_typ": "R",
"flag": "U",
"idt": "12019",
"inum": "BLM/1",
}
]
}
{
"cname": "as",
"inv": [
{
"val": 16,
"itms": [
{
"num": 1,
"itm_det": {
"camt": 408
}
}
],
"inv_typ": "R",
"flag": "U",
"updby": "S",
"idt": "142019",
"rchrg": "N",
"inum": "VT2",
}
]
},
],
"cnr":"ja"
}
在a的值为3,i的值为2之前,它看起来很好
在这里,我尝试访问下一个b2b的价值
我在vba中拥有的是
Sub Jsonread()
Dim FSO As New FileSystemObject
Dim JsonTS As TextStream
Dim jsonText As String
Dim jsonObject As Object
Dim item As Variant
Set JsonTS = FSO.OpenTextFile("C:\Users\ret\Write.json", ForReading)
jsonText = JsonTS.ReadAll
JsonTS.Close
Dim i As Long
Set jsonObject = JsonConverter.ParseJson(jsonText)
i = 1
Cells(1, 2).Value = jsonObject("fp")
Dim a As Long
Dim rower As Long 'Just a row selector
rower = 1
Do While i > 0
a = 1
Do While a > 0
rower = rower + 1
On Error GoTo Mainloop
Cells(rower, 1).Value = jsonObject("b2b")(i)("inv")(a)("idt")
On Error GoTo Mainloop
Cells(rower, 2).Value = jsonObject("b2b")(i)("inv")(a)("inum")
On Error GoTo Mainloop
Cells(rower, 3).Value = jsonObject("b2b")(i)("inv")(a)("val")
a = a + 1
Loop
Mainloop:
rower = rower + 1
i = i + 1
Loop
outside:
End Sub
起初,当i为1,a为2时,这是一个运行时错误9,但On错误Goto会处理它。但是在i=2和a=3之后,json中没有任何值,on错误goto应该处理它,但它没有。我已经尝试将On错误Goto放在代码的不同位置,它不会忽略错误并运行I=3和a=1。为什么会这样?在
外部
下添加一个标签,将其称为ErrHandler
,并使其恢复
到主循环
标签:
outside:
Exit Sub
ErrHandler:
Resume Mainloop
End Sub
然后将
On Error
语句更改为跳转到ErrHandler
,现在“快乐路径”中的所有可执行代码在错误状态下永远不会运行,而“错误路径”中的所有可执行代码(即ErrHandler
子例程)现在只能在错误状态下运行:执行路径已被整理并消除混乱,现在一切都应该“正常工作”。您在错误状态下跳转,但在错误状态下跳转到“快乐路径”,而从不清除错误状态:这使得“快乐路径”与“错误路径”交织在一起,当您处于“错误路径”时,任何运行时错误都会立即停止执行。您需要消除执行路径的混乱,确保错误处理代码仅在错误状态下运行,然后正确地恢复(这将清除错误状态)。