VBA пропустить несуществующие элементы из getElementsByTagName (), чтобы предотвратить ошибку - PullRequest
1 голос
/ 14 апреля 2020

У меня есть это:

<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>

, и мне нужно l oop через каждый, чтобы найти, где нет ссылки URL.

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», так как ничего не присваивает, поэтому «ser ie» i всегда null.

1 Ответ

0 голосов
/ 15 апреля 2020

Когда вы получаете значение href, это строка, а не объект. Вы могли бы переписать свой код следующим образом (хотя я бы сослался на мой предыдущий ответ на один из ваших вопросов, который лучше справляется с этим сценарием, используя вспомогательную функцию и выберите регистр):

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
...