Извлечь несколько таблиц HTML через VBA - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть такой URL-адрес:

http://www.xyz342.net/abc/date_from=24.05.2018 00:00:00&date_to=24.05.2018 00:00:00&abc=2

Я использовал следующий код VBA для извлечения таблицы в Excel:

Sub GetWebTable()
    With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.xyz342.net/abc/date_from=24.05.2018 00:00:00&date_to=24.05.2018 00:00:00&abc=2", Destination:=Range("a1"))
    .Refresh BackgroundQuery:=False
    .SaveData = True
    End With
End Sub

Задача: Я хочу автоматически извлекать таблицу для каждого дня 2018 года до сегодняшнего дня.Поэтому дату в указанном выше URL-адресе необходимо менять каждый раз (e.g. http://www.xyz342.net/abc/date_from=20.09.2018 00:00:00&date_to=20.09.2018 00:00:00&abc=2 gives the table for 20.09.2018).Как я могу это сделать?

Perfect будет новым рабочим листом на каждый день.Каждый будущий день должен быть добавлен автоматически.

1 Ответ

0 голосов
/ 26 сентября 2018

Это должно дать вам несколько идей относительно генерации дат в цикле и конкатенации в URL текущей даты.Также демонстрируется, как добавлять новые листы.Я думаю, что, вероятно, есть лучшие методы очистки, чем генерация таблиц запросов, подобных этой.Если вы можете поделиться HTML-кодом для одной ссылки (а схема одинакова для каждого дня), возможно, удастся разработать гораздо лучший подход.

Исходя из комментария @ Marcucciby2, вы также можете получить startdateс чем-то вроде: startDate = DateSerial(YEAR(Date), 1, 1)

Если исторические таблицы не обновлены, вы, вероятно, захотите запустить приведенный ниже один раз.Затем удалите цикл и просто сгенерируйте дату из dateString = Format$(Date, "dd.mm.yyyy") или Date-1, чтобы получить предыдущий день.Вы упоминаете, что хотите добавить его автоматически;Вы можете привязать событие изменения, которое связано с ячейкой, в которой вы выбираете дату из выпадающего списка.

Option Explicit
Public Sub test()
    Dim url  As String, startDate As Long, endDate As Long, i As Long, dateString As String

    startDate = DateValue("2018-01-01")
    endDate = CLng(Date)

    For i = startDate To endDate
        DoEvents
        dateString = Format$(i, "dd.mm.yyyy")
        url = "http://www.xyz342.net/abc/date_from=" & dateString & " 00:00:00&date_to=" & dateString & " 00:00:00&abc=2"
        AddQueryTable url, dateString
    Next
End Sub

Public Sub AddQueryTable(ByVal url As String, ByVal dateString As String)
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets.Add
    ws.NAME = dateString
    On Error Resume Next
    With ws.QueryTables.Add(Connection:="URL;" & url, Destination:=ws.Range("a1"))
        .Refresh BackgroundQuery:=False
        .SaveData = True
    End With
    On Error GoTo 0
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...