具有单元格值的动态 URL

Dynamic URL with cell value

我有使用动态 URL 提取团队信息的代码,该信息会根据单元格值发生变化。

我一直收到 运行 时间错误“91”,说 "Object variable or With block variable not set",当我调试时它指向行

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

表示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 单步执行代码,查看团队字符串的计算结果。然后将生成的字符串硬编码到浏览器中,看看会发生什么...