ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 网页批量获取快递单信息:1.有个地方总获取不到?2.运行太慢,请教,万谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-3-11 23:14 | 显示全部楼层
找了个unicode转换的,测试下也可以了,楼主如果对xmlhttp感兴趣的话,就再改成你需要的吧。
  1. Sub chaxun()
  2. Dim xmlhttp As Object

  3. Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
  4. xmlhttp.Open "POST", "http://222.73.105.202/kjcx/ajax.php", False
  5. xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  6. xmlhttp.Send "lb=tmfp&txm=1000080690768"
  7. Do Until xmlhttp.ReadyState = 4
  8. DoEvents
  9. Loop

  10. If xmlhttp.Status = 200 Then
  11. Debug.Print xmlhttp.responsetext
  12. Transfer (xmlhttp.responsetext)
  13. Else
  14.   reportErr (xmlhttp.Status)
  15. End If

  16. End Sub

  17. Sub reportErr(lStatus As Integer)
  18.         Select Case lStatus
  19.             Case 400
  20.                 MsgBox "Bad Request", vbCritical, "连接错误"
  21.             Case 401
  22.                 MsgBox "Unauthorized", vbCritical, "连接错误"
  23.             Case 402
  24.                 MsgBox "Payment Required", vbCritical, "连接错误"
  25.             Case 403
  26.                 MsgBox "Forbidden", vbCritical, "连接错误"
  27.             Case 404
  28.                 MsgBox "Not Found", vbCritical, "连接错误"
  29.             Case 407
  30.               MsgBox "Proxy Authentication Required", vbCritical, "连接错误"
  31.             Case 408
  32.                 MsgBox "Request Timeout", vbCritical, "连接错误"
  33.             Case 503
  34.                 MsgBox "Service Unavailable", vbCritical, "连接错误"
  35.             Case Else
  36.               MsgBox "Can not reach by other reason", vbCritical, "连接错误"
  37.         End Select
  38. End Sub

  39. Sub Transfer(str1 As String)
  40.     Dim i%, y%, arr1(), arr2(), ireg As Object, imch As Object, mch As Object
  41.     Set ireg = CreateObject("vbscript.regexp")
  42.     ireg.Global = True
  43.     ireg.Pattern = "\\u\w{4}"
  44.     Set imch = ireg.Execute(str1)
  45.     For Each mch In imch
  46.         y = y + 1
  47.         ReDim Preserve arr1(1 To y)
  48.         ReDim Preserve arr2(1 To y)
  49.         arr1(y) = ChrW(CLng(Replace(mch.Value, "\u", "&h")))
  50.         arr2(y) = mch.Value
  51.     Next
  52.     For i = 1 To UBound(arr1)
  53.         str1 = Replace(str1, arr2(i), arr1(i))
  54.     Next
  55.     Debug.Print str1
  56.     Set ireg = Nothing
  57. End Sub


复制代码

[ 本帖最后由 xmyjk 于 2011-3-11 23:19 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-3-11 23:24 | 显示全部楼层
原得到代码:
{"state":"1","wd":"<span class='wltz'>\u5c71\u4e1c\u804a\u57ce\u516c\u53f8(252000)<\/span>\u5206\u914d\u65f6\u95f42010-07-07","fb":"<span class='wltz'>\u5c71\u4e1c\u804a\u57ce\u516c\u53f8\u8398\u53bf\u5206\u90e8(\u5206\u90e8)(252400)<\/span>\u5206\u914d\u65f6\u95f42010-07-13"}

运行后得:
{"state":"1","wd":"<span class='wltz'>山东聊城公司(252000)<\/span>分配时间2010-07-07","fb":"<span class='wltz'>山东聊城公司莘县分部(分部)(252400)<\/span>分配时间2010-07-13"}

TA的精华主题

TA的得分主题

发表于 2011-3-12 02:29 | 显示全部楼层

回复 12楼 xmyjk 的帖子

拜读,受教了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-12 22:08 | 显示全部楼层

回复 12楼 xmyjk 的帖子

多谢大师!能帮我做下吗,我懂得不多,我邮箱:280202351@qq.com

TA的精华主题

TA的得分主题

发表于 2011-3-12 23:21 | 显示全部楼层
仅仅针对你查不到的部分做了个工具,excel如附件
代码如下:
  1. Sub chaxun()
  2. Dim xmlhttp As Object
  3. Dim Strtrasf As String, Ydh As String
  4. Dim Nm As Integer, i As Integer

  5. On Error Resume Next
  6. Nm = Application.WorksheetFunction.CountA([A:A])
  7. For i = 1 To Nm - 1
  8. Cells(2, 2).Value = "正在查询第" & i & "个"
  9. Ydh = Cells(i + 1, 1).Value

  10. Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
  11. xmlhttp.Open "POST", "http://222.73.105.202/kjcx/ajax.php", False
  12. xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  13. xmlhttp.Send "lb=tmfp&txm=" & Ydh
  14. Do Until xmlhttp.ReadyState = 4
  15. DoEvents
  16. Loop

  17. If xmlhttp.Status = 200 Then
  18.   Strtrasf = Transfer(xmlhttp.responsetext)

  19.   Cells(i + 1, 3).Value = Replace(Replace(Split(Filter(Split(Replace(Strtrasf, "'>", "'>["), ","), "[")(0), "[")(1), "<\/span>", ""), Chr(34), "")
  20.   Cells(i + 1, 4).Value = Replace(Replace(Split(Filter(Split(Replace(Strtrasf, "'>", "'>["), ","), "[")(1), "[")(1), "<\/span>", ""), Chr(34) & "}", "")

  21. Else
  22.   reportErr (xmlhttp.Status)
  23. End If

  24. Set xmlhttp = Nothing

  25. Cells(2, 2).Value = "查询完毕!"
  26. Cells(2, 2).Value = "查询状态提示栏"

  27. Next i

  28. MsgBox "OK"

  29. End Sub

  30. Sub reportErr(lStatus As Integer)
  31.         Select Case lStatus
  32.             Case 400
  33.                 MsgBox "Bad Request", vbCritical, "连接错误"
  34.             Case 401
  35.                 MsgBox "Unauthorized", vbCritical, "连接错误"
  36.             Case 402
  37.                 MsgBox "Payment Required", vbCritical, "连接错误"
  38.             Case 403
  39.                 MsgBox "Forbidden", vbCritical, "连接错误"
  40.             Case 404
  41.                 MsgBox "Not Found", vbCritical, "连接错误"
  42.             Case 407
  43.               MsgBox "Proxy Authentication Required", vbCritical, "连接错误"
  44.             Case 408
  45.                 MsgBox "Request Timeout", vbCritical, "连接错误"
  46.             Case 503
  47.                 MsgBox "Service Unavailable", vbCritical, "连接错误"
  48.             Case Else
  49.               MsgBox "Can not reach by other reason", vbCritical, "连接错误"
  50.         End Select
  51. End Sub

  52. Function Transfer(str1 As String) As String
  53.     Dim i%, y%, arr1(), arr2(), ireg As Object, imch As Object, mch As Object
  54.     Set ireg = CreateObject("vbscript.regexp")
  55.     ireg.Global = True
  56.     ireg.Pattern = "\\u\w{4}"
  57.     Set imch = ireg.Execute(str1)
  58.     For Each mch In imch
  59.         y = y + 1
  60.         ReDim Preserve arr1(1 To y)
  61.         ReDim Preserve arr2(1 To y)
  62.         arr1(y) = ChrW(CLng(Replace(mch.Value, "\u", "&h")))
  63.         arr2(y) = mch.Value
  64.     Next
  65.     For i = 1 To UBound(arr1)
  66.         str1 = Replace(str1, arr2(i), arr1(i))
  67.     Next
  68.     Transfer = Trim(str1)
  69.     Set ireg = Nothing
  70. End Function
复制代码

6xiao运单查询.rar

12.98 KB, 下载次数: 63

6xiao运单查询

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-13 01:33 | 显示全部楼层

回复 15楼 xmyjk 的帖子

非常感谢!!!非常好用!!!

能不能帮我嵌在我的宏里面(单号从A4开始,只需要“分配给的分公司或业务员”填在F列Cells(i + 1, 6).)


Sub 单号_信息_生成()

' 重量=跟踪记录-重量记录最大值

' 目的地=跟踪记录-“派送公司”下方(到达目的地后才能显示)

' 快捷键: Ctrl+Shift+M

' =======================================================================

' 放在最前,获取Excel当前的属性状态,然后将其关闭,关闭一些Excel功能使代码运行更快
screenUpdateState = Application.ScreenUpdating
statusBarState = Application.DisplayStatusBar
calcState = Application.Calculation
eventsState = Application.EnableEvents
displayPageBreakState = ActiveSheet.DisplayPageBreaks '注:这是工作表级的设置
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False '注:这是工作表级的设置

ActiveWorkbook.Unprotect Password:="123456" '工作薄解密
ActiveSheet.Unprotect Password:="770077" '工作表解密

' =======================================================================

'【网页获取】
    Dim i As Long
    Dim sht As Worksheet
    Dim str As String
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set sht = ActiveSheet
    Sheets.Add Sheets(1)
    With sht
        For i = 4 To .Range("a3003").End(xlUp).Row
            str = "http://222.73.105.202/kjcx/cxend.php?wen=" & .Cells(i, 1)
            Sheets(1).Activate
            With ActiveSheet.QueryTables.Add(Connection:= _
                "URL;" & str, Destination:= _
                Range("A2"))
                .Name = "cxend.php?wen=1000080690768"
                .FieldNames = True
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .BackgroundQuery = True
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = False
                .SaveData = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .WebSelectionType = xlEntirePage
                .WebFormatting = xlWebFormattingNone
                .WebPreFormattedTextToColumns = True
                .WebConsecutiveDelimitersAsOne = True
                .WebSingleBlockTextImport = False
                .WebDisableDateRecognition = False
                .WebDisableRedirections = False
                .Refresh BackgroundQuery:=False
            End With
'            .Cells(i, "C") = Evaluate("MAX(F:F)")
            .Cells(i, "C") = Evaluate("index(" & Sheets(1).Name & "!F:F,match(,0/" & Sheets(1).Name & "!F1:F100,))")    '第一个非0数字
            .Cells(i, "D") = Evaluate("=INDEX(" & Sheets(1).Name & "!F:F,SMALL(IF(ISNUMBER(" & Sheets(1).Name & "!F1:F100)*(" & Sheets(1).Name & "!F1:F100>0),ROW(1:100)),2))")    '第二个非0数字
            .Cells(i, "E") = Evaluate("=INDEX(A5:A200,MATCH(""派送公司"",A5:A200,)+1)") '目的地
            .Cells(i, "H") = Evaluate("A16") '开始时间
            .Cells(i, "I") = Evaluate("C16") '开始记录
            .Cells(i, "J") = Evaluate("INDEX(A5:A200,MATCH(""派送公司"",A5:A200,)-8)") '最后时间
            .Cells(i, "K") = Evaluate("INDEX(C5:C200,MATCH(""认领详情"",C5:C200,)-2)") '最后记录

' (这里添加 “分配给的分公司或业务员”代码)

            Sheets(1).UsedRange.Clear
        Next
    End With
    Sheets(1).Delete
    sht.Activate
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-27 16:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-12 07:34 , Processed in 0.053197 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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