Использование API Google Maps Matrix API в Excel с меньшим количеством вызовов API

Составляемая мной электронная таблица Excel представляет собой сетку из 8 различных местоположений и расстояние между ними определяется с помощью API Карт Google Карт расстояний. Места вводятся из таблицы и будут регулярно меняться.

Код VBA, который я сейчас использую:

   '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

Затем я вызываю его в электронную таблицу, используя простую функцию:

=GetDistance($D$14,B15)

Этот сценарий работает хорошо, но это означает, что я выполняю 56 вызовов API каждый раз, когда загружается электронная таблица, и каждый раз, когда меняю любое из расположений, и, следовательно, я достаточно быстро достигаю предела 2500 вызовов API.

Есть ли способ заставить функцию извлекать данные только в определенное время (например, одним нажатием кнопки) или просто получать те же данные за меньшее количество вызовов API?

Ответы на вопрос(1)

Ваш ответ на вопрос