Vba 测试「;交付“第2行”;在SmartyStreet';s API响应
我正在使用SmartyStreets API,并尝试测试响应,以查看“delivery_line_2”字段中是否有值。在尝试运行代码时,VBA for Excel中不断出现变量未定义错误。有人对最好的方法有什么建议吗?我正在使用以下代码尝试访问:Vba 测试「;交付“第2行”;在SmartyStreet';s API响应,vba,api,smartystreets,Vba,Api,Smartystreets,我正在使用SmartyStreets API,并尝试测试响应,以查看“delivery_line_2”字段中是否有值。在尝试运行代码时,VBA for Excel中不断出现变量未定义错误。有人对最好的方法有什么建议吗?我正在使用以下代码尝试访问: Dim candidates, candidate, components, metadata, analysis As MSXML2.IXMLDOMNode Set candidates = xmlDoc.DocumentElemen
Dim candidates, candidate, components, metadata, analysis As MSXML2.IXMLDOMNode
Set candidates = xmlDoc.DocumentElement
For Each candidate In candidates.ChildNodes
Set components = candidate.SelectSingleNode("components")
Set metadata = candidate.SelectSingleNode("metadata")
Set analysis = candidate.SelectSingleNode("analysis")
Cells(RowIndex, DPVColumn).Value = analysis.SelectSingleNode("dpv_match_code").nodeTypedValue
Cells(RowIndex, DPVColumn + 1).Value = components.SelectSingleNode("zipcode").nodeTypedValue & "-" & components.SelectSingleNode("plus4_code").nodeTypedValue
Cells(RowIndex, DPVColumn + 2).Value = candidate.SelectSingleNode("delivery_line_1").nodeTypedValue
**If Len(candidate.SelectSingleNode("delivery_line_2").nodeTypedValue) > 1 Then
Cells(RowIndex, DPVColumn + 3).Value = candidate.SelectSingleNode("delivery_line_2").nodeTypedValue
End If**
谢谢。警告您并非每次都返回所有数据。这对任何看起来都是正确的,尽管有些回报往往在那个里,而另一些则并没有那个么多<代码>交付行2通常不返回。在这种情况下,尝试获取值可能会引发错误91“对象变量或未设置块变量”
,因为它不存在。因为它甚至还没有被实例化,所以大多数简单的测试,如IsEmpty
,IsError
,IsMissing
,等等,都无法检查这一点。它添加了大量代码,但最好的方法是首先设置一个变量,该变量等于XML返回的引用部分,就像处理元数据一样。对于交付线2也要这样做。如果返回中没有引用,则变量将设置为“Nothing”
。出于某种原因,这不会引起错误。现在可以测试变量:
Set DeliveryLine2=candidate。选择SingleNode(“delivery\u line\u 2”)'注意缺少NodeyPedValue
如果没有,则DeliveryLine2不算什么
单元格(行索引,DPV列+3)。值=候选。选择SingleNode(“delivery\u line\u 2”)。NodeyPedValue
如果结束
除了测试返回的每一个片段之外,您还需要认识到片段并不总是存在,并用代码正确地处理它们。SmartyStreets会告诉您这一点,但他们对此类网站上大量帮助的引用有点弱。我在Access 2010中完成了我的工作,但它仍然是VBA。警告您并非每次都返回所有数据。这对任何看起来都是正确的,尽管有些回报往往在那个里,而另一些则并没有那个么多<代码>交付行2通常不返回。在这种情况下,尝试获取值可能会引发错误91“对象变量或未设置块变量”
,因为它不存在。因为它甚至还没有被实例化,所以大多数简单的测试,如IsEmpty
,IsError
,IsMissing
,等等,都无法检查这一点。它添加了大量代码,但最好的方法是首先设置一个变量,该变量等于XML返回的引用部分,就像处理元数据一样。对于交付线2也要这样做。如果返回中没有引用,则变量将设置为“Nothing”
。出于某种原因,这不会引起错误。现在可以测试变量:
Set DeliveryLine2=candidate。选择SingleNode(“delivery\u line\u 2”)'注意缺少NodeyPedValue
如果没有,则DeliveryLine2不算什么
单元格(行索引,DPV列+3)。值=候选。选择SingleNode(“delivery\u line\u 2”)。NodeyPedValue
如果结束
除了测试返回的每一个片段之外,您还需要认识到片段并不总是存在,并用代码正确地处理它们。SmartyStreets会告诉您这一点,但他们对此类网站上大量帮助的引用有点弱。我在Access 2010中完成了我的工作,但它仍然是VBA