2013-07-29 69 views
0

我正在使用SmartStreets API,我試圖測試響應以查看「delivery_line_2」字段中是否有值。在嘗試運行代碼時,我一直收到一個變量在Excel中爲VBA取消定義錯誤。任何人都有最好的方法來做這個建議?我正在使用以下代碼嘗試訪問:在SmartyStreet的API響應中測試「delivery_line_2」

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

謝謝。

回答

0

SmartStreets警告您並不是每次都返回所有數據。這看起來確實如此,儘管一些回報往往在那裏,其他的並不多。經常不會返回delivery_line_2。當這種情況試圖獲得該值可能會提高Error 91 "Object variable or with block variable not set",因爲它不存在。由於它甚至沒有被實例化,所以最簡單的測試例如IsEmpty,IsError,IsMissing等未能檢查這一點。它增加了很多代碼,但最好的辦法是首先設置一個變量等於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 

除了測試每一件你必須認識到的作品將不會永遠在那裏,妥善處理與您的代碼的回報。 SmartStreets告訴你這一點,但是他們在這個站點上提供的大量幫助有點弱。我在Access 2010中完成了自己的工作,但仍然是VBA。