vba 从 getElementsByTagName() 中跳过不存在的元素以防止错误

vba skip nonexisting elements from getElementsByTagName() to prevent error

我有这个:

<table class="series">
    <tr><th>1.</th><td><div><a href="?test1">Link1</a></div></td></tr>
    <tr><th>2.</th><td><b>Link2</b></td></tr>
    <tr><th>3.</th><td><div><a href="?test3">Link3</a></div></td></tr>
</table>

我需要遍历每一个以找到没有 url link.

的地方
dim serieTest as Object
If element.tagName = "TABLE" And element.className = "series" Then
    Set data_series = element.getElementsByTagName("td")
    For Each serie In data_series
        Set serieTest = serie.getElementsByTagName("a")(0).href
        If Not (serieTest Is Nothing) Then
            debug.print "link found!"
        Else
            debug.print "link NOT found!"
        End If
        Set serieTest = Nothing
    Next
    Set data_series = Nothing
End If

但我有错误:

Run-time error '91': Object variable or With block variable not set

在线:

Set serieTest = serie.getElementsByTagName("a")(0).href

知道如何防止这种情况吗? 我试过将 On Error Resume Next 放在错误行上方,但它直接进入 "ELSE" 因为它没有分配任何东西所以 "serie" 我总是 null.

当你得到一个 href 值时,它是一个字符串而不是一个对象。您可以按如下方式重写代码(尽管我会向您推荐我之前对您的一个问题的回答,该问题使用辅助函数和 select 案例更好地处理了这种情况):

Dim serieTest As Object, serieHref As String

If element.tagName = "TABLE" And element.className = "series" Then

    Set data_series = element.getElementsByTagName("td")

    For Each serie In data_series

        serieHref = "link NOT found!"

        If serie.getElementsByTagName("a").Length > 0 Then

            Set serieTest = serie.getElementsByTagName("a")(0) 'object

            If serieTest.hasattribute("href") Then
                serieHref = serieTest.href
                Debug.Print "link found!"
            End If
        End If
        Debug.Print serieHref
    Next

End If