需要从网页上的表中收集数据,某些表格单元格中有图像。 代码是将数据复制到Excel,如果单元格有图像,则获取其src链接而不是图像。下面是代码,但它不起作用,我不知道如何检测单元格中是否有图像,并将其src链接添加到Excel单元格。
Sub extractData()
Dim IE As Object, obj As Object
Dim myYear As String
Dim r As Integer, c As Integer, t As Integer
Dim elemCollection As Object
Set IE = CreateObject("InternetExplorer.Application")
myYear = InputBox("Enter year")
With IE
.Visible = True
.navigate ("url")
While IE.ReadyState <> 4
DoEvents
Wend
For Each obj In IE.Document.All.Item("Year").Options
If obj.innerText = myYear Then
obj.Selected = True
End If
Next obj
IE.Document.getElementsByName("btn_search").Item.Click
Do While IE.busy: DoEvents: Loop
ThisWorkbook.Sheets("Sheet1").Range("A1:K2000").ClearContents
Set elemCollection = IE.Document.getElementsByTagName("TABLE")
For t = 0 To (elemCollection.Length - 9)
For r = 0 To (elemCollection(t).Rows.Length - 1)
For c = 0 To (elemCollection(t).Rows(r).Cells.Length - 1)
If elemCollection(t).Rows(r).Cells(c).innerText = "" Then
ThisWorkbook.Worksheets(1).Cells(r + 1, c + 1) = elemCollection(t).Rows(r).Cells(c).getAttribute("src")
Exit For
End If
Next
ThisWorkbook.Worksheets(1).Cells(r + 1, c + 1) = elemCollection(t).Rows(r).Cells(c).innerText
Next c
Next r
Next t
End With
Set IE = Nothing
End Sub
答案 0 :(得分:0)
首先,向上看HTML Document Object Model。有很多关于如何使用JavaScript来使用DOM的教程,而VBA是真正相似的(因为DOM不会根据语言而改变,VBA与VBScript非常密切相关,类似于JavaScript)。其次,如果出现错误但单击“调试”按钮时没有突出显示任何行,请使用F8键逐行执行代码。这将让您找出错误发生的位置。第三,添加对Microsoft HTML Object Library
的引用,以便您可以使用Intellisense进行代码提示。
在没有看到HTML源代码的情况下提供实际解决方案很难,所以我会给出一些指示:
使用IE.Document.Body.getElementsByTagName("TABLE")
(注意添加BODY
以缩小范围)以获取页面上每个表的集合。通过引用HTML Objects Lib,您可以执行以下操作:
Dim oTable As HTMLTable
Dim oCell As HTMLTableCell
Dim oImg As HTMLImage
Dim strSrc As String
For Each oCell In oTable.Cells
strSrc = ""
On Error Resume Next
Set oImg = oCell.getElementsByTagName("img")
strSrc = oImg.Source
On Error GoTo 0
If strSrc <> "" Then Debug.Print strSrc
Next
这应该(我没有测试)循环遍历表中的每个单元格并尝试获取img元素。如果它失败了,没有大问题,只需继续下一个单元格即可。如果要在使用后使用后期绑定,请删除HTML Obj Lib引用,然后将所有内容作为对象进行调暗。例如:
Dim oTable As Object 'HTMLTable
Dim oCell As Object 'HTMLTableCell
Dim oImg As Object 'HTMLImage
Dim strSrc As String