我有代码使用基于单元格值更改的动态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
答案 0 :(得分: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与一个'(但是没关系,因为你没有使用Option Explicit但是要小心!!)。此外,您不会声明您的tbl变量,因为您不使用显式选项,因此不会影响此变量。这意味着你有时必须声明很多变量 - 这不能改变类型,但是如果你要编写很多VBA代码,我建议这个选项。
使用F8逐步执行代码,并查看团队字符串正在评估的内容。然后将生成的字符串硬编码到浏览器中,看看会发生什么......