【发布时间】:2015-04-13 17:27:48
【问题描述】:
我在使用 VBA 中的 ON ERROR GOTO 函数时遇到了一些问题。实际上,我不确定我想要的是否真的可能。
我正在不同网站收集一些信息,完整代码在这里
Dim IE As InternetExplorer
Dim html As HTMLDocument
Set IE = New InternetExplorer
Dim Ano As Long
Dim offsetCount As Long
Dim URL As String
Dim NUMERO As String
Ano = 2012
offsetCount = 2
Do While Ano >= 2005
Range("E1").Value = Ano
Range("D2").Select
Do While ActiveCell.Row <= 5571
URL = ActiveCell.Text
TryEnterSite:
IE.navigate URL
Do While IE.ReadyState <> 4
DoEvents
Loop
Set html = IE.document
On Error GoTo TryEnterSite
NUMERO = html.getElementById("conteudo_meio").getElementsByTagName("tr")(1).getElementsByTagName("td")(1).innerText
If IsNumeric(NUMERO) Then
ActiveCell.Offset(0, offsetCount) = Str(NUMERO)
Else
ActiveCell.Offset(0, offsetCount) = NUMERO
End If
ActiveCell.Offset(1, 0).Select
Loop
offsetCount = offsetCount + 1
Ano = Ano - 1
Loop
问题是在 IE 导航到 URL 的那一行(IE.navigate URL),有时网站就是进不去(内部问题)。因此 html.getelement 找不到元素并给我“找不到元素”并且宏停止。我得到的错误是 RUN-TIME ERROR 91: OBJECT VARIABLE OR WITH BLOCK VARIABLE NOT SET。
我想要的是:当 VBA 找不到对象时,它应该回到 IE.navigate 行。可能吗?我该怎么做呢?我尝试了几天来寻找一些东西,但我没有成功。
【问题讨论】:
-
NUMERO = html.getElementById("conteudo_meio").getElementsByTagName("tr")(1).getElementsByTagName("td")(1).innerText我不认为这条线实际上是正确的 -
@Jeanno 只要 HTML 元素存在,它就可以工作。
标签: vba internet-explorer error-handling web-scraping