我正在开发一个从API获取数据的项目。 我的测试很好。
在我高于14之后,它开始出现错误13类型不匹配并停止
有人可以帮我解释为什么我有错误
如果json(" meta")(" total")是"键入不兼容性"
我跑了我的maccro很多次,现在它跑到i = 103才得到错误。
我将下面使用的代码放在下面,以便您可能会看到一些改进错误以及我收到错误的原因。
提前感谢您的帮助。
Sub Test()
'create object to receive datas
Dim http As Object, json As Object
Set http = CreateObject("MSXML2.XMLHTTP")
'process the data
i = 1
k = 2
While i <= 200
Dim j As String
j = i
Dim url As String
url = "https://api.worldoftanks.eu/wot/encyclopedia/vehicles/?application_id=demo&tank_id=" & i
http.Open "GET", url, False
http.send
Set json = ParseJson(http.responsetext)
If json("meta")("total") <> null Then
' Tank id
Sheets(2).Cells(k, 1).Value = json("data")(j)("tank_id")
' Tank is premium or Standard
If json("data")(j)("is_premium") = False Then
Sheets(2).Cells(k, 2).Value = "Standard"
Else: Sheets(2).Cells(k, 2).Value = "Premium"
End If
' Tank name
Sheets(2).Cells(k, 3).Value = json("data")(j)("name")
' Tank nation
Sheets(2).Cells(k, 4).Value = json("data")(j)("nation")
' Tank best Radio
Dim radios As Integer
radios = 0
For Each Item In json("data")(j)("radios")
If Item > radios Then radios = Item Else radios = radios
Next Item
Sheets(2).Cells(k, 5).Value = radios
' End of Tank Values, next
i = i + 1
k = k + 1
Else: i = i + 1
End If
Wend
MsgBox ("complete")
End Sub
[编辑] 我尝试了&#34;接下来的错误恢复&#34;公式那样
While i <= 100
j = i
Dim url As String
url = myurl & i
http.Open "GET", url, False
http.send
Set response = ParseJson(http.responsetext)
On Error Resume Next
If IsNull(response("meta")("total")) Then
Else:
' Tank id
Sheets(1).Cells(k, 1).Value = response("data")(j)("tank_id")
' Tank is premium or Standard
If response("data")(j)("is_premium") = False Then
Sheets(1).Cells(k, 2).Value = "Standard"
Else: Sheets(1).Cells(k, 2).Value = "Premium"
End If
' Tank name
Sheets(1).Cells(k, 3).Value = response("data")(j)("name")
' Tank nation
Sheets(1).Cells(k, 4).Value = response("data")(j)("nation")
' Tank best Radio
Dim radios As Integer
radios = 0
For Each Item In response("data")(j)("radios")
If Item > radios Then radios = Item Else radios = radios
Next Item
Sheets(1).Cells(k, 5).Value = radios
' End of Tank Values, next
k = k + 1
End If
i = i + 1
Wend
现在错误没有显示,但工作表中也没有写入任何内容。 有人能帮助我吗?
答案 0 :(得分:1)
在某些情况下(例如
If Var = Null
和If Var <> Null
,您可能希望评估为 True 的表达式始终为 False 。这是因为任何包含 Null 的表达式本身都是 Null ,因此 False 。
测试非Null
的正确方法是
If Not IsNull(json("meta")("total")) Then
仅当json
返回实际Variant/Null
值时才会有效。
如果它只返回零长度字符串,您应该使用:
If json("meta")("total") <> vbNullString Then
如果它返回Variant/Empty
,您应该使用:
If Not IsEmpty(json("meta")("total")) Then
注意:这并不能解释为什么会出现“类型不兼容”错误,也不能解释为什么每次运行代码时它都不会在同一次迭代中崩溃。它只是解释了为什么If
语句中没有任何内容正在处理中。