【问题标题】:testing for "delivery_line_2" in SmartyStreet's API response在 SmartyStreet 的 API 响应中测试“delivery_line_2”
【发布时间】:2013-07-29 14:44:04
【问题描述】:

我正在使用 SmartyStreets API,我正在尝试测试响应以查看“delivery_line_2”字段中是否有值。尝试运行代码时,我在 VBA for Excel 中不断收到变量未定义错误。有人对最好的方法提出建议吗?我正在使用以下代码尝试访问:

    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**

谢谢。

【问题讨论】:

    标签: vba api smartystreets


    【解决方案1】:

    SmartyStreets 警告您并非每次都返回所有数据。这几乎适用于任何事情,尽管有些回报往往存在,但其他部分则不然。 delivery_line_2 通常不会返回。在这种情况下,尝试获取该值可能会引发Error 91 "Object variable or with block variable not set",因为它不存在。因为它甚至没有被实例化,所以最简单的测试,如IsEmptyIsErrorIsMissing 等,都无法检查这一点。它添加了很多代码,但最好的办法是首先设置一个等于 XML 返回的引用部分的变量,就像使用元数据一样。也为delivery_line_2 执行此操作。如果引用不在返回中,则变量将设置为"Nothing"。由于某种原因,这不会引发错误。现在你可以测试变量了:

    Set DeliveryLine2 = candidate.SelectSingleNode("delivery_line_2")  'Note lack of nodeTypedValue
        
    If Not DeliveryLine2 Is Nothing Then
        
      Cells(RowIndex, DPVColumn + 3).Value = candidate.SelectSingleNode("delivery_line_2").nodeTypedValue
        
    End If
    

    除了测试返回的每一部分之外,您还需要认识到这些部分并不总是存在,并使用您的代码正确处理它。 SmartyStreets 会告诉您这一点,但是他们对诸如此类的网站上的大量帮助的引用有点薄弱。我在 Access 2010 中完成了我的工作,但它仍然是 VBA。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多