2016-01-13 99 views
1

我现在对Excel更加熟悉,但有一点仍然让我困惑 - 如何通过循环遍历URL。我目前的难题是我有这个包的URL列表,需要使用它的HTML获取每个页面上每个包的状态。我目前在列表中有周期为:使用Excel VBA循环访问URL列表

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列表enter image description here

我的目标在这里:

  • 循环通过每个URL(以IE插件的网址,并保持不会打开新标签)
  • 获取HTML元素中每个URL的项目状态
  • FedEx:Delivered(td class =“status”)
  • UPS:交付(ID = “tt_spStatus”)
  • USPS:在USPS基金(类=“信息文本第一)
  • 完成循环到达并保存为CSV如果可能的话(我已经做到了,所以我只是发布了我遇到问题的代码部分)。

我的理解是,我必须为每个不同的url编写不同的if语句,因为它们都具有不同的HTML标记以用于其递送状态。循环很简单,但循环浏览网页对我来说是新的。无论我做出什么样的改变,代码一直在向我抛出错误。

IE对象打开,但然后Excel命中错误,代码停止运行。 enter image description here

+0

也许你应该发布你的错误和我们可以从那开始 –

+0

@TylerCowan我已经把错误的图片t帽子发生。 – Tak

+0

@Nathan_Sav我知道如何引用HTML和做网页抓取就好 - 它只是循环访问URL列表并引用每个我不确定的特定元素。 – Tak

回答

1

OK生病开始用正确的语法,你得到你的代码去,我会编辑这个答案进一步代码

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 

这将让你循环,我认为你有一些通用的语法问题,这你可以看到我的代码中的差异,为了循环通过在每个链接必须是类型的对象或变体和我设置为变体的链接假设它将默认为字符串

+0

感谢您帮助启动循环。我现在必须配置的是If语句,以便将正确的信息提交到D列。循环运行效果很好 - 当您尝试突破宏时会略微恼人,因为有那么多通过消息框飞行的信息haha – Tak

+1

没问题!尝试在设置为零的循环外添加一个可迭代的整数,然后转到i = i + 1,然后设置wsSheet.Range(“B”&i).Value = .Document.body.innerText而不是msgbox,您可以在excel列中查看它,或者只需按ESC –

+0

我做了并调整了它,以便它将显示我需要的每个订单号的信息。它像一个魅力。 @Scott Holtzman谢谢你的循环提示!如果TDelement.className =“s-result-item celwidget”和InStr(TDelement.innerHTML,AAws.Range(“B”&x).Value),那么我只有基本的'For Each TDelement In elems AAws.Range (“J”&x).Value = TDelement.ID i = i + 1 End If Next' 在我的代码中,但我没有意识到我必须指定它到那个程度哈哈。 – Tak