我试图让Excel返回地址,邮政编码等之间的行驶距离。我已经使用Google API设置了所有设置,但我不熟悉VBA在所有,所以我不知道这个代码有什么问题。VBA代码不返回大于999的值
每当两点之间的距离大于999英里时,代码将只返回第一个数字。所以如果它是1,284英里,它只返回1。如果它是2,817英里,它只返回2,等等。我正在运行的代码在下面,如果有人可以看看它,告诉我我错过了什么,或者我做错了什么。
而且我只是尽可能地透明,我自己也没有写过这些。我从一个叫做analystcave.com的网站得到了这个信息,我之前在这里发布过关于这个问题的信息,而我得到的唯一回应并没有解决这个问题。我再次发布了,但我认为StackOverflow是找到正确答案的更好的地方,而且更快。
非常感谢您的帮助!
'Calculate Google Maps distance 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 = "&destinations="
lastVal = "&mode=car&language=pl&units=imperial&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 regex = CreateObject("VBScript.RegExp"): regex.Pattern = """text"".*?([0-9]+)": regex.Global = False
Set matches = regex.Execute(objHTTP.responseText)
tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator))
Debug.Print matches(0).SubMatches(0)
GetDistance = CDbl(tmpVal)
Exit Function
ErrorHandl:
GetDistance = -1
End Function
您的正则表达式是否在千位分隔符处打破? – steenbergh
我不知道。我如何检查?对不起,我对VBA一无所知。 – burkamus
我认为他的意思是,你的输入文本的正则表达式像10000或10,000像?如果是后者,那么在处理这个逗号时会遇到问题。 – Mikegrann