# ошибка значения при расчете расстояния Excel с помощью ключа API Карт Google - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь разработать функцию в Excel, которая возвращает время в пути между двумя точками. Я использовал этот код, который я нашел в Интернете, но всегда получаю ошибку #value. Когда я подключаю strUrl в своем браузере с помощью моего apikey, запрос работает.

Помощь очень ценится.

' Returns the number of seconds it would take to get from one place to another
Function TRAVELTIME(origin, destination, apikey)

    Dim strUrl As String
    strUrl = "https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=" & origin & "&destinations=" & destination & "&key=" & apikey

    Set httpReq = CreateObject("MSXML2.XMLHTTP")
    With httpReq
         .Open "GET", strUrl, False
         .Send
    End With

    Dim response As String
    response = httpReq.ResponseText

    Dim parsed As Dictionary
    Set parsed = JsonConverter.ParseJson(response)
    Dim seconds As Integer

    Dim leg As Dictionary

    For Each leg In parsed("routes")(1)("legs")
        seconds = seconds + leg("duration")("value")
    Next leg

    TRAVELTIME = seconds

End Function

1 Ответ

1 голос
/ 15 апреля 2020

Структура JSON отличается от того, что ожидает ваш код. ( Изучите документацию Google для api-матрицы расстояния, чтобы определить, что. )

Вам нужно что-то вроде:

    Set parsed = JsonConverter.ParseJson(response)
    Dim seconds As Integer

    Dim leg As Dictionary

    For Each leg In parsed("rows")(1)("elements")
        seconds = seconds + leg("duration")("value")
    Next leg

    TRAVELTIME = seconds

Примечание: Вы объявили seconds as Integer. Если вы изучите типы данных VBA, вы заметите, что максимальное значение Integer составляет 32 767, что немного больше девяти (9) часов. Если сумма ваших длительностей может быть больше, чем эта, и вы не будете sh иметь ошибку переполнения, предложите объявить секунды как Long или Double.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...