在错误不与IE自动化工作

我的代码是从一个网站获取信息,但在某些情况下,HTML代码与信息只是不存在,所以我使用On Error来处理它。

正如你将在代码中看到的,我正在遍历一个列表并获取每一行的信息(其中约700个)。 起初,错误发生在第10行,然后我添加了On Error GoTo 0 。 之后,它开始被扔在第13行。

我的configuration已经设置为断开Unhandeled错误

运行时错误号是:

91:对象variables或未设置块variables。

它发生在“** **”

 Sub GetData_DK() Dim IE As New InternetExplorer Dim URL As String Dim doc As HTMLDocument 'variable for document or data which need to be extracted out of webpage Dim onl As String Dim sto As String Dim pri As String FinalRow = tme.Cells(Rows.Count, "G").End(xlUp).Row Dim hyper As Workbook Set hyper = Workbooks.Open("path") FinalRowH = hyper.Sheets("tme").Cells(Rows.Count, "A").End(xlUp).Row ThisWorkbook.Activate For a = 5 To FinalRow onl = "" sto = "" pri = "" For b = 5 To FinalRowH If (ThisWorkbook.Sheets("tme").Cells(a, 7).Value = hyper.Sheets("tme").Cells(b, 1).Value) Then URL = hyper.Sheets("tme").Cells(b, 3).Value Exit For End If Next b IE.navigate URL IE.Visible = True Do If IE.readyState = READYSTATE_COMPLETE Then If IE.document.readyState = "complete" Then Exit Do End If Application.Wait DateAdd("s", 1, Now) Loop 'Application.Wait (Now() + TimeValue("00:00:006")) ' For internal page refresh or loading Set doc = IE.document On Error Resume Next 'gets HTLM class containing the value **onl = CStr(doc.getElementsByClassName("items-in-stock align-left")(0).innerText)** On Error GoTo 0 If (onl = Chr(160) Or onl = " " Or onl = " " Or onl = "" Or onl = vbNullString Or Left(onl, 9) = "Forventet") Then Cells(a, 8).Value = 0 Else Cells(a, 8).Value = 1 End If On Error GoTo price 'repeats the process for stores sto = CStr(doc.getElementsByClassName("open-cas-tab")(0).innerText) sto = Left(sto, InStr(sto, " ") - 1) Cells(a, 9).Value = sto price: On Error GoTo 0 On Error Resume Next 'repeats the process for price pri = CInt(CStr(doc.getElementsByClassName("product-price-container")(0).innerText)) Cells(a, 10).Value = pri On Error GoTo 0 Next a End Sub 

请让我知道我做错了什么(:

如果没有使用getElementsByClassName返回元素,则可以testinglength属性,它将为0.如果尝试访问第0个元素时尝试跳过生成的错误,这样做更可取,因为您认为会得到肯定的结果。

所以你可以试试这个:

 Set doc = IE.document Dim objElements As Object Set objElements = doc.getElementsByClassName("items-in-stock align-left") If objElements.length > 0 Then ' some elements are returned - get the text from the first one onl = CStr(objElements(0).innerText) Else ' nothing returned - lets handle it gracefully with no error MsgBox "No elements with that class!" '... prepare to exit End If ' do stuff with onl