Динамический веб-запрос из URL-адреса в ячейках

Искал в инете, но нигде не смог найти динамический запрос из ссылок в ячейках. В excel у меня есть веб-запрос, который генерирует эти данные:

У меня есть данные в листе Excel ("CustomReport"):

SalesOrder  Value1      Value2      Value3     Links
1           Jonas       Station1    8          https://x.com=1
2           Greg        Station1    5          https://x.com=2
3           Anton       Station1    1          https://x.com=3
...         ...         ...         ...        ...

Количество строк в этом запросе всегда разное при его обновлении.

И на основе этого веб-запроса мне нужно создать динамический веб-запрос в макросе. Например: DynamicQuery1 сохраняет данные из отчета https://x.com=1 на имя листа "Заказы". начиная с A1 и заканчивая значением A{X} (отчеты имеют разное количество строк).

DynamicQuery2 сохраняет данные из отчета https://x.com=2 на тот же лист "Заказы", но начиная с А{Х+1}.

У меня есть такой макрос, но он работает только для первой строки.

Подтест()

Dim URL As String

URL = Sheets("CustomReport").Range("E2").Value

Sheets("Orders").Select
With ActiveSheet.QueryTables.Add(Connection:="URL;" & URL, Destination:=Range("$A$1"))
    .Name = "team2289_2"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = False
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlOverwriteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlEntirePage
    .WebFormatting = xlWebFormattingAll
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = True
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
End With

И мне нужно обновлять этот макрос каждый час. Кто-нибудь может дать мне макрос на основе этого пути?


person Seva Arve    schedule 17.01.2018    source источник


Ответы (2)


Чтобы перебрать ячейки, используйте:

dim c as range, DataSpot as range
set c = Sheets("CustomReport").Range("E2")
while c.value <>""
    url = c.value
    set DataSpot=cells(sheets("orders").Range("A1").SpecialCells(xlLastCell).row+1,1)
    ' Web Query Code goes here
    set c=c.offset(1,0)
wend

В запросе данных используйте:

Destination:=Range(DataSpot.Address))
person Greg Viers    schedule 17.01.2018
comment
я написал @up полный макрос, вы можете мне помочь? - person Seva Arve; 17.01.2018
comment
Я исправил линию смещения. Я изначально опечатался. - person Greg Viers; 17.01.2018
comment
это не работает, потому что макрос загружает x раз только отчет из ячейки e2, а мне нужно загрузить 1 раз каждый отчет из ячеек e {x} - person Seva Arve; 17.01.2018
comment
Я добавил еще одну строку: url=c.value. - person Greg Viers; 17.01.2018
comment
url=c.value должен быть той же строкой, что и while или добавить вкладку перед url = c.value? - person Seva Arve; 17.01.2018
comment
Это внутри цикла while. - person Greg Viers; 17.01.2018
comment
по-прежнему загружать отчет по первой ссылке «x» раз из ячейки e2, но не загружать отчет по ссылке из ячейки e3, e4 и т. д. может быть, мне не нужен цикл while, а формула: для каждой строки в столбце e сделать веб-запрос? - person Seva Arve; 17.01.2018
comment
у меня есть вопрос - как добавить команду - для нового макроса запроса - очистить все строки в Sheet1 - person Seva Arve; 17.01.2018
comment
Если решение работает, возможно, отметьте мое решение как правильное, а затем опубликуйте новый вопрос для следующего выпуска. - person Greg Viers; 17.01.2018
comment
я выложил новый выпуск :) - person Seva Arve; 17.01.2018

Подтест()

Dim URL As String

URL = Sheets("CustomReport").Range("E2").Value

Sheets("Sheet1").Select
Dim c As Range, DataSpot As Range
Set c = Sheets("CustomReport").Range("E2")
While c.Value <> ""
    Set DataSpot = Cells(Sheets("Sorders").Range("A1").SpecialCells(xlLastCell).Row + 1, 1)
        With ActiveSheet.QueryTables.Add(Connection:="URL;" & URL, Destination:=Range(DataSpot.Address))
         .Name = "team2289_2"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = False
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlOverwriteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlEntirePage
            .WebFormatting = xlWebFormattingAll
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = True
            .WebDisableRedirections = False
             .Refresh BackgroundQuery:=False
        End With
        Set r = r.Offset(1, 0)
Wend

Конец сабвуфера

я помещаю ваш код, и у меня есть отладка с помощью: Set r = r.Offset (1, 0)

Что я делаю не так?

person Seva Arve    schedule 17.01.2018