Получение ошибки времени выполнения 91 при попытке получить карты Google для расчета расстояния - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь получить информацию о соме из карт Google в электронную таблицу, но я получаю ошибку времени выполнения, когда запускаю код, и режим отладки мало помогает.

Я посмотрел другие статьи, и они что-то говорят об объявлении переменных, но я не могу найти, где это сделать.

Option Explicit

Sub GoogleMaps()

Dim myRequest As XMLHTTP60
Dim myDomDoc As DOMDocument60
Dim journey As IXMLDOMNode

Set myRequest = New XMLHTTP60

myRequest.Open "GET", 
"https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & 
Range("B1").Value & "&destinations=" & Range("B2").Value & 
"&key=MYOWNAPIKEY
myRequest.send

Set myDomDoc = New DOMDocument60
myDomDoc.LoadXML myRequest.responseText

Set journey = myDomDoc.SelectSingleNode("//leg/duration/value")

Range("B3").Value = journey.Text

Set journey = Nothing
Set myDomDoc = Nothing
Set myRequest = Nothing

End Sub

Ошибка времени выполнения в диапазоне («B3»). Значение = поездка. Текстовая строка, но я не могу понять, что не так.

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Это работает как шарм.

Option Explicit

Sub GoogleMaps()

Dim myRequest As XMLHTTP60
Dim myDomDoc As DOMDocument60
Dim journey As IXMLDOMNode
Dim journey2 As IXMLDOMNode

Set myRequest = New XMLHTTP60
myRequest.Open "GET", "https://maps.googleapis.com/maps/api/distancematrix/xml? 
origins=" & Range("I1").Value & "&destinations=" & Range("I2").Value & 
"&key=MYOWNKEY"
myRequest.send
Set myDomDoc = New DOMDocument60
myDomDoc.LoadXML myRequest.responseText
Set journey = 
myDomDoc.DocumentElement.SelectSingleNode("/DistanceMatrixResponse/row/element/
duration/value")
Set journey2 = 
myDomDoc.DocumentElement.SelectSingleNode("/DistanceMatrixResponse/row/element/
distance/value")

Range("B3").Value = journey.Text / 60
Range("B4").Value = journey2.Text / 1000

Set journey = Nothing
Set myDomDoc = Nothing
Set myRequest = Nothing

End Sub
0 голосов
/ 20 июня 2019

Кажется, что такого узла нет //leg/duration/value, в данном случае, как описано здесь - https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms757846(v%3Dvs.85) SelectSingleNode метод возвращает значение Null.

Попробуйте проверить его по этому коду:

Option Explicit

Sub GoogleMaps()

Dim myRequest As XMLHTTP60
Dim myDomDoc As DOMDocument60
Dim journey As IXMLDOMNode

Set myRequest = New XMLHTTP60

myRequest.Open "GET", 
"https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & 
Range("B1").Value & "&destinations=" & Range("B2").Value & "key=MYOWNAPIKEY"
myRequest.send

Set myDomDoc = New DOMDocument60
myDomDoc.LoadXML myRequest.responseText

Set journey = myDomDoc.SelectSingleNode("//leg/duration/value")
If journey is Null _
Then
    MsgBox "No such node found"
End If
Range("B3").Value = journey.Text

Set journey = Nothing
Set myDomDoc = Nothing
Set myRequest = Nothing

End Sub
...