Verwenden der Google Maps Distance Matrix-API in Excel mit weniger API-Aufrufen
Teil einer Excel-Tabelle, die ich erstelle, ist ein Raster von 8 verschiedenen Standorten und der Abstand zwischen ihnen, der von der Google Maps Distance Matrix-API abgerufen wird. Die Standorte werden aus einer Tabelle eingegeben und regelmäßig geändert.
Der VBA-Code, den ich derzeit verwende, lautet:
'Calculate Google Maps distan,ce between two addresses
Public Function GetDistance(start As String, dest As String)
Dim firstVal As String, secondVal As String, lastVal As String
firstVal = "http://maps.googleapis.com/maps/api/distancematrix/json?origins="
secondVal = "+UK&destinations="
lastVal = "+UK&mode=car&language=en&sensor=false"
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = firstVal & Replace(start, " ", "+") & secondVal & Replace(dest, " ", "+") & lastVal
objHTTP.Open "GET", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
If InStr(objHTTP.responseText, """distance"" : {") = 0 Then GoTo ErrorHandl
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = """value"".*?([0-9]+)": regex.Global = False
Set matches = regex.Execute(objHTTP.responseText)
tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator))
GetDistance = CDbl(tmpVal)
Exit Function
ErrorHandl:
GetDistance = -1
End Function
Ich rufe es dann in der Tabelle mit der einfachen Funktion auf:
=GetDistance($D$14,B15)
Dieses Skript funktioniert gut, aber es bedeutet, dass ich jedes Mal 56 API-Aufrufe durchführe, wenn die Tabelle geladen wird, und jedes Mal, wenn ich einen der Speicherorte ändere. Daher überschreite ich ziemlich schnell das 2500 API-Aufruflimit.
Ist es eine Möglichkeit, die Funktion so zu konfigurieren, dass Daten nur zu einem bestimmten Zeitpunkt abgerufen werden (z. B. per Mausklick) oder einfach dieselben Daten in weniger API-Aufrufen abgerufen werden?