Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
VBA - Получение веб-данных по списку URL
 
JeyCi, я примерно сделал, посмотрел, что результат всё же не совсем удовлетворительный выходит (до этого, когда по-одному делал, добавлял вручную, казалось, что более-менее) и решил от такого метода отказаться. А от вас  ответа не ожидал бесплатного, поэтому сначала просто спросил, чтобы потом договориться.
Изменено: FuncX - 28.09.2015 22:56:38
VBA - Получение веб-данных по списку URL
 
Примерно додумался как сделать для случая с одним листом. Выдаёт ошибку в конце выполнения (1004), но данные добавляет (может что-то подправить надо). Сам решил постепенно делать парсер вместо этого, но вот код, может кому пригодится:
Код
Sub Макрос1()

    Dim CurRow As Long
    For Each link In Worksheets("Лист1").Range("A:A").Cells
     With Worksheets("Лист2")
        CurRow = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
    End With
    With Worksheets("Лист2").QueryTables.Add(Connection:= _
        "URL;" & link.Value, Destination:=Worksheets("Лист2").Range("$A$" & CurRow _
        ))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        '.WebSelectionType = xlAllTables
        .WebFormatting = xlNone
        '.WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = False
        .WebSingleBlockTextImport = True
        .WebDisableDateRecognition = True
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
Next
End Sub
VBA - Получение веб-данных по списку URL
 
Цитата
Doober написал:
Могу предложить без веб-запроса на лист
Спасибо за ваши старания. Внешне как раз то, что нужно, но к сожалению, дело в том, что та ссылка была дана для примера, веб-запрос должен быть относительно универсальным, чтобы указав номер таблицы можно было получить с нескольких разных сайтов, поддерживающих обработку веб-запросом, парсинг под каждый отдельный сайт нет смысла делать. Легче будет получить данные в более-менее табличном виде, потом уже удалить пустые строки и т.п.
Вот тут добавил псевдокод (помечен звёздочками) для случая когда на один лист все таблицы, чтобы объяснить ещё. Вроде бы так должно работать, но как сделать это в подробностях на самом языке, не знаю.
Код
Sub GetNames()
 
    Application.Run "Êíèãà1!Ìàêðîñ2"
    *пока  (не пустая ячейка в столбце А) делать:
    k=k+1
    i = НомерПоследнейЗанятойЯчейки в (ТекущаяКнига.Лист2.СтолбецА) + 1*
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;*ТекущаяКнига.Лист1.А[k]*", Destination:=*ТекущаяКнига.Лист2.А[i]*
        .CommandType = 0
        .Name = *ПолучитьИмяФайла(A[k])*//не знаю, нужно ли это вообще или достаточно полного url, который мы уже указали
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        *  .WebTables = "2"* //тут будет номер таблицы на странице вместо .WebSelectionType = xlAllTables

        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub
Изменено: FuncX - 26.09.2015 16:39:11
VBA - Получение веб-данных по списку URL
 
Цитата
Catboyun написал:
Так Вам нужен один запрос или все на одном листе?
1-й в $A$1
2-й например в $A$200 и т.д.
я правильно понял?
Извините за плохое объяснение. Нужно множество запросов, каждый запрос запрос берёт адрес из столбца A и помещает результат либо на другом листе (в одном, по порядку, результат за результатом, без перезаписи), либо каждый раз на новый лист (думаю, что на одном листе придётся возится). Накидал в пейнте схему, может поможет понять.
Изменено: FuncX - 26.09.2015 11:20:41
VBA - Получение веб-данных по списку URL
 
Здравствуйте. Необходимо следущее:
На первом листе книги в столбце А расположен список URL. Необходимо выполнить веб-запрос по этим адресам (запрос однотипный, извлекаются определённые таблицы, а вот URL разные, вручную займёт огромное количество времени), каждый раз записывая его результаты в новый лист книги.
В интернете находил решения, в которых давался некоторый однотипный адрес, вида ?id=xxxxx и xxxxx менялись, мне же нужно просто пройтись по адресам из списка. Почему каждый раз на новый лист? Потому что длина таблиц разная, возможно, возникнут проблемы если копировать в строку за предыдущей таблицей на одном листе.
Вот пример кода для единичного запроса (как я понял, чтобы осуществить моё, нужно всё в цикл, который закончится на последнем адресе из столбца A; в connection= отправлять строку из A(i-го), а в destination указывать каждый раз новый лист, перед этим его создав ):
Код
Sub GetNames()

    Application.Run "Êíèãà1!Ìàêðîñ2"
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://names.mongabay.com/most_common_surnames.htm", Destination:=Range( _
        "$A$1"))
        .CommandType = 0
        .Name = "most_common_surnames"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlAllTables
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub
Изменено: FuncX - 26.09.2015 01:37:15
Локальная сортировка
 
Спасибо за помощь, разобрался.
Локальная сортировка
 
Спасибо. Ваш код частично работает. Сортируется в пределах столбца, а
необходимо сортировать вместе со всеми соседними столбцами, т.е. целые
строки переставлять. Извиняюсь за скрин в первом посте, там не совсем это ясно. Лучше см. прикреплённый файл. Есть ещё одна просьба - т.к.
я новичок, то не могли бы вы, пожалуйста, добавить комментарии, какая переменная/какое значениия
отвечают за номер столбца с id, за номер столбца со значениями,
за количество строк на один id.
Изменено: FuncX - 05.05.2015 13:51:58
Локальная сортировка
 
Прикрепляю файл с примером (сами же файлы слишком большие).
Цитата
МВТ написал: Выделяете ячейки(не строки, а именно ячейки) в столбце В в пределах одного ID и нажимаете сортировку
ID тысячи, вручную будет очень проблематично, именно поэтому и написал сюда.
Локальная сортировка
 
Здравствуйте. Прошу извинить, если задача слишком тривиальная, я новичок в этом. Необходимо отсортировать строки (вместе со ячейками, в которых значения) по возрастанию значений в ячейке, при этом в пределах одного id (см. скриншот). Строк довольно большое количество, но все они следуют правилу - на один id n (константа) строк, id (текстовые) изначально расположены так, чтобы не перемешиваться (что должно облегчить задачу). Думаю, что проще всего будет сделать решение в виде макроса (т.к. для разных файлов/лиcтов могут быть разные n), в котором будут указываться столбец, где содержатся id, количество строк на один id и столбец со значениями.
Скриншот:
https://dl.dropboxusercontent.com/u/29614570/Xls.png
Изменено: FuncX - 24.03.2015 21:47:57
Страницы: 1
Наверх