【发布时间】:2016-01-29 07:04:25
【问题描述】:
对不起,伙计们,这更像是上一个问题的更新问题...我设法弄清楚了我在单击 IE 中的“下一个结果”按钮并将其循环回来以拉出相同的数据,然后单击“下一个结果”按钮并提取相同的数据......依此类推,直到......这就是我遇到问题的地方。我在“循环直到”语句中不断收到“需要对象”错误...我尝试了许多不同的解决方法,切换到变量等,但仍然遇到错误。基本上,我只想在“下一个结果”按钮不再可用时停止循环(当没有更多数据要提取时,这显然会发生)。
这是导致问题的 VBA 部分...
Dim TDelements As IHTMLElementCollection
Dim TDelement As HTMLTableCell
Dim r As Long
Set TDelements = IE.document.getElementsByTagName("tr")
r = 0
Do
Application.Wait Now + TimeValue("00:00:03")
For Each TDelement In TDelements
If TDelement.className = "searchActivityResultsContent" Then
Sheet1.Range("E1").Offset(r, 0).Value = TDelement.ChildNodes(8).innerText
r = r + 1
ElseIf TDelement.className = "searchActivityResultsContent" Then
Sheet1.Range("E1").Offset(r, 0).Value = TDelement.ChildNodes(8).innerText
r = r + 1
End If
Next
Application.Wait Now + TimeValue("00:00:02")
Set elems = IE.document.getElementsByTagName("input")
For Each e In elems
If e.Value = "Next Results" Then
e.Click
Exit For
End If
Next e
Loop Until e.Value <> "Next Results"
Do Until Not IE.Busy And IE.readyState = 4
DoEvents
Loop
IE.Quit
这是我所指的按钮的 HTML 代码...
<table class="contentTable" align="center">
<tr class="contentTableTR">
<form name="scrollResultListForm" method="post" action="/scrollTransactionsList.do" onsubmit="return isBusy();">
<input type="submit" name="action" value="Next Results" onmouseover="showComment(event,'Display next results')" onmouseout="hideComment()" class="formButton">
<input type="submit" name="action" value="Last Page" onmouseover="showComment(event,'Goto last result page')" onmouseout="hideComment()" class="formButton">
</form>
</tr>
</table>
【问题讨论】:
-
将
until语句从循环末尾移动到循环开头的do语句,以创建Do Until循环。 -
@SilentRevolution 在第一个
Doe将是nothing,如何进入循环?谁支持这个?抱歉,那是错误的:/ -
你不使用
option explicit吗?e未定义 -
添加一个
On Error Resume Next将强制循环开始。 @DirkReichel,要有创意。 -
不幸的是,将Until语句移到开头的Do语句以相同的结果结束。