VBA运行时错误91对象variables没有设置 – 我做错了什么?

我正试图从互联网上获取数据到Excel电子表格。 也就是说,我希望在本赛季的所有17周(包括最终排名)中获得过去12年来AP的25支NCAAF球队的名字。 我的代码是基于这个教程: https : //www.youtube.com/watch?v = 7sZRcaaAVbg

我得到的错误在线:

SchoolNames(iYear,iWeek,iRank)=修剪(Doc.getElementsByTagName(“school”)(iRank – 1).innerText)

这是我的代码:


Option Explicit Sub Data_Collection() Application.ScreenUpdating = False Dim iYear As Integer Dim iWeek As Integer Dim IE As New InternetExplorer Dim sYear As String Dim sWeek As String Dim SchoolNames(12, 17, 25) As String Dim Doc As HTMLDocument Dim iRank As Integer For iYear = 2002 To 2013 sYear = CStr(iYear) For iWeek = 1 To 17 If iWeek = 17 Then sWeek = "1/seasontype/3" Else sWeek = CStr(iWeek) End If IE.Visible = False IE.navigate "http://espn.go.com/college-football/rankings/_/poll/1/year/" & sYear & "/week/" & sWeek Do DoEvents Loop Until IE.readyState = READYSTATE_COMPLETE Set Doc = IE.Document For iRank = 1 To 25 SchoolNames(iYear, iWeek, iRank) = Trim(Doc.getElementsByTagName("school")(iRank - 1).innerText) Next iRank Next iWeek Next iYear End Sub 

另外,即使修复了Runtime 91错误,我将正确的东西传递给.getElementsByTagName(),我也不确定。 有什么build议么?

你很近,但需要做一些小的修改。

  1. SchoolNames(iYear,... iYearvariables是一个四位数的年份,但是你正在设置一个数组,所以它需要是数组中的位置,而不是一年)
  2. 具有学校信息的网页中的元素由classname而不是TagName标记。 更改为Doc.getElementsByClassName
  3. 确保你很IE,所以它不会在后台运行IE.Quit

返回示例代码2002年排名第一的学校名称第一周:

 Sub getSchoolName() Dim IE As New InternetExplorer IE.Visible = False IE.navigate "http://espn.go.com/college-football/rankings/_/poll/1/year/2002/week/1" Do DoEvents Loop Until IE.readyState = READYSTATE_COMPLETE Set Doc = IE.Document Dim schoolName As String schoolName = Trim(Doc.getElementsByClassName("school")(0).innerText) IE.Quit MsgBox (schoolName) End Sub 

结果如下所示:

在这里输入图像说明


  • 确保你包含了引用 在这里输入图像说明 在你的项目中。

下面是一个重新设置arrays位置的方法:

 sYearCntr = iYear - 2002 SchoolNames(sYearCntr, iWeek, iRank) = ....