【发布时间】:2016-01-13 15:45:10
【问题描述】:
我现在对 Excel 更加熟悉了,但有一件事仍然让我感到困惑——如何在循环中循环浏览 URL。我目前的难题是我有这个包的 URL 列表,并且需要使用其 HTML 获取每个页面上每个包的状态。我目前必须在列表中循环的是:
Sub TrackingDeliveryStatusResults()
Dim IE As Object
Dim URL As Range
Dim wb1 As Workbook, ws1 As Worksheet
Dim filterRange As Range
Dim copyRange As Range
Dim lastRow As Long
Set wb1 = Application.Workbooks.Open("\\S51\******\Folders\******\TrackingDeliveryStatus.xls")
Set ws1 = wb1.Worksheets("TrackingDeliveryStatusResults")
Set IE = New InternetExplorer
With IE
.Visible = True
For Each URL In Range("C2:C & lastRow")
.Navigate URL.Value
While .Busy Or .ReadyState <> 4: DoEvents: Wend
MsgBox .Document.body.innerText
Next
End With
End Sub
我的目标是:
- 循环浏览每个 URL(在 IE 中插入 URL 并在不打开新标签的情况下继续运行)
- 从 HTML 元素中获取每个 URL 的项目状态
- FedEx:已送达 (td class="status")
- UPS:已送达 (id="tt_spStatus")
- USPS:到达 USPS 设施(class=“信息文本优先)
- 尽可能完成循环并保存为 csv(我已经这样做了,所以我只是发布我遇到问题的代码部分)。
我的理解是,我必须为每个不同的 url 编写不同的 if 语句,因为它们都有不同的 HTML 标记来表示其交付状态。循环很简单,但循环浏览网页对我来说是新的。无论我进行什么更改,代码都会向我抛出错误。
【问题讨论】:
-
也许你应该发布你的错误,我们可以从那开始
-
@TylerCowan 我放了一张发生错误的照片。
-
@Tak 以及对象定义错误突出显示的内容
-
如果我没看错,
If Instr(1,URL.Value,"fedex") Then sID = "status"怎么样。然后效仿 UPS 和 USPS 案例。然后使用sID变量搜索或引用正确的元素。您可能还需要根据每个页面的类型来定义您使用的元素。此外,对于您的错误,您需要使用工作表限定Range ...。所以Worksheets("Sheet1").Range("C2:C & lastRow)...将Sheet1更改为您的工作表名称。由于您的With块,VBA 试图将Range属性分配给 IE 对象,这是不可能的。 -
@Tak - 请针对您的问题发布一个新问题,这样可以更好地为您提供帮助。