vba - On错误不适用于IE自动化

标签 vba excel internet-explorer error-handling

我的代码从网站上获取信息,但是在某些情况下,带有信息的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/

相关文章:

VBA 卡在 ie.busy 和 readystate 检查

vba - Excel按代号取消隐藏工作表

vba - 基于多个可选条件执行代码的有效方法 (Excel VBA)

excel - 将 Excel 作为 csv 导出到另一个位置时出现问题,vba - 窗口 "blacks out"

function - 自定义查找功能

internet-explorer - 2 悬停背景在 IE 上不起作用

internet-explorer - HTTPS 安全性受到 (null) 的损害 - 是什么原因造成的?

excel - VBA:满足某些条件时的动态数组

vba - 使用VBA如何调用Adobe Create PDF功能

excel - 在行中查找特定的重复字母或数字