Excel 使用VBA方法通过bing api获取距离不起作用

Excel 使用VBA方法通过bing api获取距离不起作用,excel,vba,excel-2007,bing-api,Excel,Vba,Excel 2007,Bing Api,我试图通过vba创建一个方法,当我使用这个方法时,它会说#NAME?有时#值,原因是什么请引导 谢谢 Public Function DISTANCE(start As String, dest As String, key As String) Dim firstVal As String, secondVal As String, lastVal As String firstVal = "http://dev.virtualea

我试图通过vba创建一个方法,当我使用这个方法时,它会说#NAME?有时#值,原因是什么请引导

谢谢

Public Function DISTANCE(start As String, dest As String, key As String)
    
        Dim firstVal As String, secondVal As String, lastVal As String
    
        firstVal = "http://dev.virtualearth.net/REST/V1/Routes/Driving?wp.0="
        secondVal = "&wp.1=destinations="
        lastVal = "&optimize=time&routePathOutput=Points&distanceUnit=km&output=xml&key=" & key
    
        Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    
        URL = firstVal & start & secondVal & dest & lastVal
        
        objHTTP.Open "GET", URL, False
        objHTTP.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
        objHTTP.Send ("")
        DISTANCE = Round(Round(WorksheetFunction.FilterXML(objHTTP.ResponseText, "//TravelDistance"), 3) * 1.609, 0)
    
    End Function
三件事

  • 您需要以小写字母和2个字母缩写(表示州)传递往返位置

  • 以上内容需要进行URL编码

  • 响应具有需要添加的默认命名空间。对于后者,我求助于使用MSXML2.DOMDocument,以便能够添加名称空间



  • 你能发布一个输入示例来测试代码吗?距离(“纽约”、“迈阿密”、“API_键”)
    Public Sub test()
    
        Debug.Print GetDistance("new york,ny", "miami,fl", "key")
    
    End Sub
    
    Public Function GetDistance(ByVal start As String, ByVal dest As String, ByVal key As String) As Long
        
        Dim firstVal As String, secondVal As String, lastVal As String, objHTTP As Object, url As String
        
        firstVal = "http://dev.virtualearth.net/REST/V1/Routes/Driving?wp.0="
        secondVal = "&wp.1=destinations="
        lastVal = "&optmz=time&routePathOutput=Points&distanceUnit=km&output=xml&key=" & key
        
        Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        
        url = firstVal & Application.EncodeURL(LCase$(start)) & secondVal & Application.EncodeURL(LCase$(dest)) & lastVal
        
        objHTTP.Open "GET", url, False
        objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
        objHTTP.send
    
        Dim xmlDoc As MSXML2.DOMDocument60 'reference to Microsoft XML via VBE>Tools>References
        
        Set xmlDoc = New MSXML2.DOMDocument60
        xmlDoc.LoadXML objHTTP.responseText
        xmlDoc.SetProperty "SelectionNamespaces", "xmlns:r='http://schemas.microsoft.com/search/local/ws/rest/v1'"
    
        GetDistance = Round(Round(xmlDoc.SelectSingleNode("//r:TravelDistance").Text, 3) * 1.609, 0)
        
    End Function