Hallo zusammen,
erstmal danke für die vielen Hinweise. Ich habe eine Liste mit allen PLZ aus Deutschland. Der User wird zur Eingabe seiner PLZ aufgefordert. Im Anschluss soll die Entfernung seiner PLZ zu jeder PLZ in der Liste (ca. 14000 Stück) berechnet werden. Habe dafür den Code in ne Schleife gepackt. Leider bricht er nach ner Zeit mit dem Fehler 91 ab. Das hängt wohl damit zusammen, dass Google dicht macht. Gibt es dafür eine Lösung? Wenn ich die Datei neu aifmache, läuft die Abfrage erstmal wieder. Eine Idee wäre daher vielleicht, die Datei per Makro zu schließen, wieder zu öffnen und anschließend die Schleifer wieder an der letzten Stelle zu starten. Habe es noch nicht ausprobiert. Wollte erstmal euer Feedback abwarten. Besten Dank im Voraus.
Sub Entfernung_berechnen_Abfrage()
Dim PLZ As String
PLZ = InputBox("Bitte geben Sie die Ihre Postleitzahl ein.", "eigene Postleitzahl")
Suche1 = PLZ
Set Zelle1 = Columns().Find(What:=Suche1, LookIn:=xlValues, LookAt:=xlWhole)
If Zelle1 Is Nothing Then
GoTo Abbruch
Else
MsgBox "Die Entfernungsberechnung für knapp 14.000 Postleitzahlen wird jetzt gestartet. Beachten Sie bitte, dass dies einige Zeit in Anspruch nehmen wird. Sie bekommen eine Meldung, sobald alles abgeschlossen ist."
Call Entfernung_berechnen
End If
Abbruch:
MsgBox "Geben Sie eine korrekte Potleitzahl ein"
Call Entfernung_berechnen_Abfrage
End Sub
Sub Entfernung_berechnen()
ActiveSheet.Unprotect "A$mu$$3n"
Cells(1142, 1).Select
For i = ActiveCell.Row To 13406
'Variablendeklarastionen
'Objekt - Late Binding
Dim objXML As Object 'fuer XML-"String"
Dim xmlDoc As Object
Dim xmlNod As Object
'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(PLZ, "0####")
'DestinationAddress ermitteln
'Hinweise:
'PLZ nicht 4stellig moeglich!
strDAddr = "Deutschland, " & Format(Cells(i, 1), "0####")
'Abfrage oeffnen
objXML.Open "POST", "
http://maps.googleapis.com/maps/api/dist...ml?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
'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(i, 4) = xmlNod.Text / 1000
'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
If Err.Number <> 0 Then Call Entfernung_berechnen
'XML-Objecte zuruecksetzen
Set xmlNod = Nothing
Set xmlDoc = Nothing
Set objXML = Nothing
Next i
ActiveSheet.Protect "A$mu$$3n"
MsgBox "Die Berechnung ist abgeschlossen!"
End Sub