2017-06-15 3 views
1

Ich benutze HERE Maps API mit VBA Geocodding, um meine Adresse zu validieren und geben Sie die Länge & der Adresse. Ich bekomme die Antwort, kann aber die Antwort nicht speichern und verwenden.HERE Maps API: Kann die Antwort nicht speichern

Im Anschluss ist mein Code:

Private Sub Execute_Click() 

    Dim address, address1, address2, address3, state, city, zip As String 
    Dim appId As String 
    Dim appCode As String 
    Dim hereServerName As String 
    Dim strQuery As String 
    Dim strLatitude As String 
    Dim strLongitude As String 
    Dim addressGeocode As String 
    Dim hereResult As New MSXML2.DOMDocument 
    Dim hereService As New MSXML2.XMLHTTP 
    Dim rNodes As MSXML2.IXMLDOMNodeList 
    Dim rNode As MSXML2.IXMLDOMNode 

    hereServerName = "https://geocoder.cit.api.here.com/6.2/geocode.xml?" 
    appId = "uL2kjU0xrylpwTQIgrl7" 
    appCode = "2jhjonGD4MXzODki5T62Mg" 

    Dim succ, actions As Integer 
     succ = 0 
     actions = 9 
     For Row = 2 To actions 
      On Error Resume Next 
      address1 = Sheet1.Range("C" & Row) 
      address2 = Sheet1.Range("D" & Row) 
      address3 = Sheet1.Range("E" & Row) 
      city = Sheet1.Range("F" & Row) 
      state = Sheet1.Range("G" & Row) 
      zip = Sheet1.Range("H" & Row) 
      If address1 <> "" Then 
       address = address1 
      End If 
      If address2 <> "" Then 
       address = address & "," & address2 
      End If 
      If address3 <> "" Then 
       address = address & "," & address3 
      End If 
      address = address & "," & city & "," & state & "," & zip 
      address = URLEncode(address) 
      strQuery = hereServerName & "searchtext=" & address & "&app_id=" & appId & "&app_code=" & appCode & "&gen=9" 
      hereService.Open "GET", strQuery, False 
      hereService.send 
      hereService.waitForResponse 
      'I get the repose for the request but i am unable to store it in the here Result[Xml response][1] 
      MsgBox (hereService.responseText) 
      hereResult.LoadXML (hereService.responseText) 'Result not being stored 
      'I am unable to retrive any data from this statment. 
      Set rNodes = hereResult.getElementsByTagName("DisplayPosition") 
      For Each rNode In rNodes 
       strLatitude = rNode.ChildNodes(0).ChildNodes(0).Text 
       strLongitude = rNode.ChildNodes(0).ChildNodes(1).Text 
       addressGeocode = strLatitude & "," & strLongitude 
      Next rNode 
      Sheet1.Range("I" & Row) = addressGeocode 
     Next Row 
    Exit Sub 
End Sub 

Public Function URLEncode(ByVal StringVal As String, Optional SpaceAsPlus As Boolean = False) As String 

    Dim StringLen As Long: StringLen = Len(StringVal) 
    If StringLen > 0 Then 
    ReDim result(StringLen) As String 
    Dim i As Long, CharCode As Integer 
    Dim Char As String, Space As String 
    If SpaceAsPlus Then Space = "+" Else Space = "%20" 
    For i = 1 To StringLen 
     Char = Mid$(StringVal, i, 1) 
     CharCode = Asc(Char) 
     Select Case CharCode 
     Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126 
     result(i) = Char 
     Case 32 
     result(i) = Space 
     Case 0 To 15 
     result(i) = "%0" & Hex(CharCode) 
     Case Else 
     result(i) = "%" & Hex(CharCode) 
     End Select 
    Next i 
    URLEncode = Join(result, "") 
    End If 
End Function 

Bitte helfen Sie mir, dieses Problem zu beheben.

+0

"Die Antwort kann nicht gespeichert und verwendet werden" - Sie müssen dies möglicherweise etwas erweitern. Es wäre hilfreich, ein Beispiel dafür anzugeben, wie die Antwort aussieht. Wenn die Antwort JSON ist, sollten Sie sich https://github.com/VBA-tools/VBA-JSON ansehen –

Antwort

2

Ich kann es speichern. Ich habe gerade die Antwort in einer temporären Variablen strValue gespeichert und verwendet dann das

enter image description here

strValue = (hereService.responseText) 
hereResult.LoadXML (strValue) 

Da Sie eine Schleife verwenden, stellen Sie bitte sicher, dass hereService.responseText tatsächlich etwas von der Schleife für das Element zurückkehrt.

Vermeiden Sie auch die Verwendung von OERN(). Es ist so, als würde man den Code "Shut Up" sagen. Behandeln Sie die Fehler auf die richtige Art und Weise.

bearbeiten

Hier ist ein Teil eines vollständig getesteten Code

strValue = (hereService.responseText) 
hereResult.LoadXML (strValue) 

strLatitude = hereResult.getElementsByTagName("Latitude").Item(0).Text 
strLongitude = hereResult.getElementsByTagName("Longitude").Item(0).Text 
addressGeocode = strLatitude & "," & strLongitude 

Sheet1.Range("I" & Row) = addressGeocode 

Screenshot

es Getestet auf einer Pizza Hut Ort (Verdammt ich bin hungrig jetzt: P)

enter image description here

Verwandte Themen