excel - 使用 VBA 方法通过 Bing API 获取距离

标签 excel vba excel-2007 bing-api

当我使用此方法时,我正在尝试通过 VBA 创建一个方法,它显示 #NAME?有时是#value。

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 个字母缩写
  • 以上需要urlencoded
  • 响应有一个您需要添加的默认命名空间。对于后者,我求助于使用 MSXML2.DOMDocument 以便能够添加命名空间。
  • 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
    

    关于excel - 使用 VBA 方法通过 Bing API 获取距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64168368/

    相关文章:

    vba - 根据匹配 ID 复制并粘贴信息,其中一张表在数据透视表中包含行

    excel - 使用嵌套循环对特定单元格求和

    excel - 如何使用 VBA 和后期绑定(bind)(无 ADO、无 DAO)将 Excel 数据移动到 Access - DoCmd.TransferSpreadsheet 运行时错误 424?

    vba - VLookUp 到另一个打开的工作簿错误

    excel - 使用幂查询按数字字符串的最小长度从文本中提取数字

    javascript - 在 Excel 电子表格中运行 JQuery 地理定位脚本

    vba - 根据字符数对集合进行排序

    xml - 另存为 XML 时 Excel 2007 中的数字精度问题

    c# - 带有 VSTO 的 Excel 中的表格

    Python 和 Excel : Overwriting an existing file always prompts, 尽管 XlSaveConflictResolution 值