0

我有使用根据单元格值更改的动态 URL 来提取团队信息的代码。

我不断收到运行时错误“91”说“对象变量或未设置块变量”,当我调试时它指向该行

Set tr_coll = tbl(0).getelementsbytagname("TR")

此代码适用于其他数据提取,但由于某种原因现在给了我这个错误。

Sub VS()

Dim src As Worksheet, tgt As Worksheet
Dim url As String, team1 As String
Dim team2 As String, j As Integer, row As Integer
Dim XMLHTTP As Object, html As Object
Dim tr_coll As Object, tr As Object
Dim td_coll As Object, td As Object

Set src = Sheets("Match-up")
Set tgt = Sheets("vs")
team1 = src.Range("b1")
team2 = src.Range("aa1")

    url = "http://www.premierleague.com/en-gb/matchday/matches/2015-2016/epl.past-meetings.html/" & team1 & "-vs-" & team2

    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
    XMLHTTP.Open "GET", url, False
    XMLHTTP.send

    Set html = CreateObject("htmlfile")
    html.body.innerHTML = XMLHTTP.ResponseText

    Set tbl = html.getelementsbytagname("Table")

    Set tr_coll = tbl(0).getelementsbytagname("TR")

    For Each tr In tr_coll
        j = 1
        Set td_col = tr.getelementsbytagname("TD")

        For Each td In td_col
            Cells(row + 1, j).Value = td.innerText
            j = j + 1
        Next
        row = row + 1
    Next
End Sub
4

1 回答 1

0

这意味着 tbl 变量设置为 Nothing。这向我表明,您遇到了一个 404 页面,该页面没有您期望的表格。

确保您的团队返回有效页面。它适用于我使用:

url = "http://www.premierleague.com/en-gb/matchday/matches/2015-2016/epl.past-meetings.html/southampton-vs-west-ham"

顺便说一句,您将 td_col 拼错为一个“l”(但这没关系,因为您没有使用 Option Explicit 但要小心!!)。此外,您没有声明不影响这一点的 tbl 变量,因为您没有使用显式选项。这意味着您有时必须声明很多变量 - 这些变量无法更改类型,但如果您要编写大量 VBA 代码,我建议您使用此选项。

使用 F8 单步执行代码,查看团队字符串的评估结果。然后将生成的字符串硬编码到浏览器中,看看会发生什么......

于 2016-02-06T00:41:56.227 回答