我的代码从网站上获取信息,但是在某些情况下,带有信息的HTML代码不存在,所以我使用On Error
来处理它。
正如您将在代码中看到的那样,我正在遍历列表并获取每一行的信息(其中约700条)。首先,错误发生在第10行,然后我添加了On Error GoTo 0
。之后,它开始被扔到第13行。
我的配置已经设置为“发生意外错误时中断”。
运行时错误号为:
91: Object variable or With block variable not set.
它发生在“** **”之间的界线
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
没有返回任何元素,则可以测试length
属性,该属性将为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
关于vba - On错误不适用于IE自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42529997/