ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2228|回复: 9

[求助] 使用VBA直接从百度地图网站获取两地距离

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-15 17:26 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
AA列是Q列出站到R列到站百度地图的距离,AC列是Q列出站到AB列参考城市百度地图的距离。
以上都是百度地图驾车推荐线路,可以的话,麻烦同事多弄一份代码,是百度地图最短线路。求VBA大神帮忙,谢谢
image.png

吨公里.rar

12.14 KB, 下载次数: 48

TA的精华主题

TA的得分主题

发表于 2020-1-15 22:13 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-16 08:24 | 显示全部楼层
2E-er 发表于 2020-1-15 22:13
http://club.excelhome.net/thread-1163384-1-1.html

那个帖子是固定两个城市之间的距离,我需要的是我自己输入两个城市

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-16 08:42 | 显示全部楼层
2E-er 发表于 2020-1-15 22:13
http://club.excelhome.net/thread-1163384-1-1.html

这个不是我需要的两个城市的距离,代码里已经固定了两个城市了

TA的精华主题

TA的得分主题

发表于 2020-1-16 13:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
majiechi 发表于 2020-1-16 08:42
这个不是我需要的两个城市的距离,代码里已经固定了两个城市了

QQ截图20200116131330.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-16 17:00 | 显示全部楼层

Sub 里程查询()
k = [a65535].End(xlUp).Row
For i = 2 To k
CityFrom = Cells(i, "q")
CityTo = Cells(i, "r")
Dim strText As String
Dim URL As String
Dim dis, mtime

URL = "http://map.baidu.com/?"
URL = URL & "qt=nav"
URL = URL & "&c=223"
URL = URL & "&sn=2$$$$$$" & CityFrom & "$$0$$$$"
URL = URL & "&en=2$$$$$$" & CityTo & "$$0$$$$"

With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.Send
strText = .responsetext
dis = Val(Split(strText, """dis"":")(1))
mtime = Val(Mid(strText, InStrRev(strText, """time"":") + 7))
Cells(i, "aa") = dis / 1000

End With
Next
End Sub
这个是根据网站一些大神参考出来的,但是,我要q列到r列的距离,同事我还要q列到ab列的距离,另外这个代码只能得到部分距离,并没有得到全部的距离。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-16 17:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
用下面的代码不是所有城市距离都有的,有一些没有的,搞不懂啊,有没有大神解释一下什么回事啊?

Sub 里程查询()
k = [a65535].End(xlUp).Row
For i = 2 To k
CityFrom = Cells(i, "q")
CityTo = Cells(i, "r")
Dim strText As String
Dim URL As String
Dim dis, mtime

URL = "http://map.baidu.com/?"
URL = URL & "qt=nav"
URL = URL & "&c=223"
URL = URL & "&sn=2$$$$$$" & CityFrom & "$$0$$$$"
URL = URL & "&en=2$$$$$$" & CityTo & "$$0$$$$"

With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.Send
strText = .responsetext
dis = Val(Split(strText, """dis"":")(1))
mtime = Val(Mid(strText, InStrRev(strText, """time"":") + 7))
Cells(i, "aa") = dis / 1000

End With
Next
End Sub

image.png

TA的精华主题

TA的得分主题

发表于 2023-6-2 14:48 | 显示全部楼层
majiechi 发表于 2020-1-16 17:02
用下面的代码不是所有城市距离都有的,有一些没有的,搞不懂啊,有没有大神解释一下什么回事啊?

Sub 里 ...

XMLHttp的方式有问题,要换成WinHttp.WinHttpRequest.5.1
用下面代码可以正常使用:
  1. Sub 里程查询百度版()
  2. k = [a65535].End(xlUp).Row
  3. Application.ScreenUpdating = False
  4. For i = 2 To k
  5. Dim CityFrom As String
  6. Dim CityTo As String
  7. CityFrom = Cells(i, 1)
  8. CityTo = Cells(i, 2)
  9. Dim strText As String
  10. Dim URL As String
  11. Dim dis, mtime, test
  12. Dim strJS As String
  13. With CreateObject("WinHttp.WinHttpRequest.5.1")
  14.      URL = "http://map.baidu.com/?"
  15.      URL = URL & "newmap=1&reqflag=pcmap&biz=1&qt=nav"
  16.      URL = URL & "&c=1"
  17.      URL = URL & "&sn=2$$$$$$" & CityFrom & "$$0$$$$"
  18.      URL = URL & "&en=2$$$$$$" & CityTo & "$$0$$$$"
  19.      .Open "GET", URL, False
  20.      .send
  21.         '等待响应
  22.         Do While .WaitForResponse <> True
  23.         DoEvents
  24.         Loop
  25.         strText = .responseText

  26.     dis = Val(Split(strText, """dis"":")(1))
  27.     'mtime = Val(Mid(strText, InStrRev(strText, """time"":") + 7))
  28.     'MsgBox "约" & Format(dis / 1000, "0.00公里/") & Format(mtime / 86400, "hh小时nn分钟")
  29.     Cells(i, 3) = dis / 1000
  30. End With
  31. Next
  32. Application.DisplayStatusBar = True
  33. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-2 14:49 | 显示全部楼层
XMLHttp的方式有问题,要换成WinHttp.WinHttpRequest.5.1
用下面代码可以正常使用:

Sub 里程查询百度版()
k = [a65535].End(xlUp).Row
Application.ScreenUpdating = False
For i = 2 To k
Dim CityFrom As String
Dim CityTo As String
CityFrom = Cells(i, 1)
CityTo = Cells(i, 2)
Dim strText As String
Dim URL As String
Dim dis, mtime, test
Dim strJS As String
With CreateObject("WinHttp.WinHttpRequest.5.1")
     URL = "http://map.baidu.com/?"
     URL = URL & "newmap=1&reqflag=pcmap&biz=1&qt=nav"
     URL = URL & "&c=1"
     URL = URL & "&sn=2$$$$$$" & CityFrom & "$$0$$$$"
     URL = URL & "&en=2$$$$$$" & CityTo & "$$0$$$$"
     .Open "GET", URL, False
     .send
        '等待响应
        Do While .WaitForResponse <> True
        DoEvents
        Loop
        strText = .responseText

    dis = Val(Split(strText, """dis"":")(1))
    'mtime = Val(Mid(strText, InStrRev(strText, """time"":") + 7))
    'MsgBox "约" & Format(dis / 1000, "0.00公里/") & Format(mtime / 86400, "hh小时nn分钟")
    Cells(i, 3) = dis / 1000
End With
Next
Application.DisplayStatusBar = True
End Sub

TA的精华主题

TA的得分主题

发表于 2023-6-2 14:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
XMLHttp的方式有问题,要换成WinHttp.WinHttpRequest.5.1

用下面代码可以正常使用:
Sub 里程查询百度版()
k = [a65535].End(xlUp).Row
Application.ScreenUpdating = False
For i = 2 To k
Dim CityFrom As String
Dim CityTo As String
CityFrom = Cells(i, 1)
CityTo = Cells(i, 2)
Dim strText As String
Dim URL As String
Dim dis, mtime, test
Dim strJS As String
With CreateObject("WinHttp.WinHttpRequest.5.1")
     URL = "http://map.baidu.com/?"
     URL = URL & "newmap=1&reqflag=pcmap&biz=1&qt=nav"
     URL = URL & "&c=1"
     URL = URL & "&sn=2$$$$$$" & CityFrom & "$$0$$$$"
     URL = URL & "&en=2$$$$$$" & CityTo & "$$0$$$$"
     .Open "GET", URL, False
     .send
        '等待响应
        Do While .WaitForResponse <> True
        DoEvents
        Loop
        strText = .responseText

    dis = Val(Split(strText, """dis"":")(1))
    'mtime = Val(Mid(strText, InStrRev(strText, """time"":") + 7))
    'MsgBox "约" & Format(dis / 1000, "0.00公里/") & Format(mtime / 86400, "hh小时nn分钟")
    Cells(i, 3) = dis / 1000
End With
Next
Application.DisplayStatusBar = True
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 15:31 , Processed in 0.038442 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表