Json 无法再次处理运行时错误9

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": [

我有一个json代码,如下所示:

{
   "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
子例程)现在只能在错误状态下运行:执行路径已被整理并消除混乱,现在一切都应该“正常工作”。

您在错误状态下跳转
,但在错误状态下跳转到“快乐路径”,而从不清除错误状态:这使得“快乐路径”与“错误路径”交织在一起,当您处于“错误路径”时,任何运行时错误都会立即停止执行。您需要消除执行路径的混乱,确保错误处理代码仅在错误状态下运行,然后正确地恢复(这将清除错误状态)。