Импорт данных с нескольких страниц одного сайта

Я новичок в 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

Однако вместо того, чтобы извлекать данные за недели 1–52 2015 года, он продолжает извлекать данные за последнюю неделю 2016 года и повторяет их 52 раза. Я не уверен, что здесь не так, и любая помощь будет действительно оценена по достоинству.

Спасибо за ваши усилия.


person Gunpreet Singh    schedule 24.07.2016    source источник
comment
Если вы используете Excel 2010 или более позднюю версию, это может быть проще с Power Query.   -  person Slai    schedule 24.07.2016


Ответы (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"
person Scott Holtzman    schedule 24.07.2016
comment
Большое спасибо, приятель. Ценю твою помощь. :) - person Gunpreet Singh; 25.07.2016