我是VBA的新手,并且在弄清楚如何从网站boxofficemojo.com中提取数据时遇到了很多麻烦。我正在尝试提取2010-2015年的每周数据。所以我找到了一个代码,它按照相同的路线做了一些事情,并根据我的需要进行了改变。如下
Sub Movies()
Dim nextRow As Integer, i As Integer
Application.ScreenUpdating = False
Application.DisplayStatusBar = True
For i = 1 To 52
Application.StatusBar = "Processing Page " & i
nextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.boxofficemojo.com/weekly/chart/?yr=2015&wk=&p=.htm" & i, _
Destination:=Range("A" & nextRow))
.Name = "weekly/chart/?yr=2015&wk=&p=.htm"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingAll
.WebTables = "5"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = True
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
ThisWorkbook.Save
Next i
Application.StatusBar = False
End Sub
然而,它不是在2015年第1至第52周提取数据,而是继续提取2016年最新一周的数据并重复52次。我不确定这里有什么问题,任何帮助都会非常感激。
感谢您的努力。
答案 0 :(得分:1)
你非常接近在那里。
将url
方法中的QueryTables.Add
字符串调整为:
http://www.boxofficemojo.com/weekly/chart/?yr=2015&wk=" & i & "&p=.htm"
由于您表示您希望2010年至2015年。您可以将现有循环包装在另一个循环For x = 2010 to 2015
中,然后将URL修改为:
http://www.boxofficemojo.com/weekly/chart/?yr=" & x & "&wk=" & i & "&p=.htm"