ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求代码优化

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-10 13:27 | 显示全部楼层 |阅读模式
代码的功能就是查快递的发出地和流转现状,群里相关的帖子都看过了,借鉴了非常多,拼凑出了我想要的代码,但是运行一两百个就不行了,希望能优化。
  1. Function kkk()
  2. Dim sHTML As String '查询返回的HTML值
  3. Dim sRes As String
  4. Dim iTimeOut As Integer
  5. Dim iTimeOutMax As Integer
  6. Dim aFile As Variant

  7. Dim arrLine As Variant
  8. Dim sLine As String '每行跟踪记录

  9. Dim arrText As Variant
  10. Dim sText As String '在每行跟踪记录中用于分段获取时间和日志

  11. Dim iCnt As Integer '循环变量

  12. Dim iRow As Integer '写入行号
  13. Dim i As Integer
  14. Dim sTime As String '每条跟踪记录中对应的时间
  15. Dim sLog As String '每条跟踪记录中对应的日志

  16. Dim sNum As String
  17. Dim sTypeSelect As String
  18. Dim sType As String
  19. Dim sURL As String
  20. Dim iTimeCol As Integer
  21. Dim iLogCol As Integer


  22. On Error Resume Next
  23. Range("f2:i1000").ClearContents '先清除旧结果
  24. i = 2
  25. Do While Cells(i, 1) <> ""
  26.     iRow = 2 '从第2行开始写结果
  27.     iTimeCol = 4  '写时间的列号
  28.     iLogCol = 5   '写跟踪记录的列号
  29.     iTimeOutMax = 8000 '查询超时设置
  30.    
  31.     sNum = Cells(i, 2).Value '快递单号
  32.     sTypeSelect = Cells(i, 1).Value '快递公司选择
  33.     '下面是将快递公司的中文名转换成对应的代码(应该都是汉语全拼)可以加上其它的快递公司
  34.     If sTypeSelect = "中通" Then
  35.         sType = "zhongtong"
  36.     ElseIf sTypeSelect = "申通" Then
  37.         sType = "shentong"
  38.     ElseIf sTypeSelect = "圆通" Then
  39.         sType = "yuantong"
  40.     ElseIf sTypeSelect = "顺丰" Then
  41.         sType = "shunfeng"
  42.     ElseIf sTypeSelect = "EMS" Then
  43.         sType = "ems"
  44.     ElseIf sTypeSelect = "百世" Then
  45.         sType = "huitongkuaidi"
  46.     ElseIf sTypeSelect = "宅急送" Then
  47.         sType = "zhaijisong"
  48.     ElseIf sTypeSelect = "韵达" Then
  49.         sType = "yunda"

  50.     Else
  51.         Cells(i, 4).Value = "'该快递公司无法识别:" & sTypeSelect
  52.         Exit Function
  53.     End If
  54.    
  55.     '拼接URL地址
  56.     sURL = "http://www.kuaidi100.com/query?type=" & sType & "&postid=" & sNum  '借用快递100的查询接口

  57. Dim ET As New InternetExplorer
  58.     ET.Visible = False '隐藏IE
  59.     ET.Navigate sURL  '输入网址
  60.     iTimeOut = 1
  61.     Do Until ET.ReadyState = 4 Or iTimeOut > iTimeOutMax '等待页面加载完毕
  62.       iTimeOut = iTimeOut + 1
  63.     Loop
  64.     sHTML = ET.Document.body.innerHTML
  65. Set ET = Nothing

  66.     '以下开始解析返回的查询结果
  67.     If iTimeOut >= iTimeOutMax Then
  68.       Cells(iRow, iLogCol).Value = "查询超时"
  69.     ElseIf sHTML = "" Then
  70.       Cells(iRow, iLogCol).Value = "查询失败!"
  71.     Else
  72.         aFile = Split(sHTML, """data"":[{")
  73.         If UBound(aFile) >= 1 Then
  74.             sLine = aFile(1)
  75.             arrLine = Split(sLine, "},{")
  76.             For iCnt = 0 To UBound(arrLine)
  77.                 sText = arrLine(iCnt)
  78.                 arrText = Split(sText, """:""")
  79.                 If UBound(arrText) >= 2 Then
  80.                     sTime = arrText(1)
  81.                     sLog = arrText(3)
  82.                     sTime = Rep(sTime)
  83.                     sLog = Rep(sLog)
  84.                     Cells(iRow, iTimeCol).Value = "'" & sTime
  85.                     Cells(iRow, iLogCol).Value = "'" & sLog
  86.                     iRow = iRow + 1
  87.                 End If
  88.             Next
  89.             sRes = aFile(0)
  90.         Else
  91.             aFile = Split(sHTML, ":")
  92.             sRes = aFile(2)
  93.             Cells(iRow, iLogCol).Value = Rep(sRes)
  94.         End If
  95.         Cells(i, 6) = Cells(iRow - 1, iTimeCol)
  96.         Cells(i, 7) = Cells(iRow - 1, iLogCol)
  97.         Cells(i, 8) = Cells(2, iTimeCol)
  98.         Cells(i, 9) = Cells(2, iLogCol)
  99.     End If

  100. i = i + 1
  101. Loop
  102. End Function

  103. '替换掉无用的字符串
  104. Function Rep(str As String) As String
  105. Dim sRes As String
  106.     sRes = Replace(str, """", "")
  107.     sRes = Replace(sRes, "{", "")
  108.     sRes = Replace(sRes, "}", "")
  109.     sRes = Replace(sRes, ",context", "")
  110.     sRes = Replace(sRes, ",ftime", "")
  111.     sRes = Replace(sRes, ",location", "")
  112.     Rep = sRes
  113. End Function
复制代码



Desktop.rar

26.58 KB, 下载次数: 1

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-12 16:05 | 显示全部楼层
就这么沉了吗?有人能帮忙解决下吗?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-8 23:59 , Processed in 0.019490 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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