想從this page如何使用VBA獲取來自IMG的ALT值
獲取價格表爲此,我有以下代碼:
一切工作正常只的的IMG ALT標籤最後一列沒有顯示在。這段代碼非常好,只有最後一列的類沒有被抓取。
Sub TableExample()
Dim IE As Object
Dim doc As Object
Dim strURL As String
If Range("B2").Value <> "NA" Then
strURL = "http://www.idealo.co.uk/compare/351072/canon-500d-77mm-close-up-lens.html"
Set IE = CreateObject("InternetExplorer.Application")
With IE
'.Visible = True
.navigate strURL
Do Until .readyState = 4: DoEvents: Loop
Do While .Busy: DoEvents: Loop
Set doc = IE.document
GetAllTables doc
.Quit
End With
End If
End Sub
Sub GetAllTables(doc As Object)
Dim ws As Worksheet
Dim rng As Range
Dim tbl As Object
Dim rw As Object
Dim cl As Object
Dim tabno As Long
Dim nextrow As Long
Dim i As Long
Set ws = Sheets("Sheet1")
For Each tbl In doc.getElementsByTagName("TABLE")
tabno = tabno + 1
nextrow = nextrow + 1
Set rng = ws.Range("B" & nextrow)
rng.Offset(, -1) = "Table " & tabno
On Error GoTo Err1:
If tabno = 10 Then
For Each rw In tbl.Rows
colno = 6
For Each cl In rw.Cells
If colno = 6 And nextrow > 10 Then
Set classColl = doc.getElementsByClassName("cellborder")
Set imgTgt = classColl(nextrow - 11).getElementsByTagName("img")
rng.Value = imgTgt(0).getAttribute("alt")
Else
rng.Value = cl.innerText
End If
Set rng = rng.Offset(, 1)
i = i + 1
colno = colno + 1
Next cl
nextrow = nextrow + 1
Set rng = rng.Offset(1, -i)
' Call trim1
i = 0
Next rw
Exit Sub
End If
Next tbl
Err1:
'Call comp
' ws.Cells.ClearFormats
End Sub
它是'getElement ** s ByClassName',所以你的'classColl'應該是一個集合或類似的東西,所以你可能想嘗試'classColl(0).getElementsByTagName(「img」)'。 – Passerby
我做到了,但結果是一樣的...沒有變化 – user3305327
當你在這裏發佈它時,請讓你的代碼易讀。如果你沒有正確縮進和寫入,很難弄清楚你的代碼是怎麼回事。 :)我這次爲你編輯它。 :) – Manhattan