使用 Excel VBA 循环浏览 URL 列表
Posted
技术标签:
【中文标题】使用 Excel VBA 循环浏览 URL 列表【英文标题】:Cycling Through List of URLs Using Excel VBA 【发布时间】: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 标记来表示其交付状态。循环很简单,但循环浏览网页对我来说是新的。无论我进行什么更改,代码都会向我抛出错误。
IE 对象打开,但 Excel 遇到错误,代码停止运行。
【问题讨论】:
也许你应该发布你的错误,我们可以从那开始 @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 - 请针对您的问题发布一个新问题,这样可以更好地为您提供帮助。
【参考方案1】:
好的,我将从正确的语法开始,让您的代码继续运行,我将编辑此答案以获取更多代码
Sub Sample()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = True
Dim wsSheet As Worksheet, Rows As Long, links As Variant, IE As Object, link As Variant
Set wb = ThisWorkbook
Set wsSheet = wb.Sheets("Sheet1")
Set IE = New InternetExplorer
Rows = wsSheet.Cells(wsSheet.Rows.Count, "A").End(xlUp).Row
links = wsSheet.Range("A1:A" & Rows)
With IE
.Visible = True
For Each link In links
.navigate (link)
While .Busy Or .ReadyState <> 4: DoEvents: Wend
MsgBox .Document.body.innerText
Next link
End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
这会让你循环我认为你有一些一般的语法问题,你可以看到我的代码中的差异,以便在每个链接必须是对象或变体类型和我设置为变体的链接中循环假设它将默认为字符串
【讨论】:
感谢您帮助启动循环。我现在必须配置的只是 If 语句,以便将正确的信息拉入 D 列。循环效果很好 - 当你试图突破宏时它会有点烦人,因为有这么多信息通过消息框飞来飞去哈哈 没问题!尝试在循环之外添加一个可迭代整数,例如 i 设置为零并转到 i = i + 1 ,然后设置 wsSheet.Range("B" & i).Value = .Document.body.innerText 而不是 msgbox ,你可以在 excel 列中查看它或只需按 ESC 我做了并对其进行了调整,以便它显示我需要的每个订单号的信息。它就像一个魅力。 @Scott Holtzman 感谢您提供有关循环的提示!我的代码中只有基本的For Each TDelement In elems If TDelement.className = "s-result-item celwidget" And InStr(TDelement.innerHTML, AAws.Range("B" & x).Value) Then AAws.Range("J" & x).Value = TDelement.ID i = i + 1 End If Next
,但我没有意识到我必须将它指定到那种程度哈哈。以上是关于使用 Excel VBA 循环浏览 URL 列表的主要内容,如果未能解决你的问题,请参考以下文章
使用vba将一列日期循环到url行中以进行Web查询并从xe.com/currencytables中检索汇率表