我想在Windows 10的Excel中使用GMDMA中的This Post baelaelael的代碼,並且遇到我無法理解的錯誤。在Excel上使用Google Maps Distance Matrix API - 我哪裏出錯了?
我需要用距離爲我的論文填充一個非常龐大的數據庫(254x30),我試圖避免手工搜索所有內容 - 所以如果我可以每天使用=GetDistance
函數調用2000多天這應該夠了吧。
我得到的功能,在紙張返回錯誤(-1),這樣看來我第一次進入VBA至少使它成爲Excel工作表...
我嘗試添加我的API關鍵是因爲我認爲這可能是問題。
下面的代碼:
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 = "+&destinations="
lastVal = "+&mode=car&language=en&sensor=false&key=###################################"
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(B12,T3)
但我想,可能是錯誤的,所以我嘗試:
=GetDistance($P$13,T4)
對於原來的代碼用戶發佈的語法之後的另一組單元格,也沒有工作。有什麼想法嗎?
B12和T3的格式是什麼?你能給個例子嗎? –
我試過http://maps.googleapis.com/maps/api/distancematrix/json?origins=paris+&destinations=london&mode=car&language=en&sensor=false&key=######### ....它每天幾次沒有密鑰,並返回json數據,所以問題不是關鍵 – jsotola
我也嘗試了從vba sub調用它的代碼,它的工作。代碼接受兩個字符串(城市名稱都可以)....也在單元格中嘗試過,並且工作正常......您是否在B12和T3中放置了城市名稱?返回的值是以米爲單位的距離。 – jsotola