ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何网页查找电子箱号对应的相应信息并另表返回?

如何网页查找电子箱号对应的相应信息并另表返回?

作者:绿色风 分类: 时间:2022-08-17 浏览:99
楼主
liuguansky
Q:如何在网页中查询相应电子箱单号对应的信息,并在另外表中返回,一个单号对应多条信息的,分开返回.
A:用如下代码可以实现:

  1. Sub justtest()
  2.     Dim Arr, i&, GetC$, ArrGet, k&, ArrRes(), j%, m As Byte '定义变量
  3.     Arr = Range(Cells(2, 3), Cells(Rows.Count, 3).End(3)).Value '获取待处理区域,赋值予数组
  4.     With CreateObject("microsoft.xmlhttp") '创建XMLHTTP对象,用于处理网页数据
  5.         For i = 1 To UBound(Arr, 1) '循环待处理单号
  6.             If Len(Trim(Arr(i, 1))) Then '如果单号非空
  7.                 .Open "get", "http://edi.easipass.com/dataportal/query.do?ctno=&blno=" _
  8.                     & Trim(Arr(i, 1)) & "&qn=dp_cst_vsl", False '创建打开查询对应单号界面
  9.                 .setRequestHeader "If-Modified-Since", Format(Now, "[$-F800]dddd, mmmm dd, yyyy") & " GMT" '防止从滞留页面读取数据
  10.                 .send '读取
  11.                 GetC = .responsetext '返回查询结果文本
  12.                 k = k + 1 '初始化变量
  13.                 ReDim Preserve ArrRes(1 To 9, 1 To k) '定义动态数组,用于存储返回结果
  14.                 If InStr(1, GetC, "INFO:查不到您所需要的电子装箱单") Then '判断箱号是否存在,如果不存在,则进行提示
  15.                     ArrRes(1, k) = Arr(i, 1)
  16.                     ArrRes(2, k) = "INFO:查不到您所需要的电子装箱单"
  17.                     Else '如果存在,则进行下面处理
  18.                     With CreateObject("vbscript.regexp") '创建正则对象,对文本进行处理
  19.                         .Global = True
  20.                         .MultiLine = True
  21.                         .Pattern = "(<.*?>)"
  22.                         GetC = Replace((.Replace(GetC, "")), "&nbsp;", "") '依待提取数据去除多余项目,留下待处理字符串
  23.                         GetC = Mid(GetC, InStr(1, GetC, "COSTRP号") + 7)
  24.                         GetC = Left(GetC, InStr(1, GetC, "Copyright") - 1)
  25.                         .Pattern = "\s+"
  26.                         GetC = .Replace(GetC, " ")
  27.                         ArrGet = Split(GetC) '生成提取数据的数组
  28.                         k = k - 1
  29.                         For j = 1 To UBound(ArrGet) - 1 Step 8 '对结果数组进行赋值
  30.                             k = k + 1
  31.                             ReDim Preserve ArrRes(1 To 9, 1 To k)
  32.                             ArrRes(1, k) = Arr(i, 1)
  33.                             For m = 1 To 8
  34.                                 ArrRes(1 + m, k) = ArrGet(j + m - 1)
  35.                             Next m
  36.                         Next j
  37.                     End With
  38.                 End If
  39.             End If
  40.         Next i
  41.         With Sheet2
  42.             .Range("a2:i" & .Rows.Count).ClearContents '清除待返回区域内容
  43.             .Range("a2").Resize(k, 9) = Application.Transpose(ArrRes) '赋值
  44.         End With
  45.     End With
  46. End Sub



2楼
eliane_lei
进来学习,谢谢分享
3楼
初学者2012
谢谢分享**!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap