问题循环/variables通过HTML表格元素

我正在处理这个项目,其中涉及从Excel工作表中的URL列表跟踪个别货件的订单状态。 目前,代码能够循环遍历URL并从中提取信息,但是当我尝试将exception和variables添加到每个不同URL的循环中时,出现types不匹配的情况。 目前,为了从HTMLCollection / Table中提取HTML信息,我需要3个variables。 我想在这里做的是:

  • 循环访问每个URL(在IE中插入URL并继续前进,而无需打开新的标签)
  • 从HTML元素获取每个URL的项目状态
  • 联邦快递:交付(td class =“status”)
  • UPS:交付(id =“tt_spStatus”)
  • USPS:抵达USPS设施(class =“info-text first”)

我的代码:

Sub TrackingDeliveryStatusUpdate() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.EnableEvents = True Dim rngURL As Range Dim wb1 As Workbook, ws1 As Worksheet, ws2 As Worksheet Dim MyURL As String Dim Rows As Long, links As Variant, IE As InternetExplorer, link As Variant Dim i As Long Dim sID As String Dim rngLinks As Range, rngLink As Range Dim filterRange As Range Dim copyRange As Range 'Dim doc As Object Set wb1 = Application.Workbooks.Open("\\S51\Store51\Employee Folders\Jason\TrackingDeliveryStatus.xls") Set ws1 = wb1.Worksheets("TrackingDeliveryStatusResults") 'Set rngURL = ws1.Range("C2:C" & lastRow) 'Arr = rngURL Set IE = New InternetExplorer Rows = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row Set rngLinks = ws1.Range("C2:C" & Rows) 'Loop through each used cell in column C on sheet URLs 'For Each rngURL In Worksheets("TrackingDeliveryStatusResults").Range("C2", Worksheets("TrackingDeliveryStatusResults").Range("C" & Rows.Count).End(xlUp)) 'Set HTMLDoc = IE.Document With IE .Visible = True i = 2 For Each rngLink In rngLinks .Navigate (rngLink) While .Busy Or .ReadyState <> 4: DoEvents: Wend 'If InStr(1, URL.Value, "fedex") Then sID = "status" Dim doc As Object Set doc = IE.Document 'I know this line right below is a big mess. Not sure what to do here. If InStr(1, rngLink.Value2, "ups") Then sID = "tt_spStatus" 'If InStr(3, URL.Value, "usps") Then sID = "info-text first" ws1.Range("D" & i).Value = doc.getElementById(sID).Items(0).Value 'ws1.Range("D" & i).Value = .Document.body.innerText End If Next rngLink i = i + 1 End With Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.EnableEvents = True End Sub 

我认为这是行得通的,但显然它不涉及从Excel电子表格中引用URL。 在这里输入图像说明

您应该将LinkLinks暗为范围并更改:

 links = ws1.Range("C2:C" & Rows) 

至:

 Set Links = ws1.Range("C2:C" & Rows) 

你正在试图使一个变种等于一个不能发生的范围。 但是,一旦您将Links设置为单元格范围,那么当您循环浏览每个单元格时,请使用link.Value2引用URL。

原因不起作用是因为你有几个概念混杂在你的陈述。 我重构了代码的相关部分,并对variablestypes和名称更改提出了一些build议

 Dim rngLinks as Range, rngLink as Range Set rng Links = ws1.Range("C2:C" & Rows) For each rngLink in rngLinks 

只是因为在这里你正在循环工作表范围内的单元格。

然后For each rngLink in rngLinks语句中的For each rngLink in rngLinks里面,代码等待IE加载的语句之后。

 Dim doc as Object Set doc = .document If InStr(1, rngLink.Value2, "ups") Then sID = "tt_spStatus" ws1.Range("D" & I).Value = doc.getElementById(sID).Items(0).Value End If 

您也可以删除For Each TDelement In sID块中的For Each TDelement In sID 。 这是不需要的。