【发布时间】:2020-02-23 04:45:01
【问题描述】:
我遇到了编码问题。我使用excel VBA从网页中提取数据到excel。网页是https://proptx.midland.com.hk/utx/index.jsp?est_id=E12837&lang=en 单击“所有事务”,它会在第一个表的底部显示第二个表。我想从底部表格(不是顶部表格)中提取数据。
代码如下:
Sub PropertyTransactions()
Dim ieObj As InternetExplorer
Dim htmlEle As IHTMLElement
Dim i As Integer
i = 1
Set ieObj = New InternetExplorer
ieObj.Visible = True
ieObj.navigate "https://proptx.midland.com.hk/utx/index.jsp?est_id=E12837&lang=en"
Application.Wait Now + TimeValue("00:00:05")
For Each htmlEle In ieObj.document.getElementsByClassName("tablesorter")(0).getElementsByTagName("tr")
Set htmlEle = ActiveDocument.all.tags("head").Item(0)
With ActiveSheet
.Range("A" & i).Value = htmlEle.Children(0).textContent
.Range("B" & i).Value = htmlEle.Children(1).textContent
.Range("C" & i).Value = htmlEle.Children(2).textContent
.Range("D" & i).Value = htmlEle.Children(3).textContent
.Range("E" & i).Value = htmlEle.Children(4).textContent
.Range("F" & i).Value = htmlEle.Children(5).textContent
.Range("G" & i).Value = htmlEle.Children(6).textContent
.Range("H" & i).Value = htmlEle.Children(7).textContent
.Range("I" & i).Value = htmlEle.Children(8).textContent
.Range("J" & i).Value = htmlEle.Children(9).textContent
End With
i = i + 1
Next htmlEle
End Sub
但是,这一行有一个错误:For Each htmlEle In ieObj.document.getElementsByClassName("tablesorter")(0).getElementsByTagName("tr")
它显示运行时错误 91:对象变量或未设置块变量。我该如何解决?非常感谢!
【问题讨论】:
-
很可能,在该行执行时页面还没有完成加载。在继续您的代码之前,您需要明确检查这一点。此外(与您的错误无关)下一行
Set htmlEle = ActiveDocument.all.tags("head").Item(0)可能应该被删除。您通常不想在循环中修改循环对象变量。
标签: html excel vba web-scraping