2016-10-10 38 views
-1

我做了一個代碼,它將使用A列中的單元格並在網站中搜索並拉下我需要的某個表。但是,有時候我得到一個錯誤(因爲名稱是錯誤的或其他),我希望代碼跳過它並繼續前進。On Error - 使用不會中斷的循環,不管是否出現錯誤

示例:如果搜索的A3是一個問題,並且我想要的代碼搜索A4等

錯誤是運行時錯誤「91」:對象變量或帶塊變量未設置

代碼:

Sub SearchBot() 

Dim objIE As InternetExplorer 
Dim aEle As HTMLLinkElement 
Dim y As Integer 
Dim result As String 
Dim tbl As Object, obj_tbl As Object 
Dim lastRow As Long 
Dim start_time As Date 
Dim end_time As Date 
Dim cookie As String 
Dim result_cookie As String 

Set objIE = New InternetExplorer 

objIE.Visible = True 

objIE.navigate "https://website.com" 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

For i = 2 To 1829 


objIE.document.getElementById("SearchTopBar").Value = _ 
Sheets("Sheet2").Range("A" & i).Value ' 

Set oNode = objIE.document.getElementsByClassName("iPadHack tmbsearchright" 
(0) 
oNode.Click 

On Error GoTo ErrorHandler 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

Dim tblEle As Object 
Set tblEle = objIE.document.getElementsByClassName("cTblListBody")(5) 

Sheets("Sheet2").Range("B" & i).Value = tblEle.innerText 
Debug.Print tblEle.innerText 

Next 

ErrorHandler 

Resume Next 

objIE.Quit 
End Sub 
+0

當您逐句通過代碼時,它是否實際觸及ErrorHandler? –

+0

它不是。它不會讓我啓動代碼說:編譯錯誤:子或功能未定義 – Sameer

+1

我懷疑它可能是使用IE瀏覽器打開的參考。 第3個點的點https://msdn.microsoft.com/en-us/library/aa264506%28v=vs.60%29.aspx?f=255&MSPPError=-2147217396 –

回答

0

這可以引發錯誤:

Set tblEle = objIE.document.getElementsByClassName("cTblListBody")(5) 

例如,如果與類名「cTblListBody」無匹配元件被發現,或如果存在少於那些項目中的6發現,等。在這種情況下,你的錯誤處理程序將接管,並且tblEle將是Nothing

本聲明Resume Next將嘗試恢復在下一行(從中引發錯誤的行)執行,如果tblEle尚未分配這些線路當然會失敗(即Is Nothing)。

Sheets("Sheet2").Range("B" & i).Value = tblEle.innerText 
Debug.Print tblEle.innerText 

你不想Resume Next,要恢復在循環的下一次迭代,這樣你就可以用另一個標籤做到這一點:

On Error GoTo ErrorHandler 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

    Dim tblEle As Object 
    Set tblEle = objIE.document.getElementsByClassName("cTblListBody")(5) 

    Sheets("Sheet2").Range("B" & i).Value = tblEle.innerText 
    Debug.Print tblEle.innerText 

NextItem: 
Next 

ErrorHandler 

Resume NextItem 

,或者更恰當地(恕我直言) ,捕獲該錯誤:

'## THIS LINE IS NOT NEEDED: 
' On Error GoTo ErrorHandler 

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop 

    Dim tblEle As Object 
    Set tblEle = objIE.document.getElementsByClassName("cTblListBody") 
    If Not tblEle Is Nothing Then 
     If tblEle.length > 5 Then 
      Sheets("Sheet2").Range("B" & i).Value = tblEle(5).innerText 
      Debug.Print tblEle(5).innerText 
     End If 
    End If 
Next 

'## THESE ARE NOT NEEDED: 
'ErrorHandler 
'Resume NextItem 

注:此假定至少6 cTblListBody被發現,如果可能不是的情況下,可能需要額外的邏輯。

0

使用本:

Dim objIE As Object 

Set objIE = CreateObject("InternetExplorer.Application") 

    objIE.Top = 0 
    objIE.Left = 0 
    objIE.Width = 800 
    objIE.Height = 600 
    objIE.Visible = True