19.01.2018, 16:50
(Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2018, 20:00 von WillWissen.
Bearbeitungsgrund: Makro in Codetags gesetzt
)
Hallo liebe Excel und VBA Experten,
ich habe ein Macro gefunden welche die Entfernung und die Zeit zwischen zwei Adressen berechnet.
Die Startadresse ist A1 und die Ziel Adresse ist B1.
Die Distanz wird in C1 ausgegeben und die Zeit in D1.
Nun Zum Problem: Ich habe eine Liste mit über 3000 Zeilen. Dieses Makro soll bis zu letzten Zeile laufen.
Sollte eine Zeile Falsch sein oder nicht zu berechnen sein soll das Makro nicht abbrechen sondern in C und D jefeils "falsch" eintragen.
Ich hoffe ich konnte mich verständlich genug Ausdrücken.
Besten Dank schon mal für eure Hilfe.
Grüße
Thilo
ich habe ein Macro gefunden welche die Entfernung und die Zeit zwischen zwei Adressen berechnet.
Die Startadresse ist A1 und die Ziel Adresse ist B1.
Die Distanz wird in C1 ausgegeben und die Zeit in D1.
Nun Zum Problem: Ich habe eine Liste mit über 3000 Zeilen. Dieses Makro soll bis zu letzten Zeile laufen.
Sollte eine Zeile Falsch sein oder nicht zu berechnen sein soll das Makro nicht abbrechen sondern in C und D jefeils "falsch" eintragen.
Ich hoffe ich konnte mich verständlich genug Ausdrücken.
Code:
Public Sub GoogleTest()
'Variablendeklarastionen
'Objekt - Late Binding
Dim objXML As Object 'fuer XML-"String"
Dim xmlDoc As Object
Dim xmlNod As Object
'Objekt - Early Binding
'Dim xmlDoc As New MSXML2.DOMDocument
'Dim xmlNod As MSXML2.IXMLDOMNode
'String
Dim strOAddr$, strDAddr
On Error GoTo errorhandler
'XML-Objecte instanzieren
Set objXML = CreateObject("Msxml2.XMLHTTP")
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
'Wenn Instanzierung nicht nichts gebracht hat, dann
If Not objXML Is Nothing Then
'OriginAddress ermitteln
'Hinweise:
'PLZ auch 4stellig moeglich
strOAddr = "Deutschland, " & Format(Cells(1, 1), "0####")
'DestinationAddress ermitteln
'Hinweise:
'PLZ nicht 4stellig moeglich!
strDAddr = "Deutschland, " & Format(Cells(1, 2), "0####")
'Abfrage oeffnen
objXML.Open "POST", "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & strOAddr & "&destinations=" & strDAddr & "&language=de-DE&sensor=false", False
'Abfrageheader
objXML.setRequestHeader "Content-Type", "content=text/html; charset=UTF-8"
'Abfrage senden
objXML.send
'Abfrageergebnis (Text) aufnehmen
xmlDoc.LoadXML objXML.responseText
'Zeit auslesen /Value=Sekunden /Text = Minuten mit Angabe "Minuten"
Set xmlNod = xmlDoc.SelectSingleNode("//row/element/duration/value")
'Zeit in Stundenzelle eintragen, Rueckgabewert / 86400
Cells(1, 4) = CDate(xmlNod.Text / 86400)
'Entfernung auslesen /Value=Meter /Text = Kilometer mit Angabe "km"
Set xmlNod = xmlDoc.SelectSingleNode("//row/element/distance/value")
'Entfernung in km zelle eintragen, Rueckgabewert / 1000
Cells(1, 3) = xmlNod.Text / 1000
'Zeit in Stundenzelle eintragen, Rueckgabewert / 86400
Cells(1, 4) = CDate(xmlNod.Text / 86400)
'Ende Wenn Instanzierung nicht nichts gebracht hat, dann
End If
'Fehlerbehandlung / Programmende
errorhandler:
'Wenn Fehlernummer <> 0, dann Ausgabe Fehlermeldung
If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description
'XML-Objecte zuruecksetzen
Set xmlNod = Nothing
Set xmlDoc = Nothing
Set objXML = Nothing
End Sub
Besten Dank schon mal für eure Hilfe.
Grüße
Thilo