|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.11.2010, 07:46 | #1 |
Регистрация: 30.11.2010
Сообщений: 6
|
Использование вэб-запроса для списка ссылок
Всем доброе время суток! В общем, я не очень опытный пользователь ВБА со стажем 1 день и отголосками занятий по информатике экономического вуза)
Решаю такую задачу (я, кажется, видела здесь подобные, но не смогла их применить к своему случаю((): 1.Есть лист эксель, на котором представлен столбец из 300 ссылок. 2.Для каждой из этой ссылки нужно создать веб-запрос и результаты выгрузить на этот же (можно на другой лист.) 3.Я чувствую, что здесь необходим цикл! но.. как?! 4. Я записала рекордером процедуру создания вэб-запроса для произвольной ссылки: [HTML]Макрос4 Макрос ' Макрос записан 29.11.2010 ' ' Код HTML:
Range("A78:B78").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True Range("F80").Select With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://www.ra-national.ru/?page=p-49698a2d", Destination:=Range("F80")) .Name = "?page=p-49698a2d" .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 .Refresh BackgroundQuery:=False End With End Sub[/HTML Мне кажется, что нужно создать либо второй макрос, который будет "гонять" первый нужное количество раз, пока не закончатся строки в столбце со ссылками, но не знаю, как это оформить. Еще не знаю, как вставлять в веб-запрос данные из ячейки. Возможно, необходимо ввести переменную, которая будет присваивать себе значения ячеек со ссылками, она-то и должна меняться в запросе. НО воплотить эти идеи я не в состоянии одна((( А! еще у меня Excel 2000, и это фатальная данность. Очень буду рада любому отзыву! Всем хорошего дня |
30.11.2010, 08:41 | #2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Посмотрите пример подобного макроса здесь: http://excelvba.ru/MoviesSearch
По указанным в вашем примере ссылкам доступны достаточно большие таблицы. Непонятно, как должен выглядеть результат работы макроса. Покажите на своём файле, какие данные присутствуют изначально (к примеру, первые 2 столбца), и что должно получиться в результате (один или несколько листов с результатами веб-запросов)
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 30.11.2010 в 08:59. |
30.11.2010, 09:36 | #3 |
Регистрация: 30.11.2010
Сообщений: 6
|
Как я вижу результаты
Спасибо за быстрый ответ!
Я в Ваш макрос попыталась вникнуть. Пока, кажется, он мне не по зубам( Только, если не ошибаюсь, там ссылки являются результатом поиска, а не входными данными??? Попробую. Так. В идеале в результате каждого вэб-запроса на лист эксель должна копироваться таблица с указанием №, Названия компании, и др. параметрами, которые в ней присутствуют. После каждого импорта данных на лист должен осуществляться следующий запрос, пока не закончатся ссылки. Таким образом, в результате я хочу получить ряд таблиц, каждая из которых формируется запросом по ссылке. Так как ссылок 286 штук, соответственно, получим 286 таблиц, в каждой из которых 4 столбца (не обязательно 4) Тут я вижу две сложности: 1. Как переходить на другой лист, если в нем закончатся столбцы, а там их немного (а они закончатся!) 2. Что именно импортировать: А. Всю страницу Б. Нужную мне таблицу. Вторая сложность возникает в связи с тем, что документы, выкладываемые по ссылкам, созданы в разное время (с 2001 года), и номера таблиц (а этот параметр используется при создании веб-запроса) в разное вермя - разные! Поэтому нельзя в макросе зафиксировать: импортировать данные из таких-то таблиц.((( Я сейчас специально сделала два запроса по произвольным ссылкам, в прикрепленном файле показан минимально желаемый результат ) |
30.11.2010, 09:51 | #4 | |||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Цитата:
Название фильма -> ссылка на фильм -> веб-запрос по этой ссылке Цитата:
Но... что вы потом будете делать с этими таблицами? Если их вставлять так, как в вашем примере (одну правее другой), с ними же потом крайне неудобно будет работать (ни формулы не применить, ни сводную таблицу не сформировать) Может, всё-таки, каждую таблицу - на свой лист? Или размещать таблицы одну под другой? (убирая заголовки, и возможно, добавляя дополнительные столбцы) Цитата:
Цитата:
остальные столбцы можно отбрасывать? (или они нужны) |
|||||
30.11.2010, 10:19 | #5 | ||
Регистрация: 30.11.2010
Сообщений: 6
|
Цитата:
---- Я просмотрела ссылки. Там везде четыре столбца. Это все,что входит в табличку. Цитата:
|
||
30.11.2010, 11:23 | #6 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
|
30.11.2010, 11:51 | #7 |
Регистрация: 30.11.2010
Сообщений: 6
|
Ничего себе!Вот это да...) Я и не думала, что такое возможно за столь маленький срок..
Пытаюсь разобраться с кодом сейчас.. |
30.11.2010, 13:19 | #8 |
Регистрация: 30.11.2010
Сообщений: 6
|
Разбор полетов. (мучительное осознание кода)
Уважаемый EducatedFool !!!
Я попыталась понять созданное Вами, но пока мне это слабо удается! Помогите, пожалуйста.) Тут даны робкие комментарии того, что я поняла, а что - нет. [Красным выделено на мой взгляд, важное, но совсем не понятное] Dim pi As ProgressIndicator Определяем индикатор процесса (НЕ ОБЯЗАТЕЛЬНО) Sub Запуск() Dim cell As Range, ra As Range, SearchRange As Range, newcell As Range Задаем тип переменных Set ra = shs.Range(shs.[A2], shs.Range("A" & shs.Rows.Count).End(IIf(Len(shs.Ran ge("A" & shs.Rows.Count)), xlDown, xlUp))) Что такое shs. – Sheeets??? Видимо,определеяем массив, который начинается с ячейки А2 и заканчивается вместе с окончанием рядов??? Дальше не знаю совсем функцию. Возможно, определение последнего значения в строке On Error Resume Next Указывает, что возникновение ошибки выполнения приводит к передаче управления на инструкцию, непосредственно следующую за инструкцией, при выполнении которой возникла ошибка (не совсем ясно, зачем) Set pi = New ProgressIndicator Индикатор процесса pi.Show "Получение данных с сайта" Индикатор процесса pi.StartNewAction , 99, , , , ra.Cells.Count Индикатор процесса For Each cell In ra.Cells pi.SubAction "Отчётный период: " & cell, "Ссылка: " & cell.Next.Hyperlinks(1).Address, _ Индикатор процесса "Заполнено строк: " & shd.UsedRange.Rows.Count - 1 Индикатор процесса SearchLink$ = "URL;" & cell.Next.Hyperlinks(1).Address Индикатор процесса Set SearchRange = Nothing: Set SearchRange = GetQueryResult(SearchLink$, cell.Text) Использовать результаты запроса (ДАЛЬШЕ непонятно) Set newcell = shd.Range("A" & shd.Rows.Count).End(xlUp).Offset(1) newcell.Resize(SearchRange.Rows.Cou nt, SearchRange.Columns.Count).Value = SearchRange.Value ' Dim cell2 As Range, ra2 As Range ' For Each cell2 In newcell.Offset(, 5).Resize(SearchRange.Rows.Count).C ells ' cell2.Value = cell2.Value ' Next cell2 DoEvents Next cell Переход к следующей ячейке ra.EntireRow.AutoFit Видимо, автоподбор ширины столбца pi.Hide Скрыть индикатор End Sub Sub Очистка() Если необходимо очистить лист (не обязательно) shd.Range(shd.[A2], shd.Range("A" & shd.Rows.Count).End(xlUp)).Resize(, 20).ClearContents Если необходимо очистить лист (не обязательно) ActiveWindow.ScrollRow = 2 Если необходимо очистить лист (не обязательно)End Sub Если необходимо очистить лист (не обязательно) Function GetQueryResult(ByVal SearchLink$, ByVal sTime As String) As Range ' возвращает диапазон - с результатами запроса On Error Resume Next tmp.UsedRange.ClearContents: DoEvents With tmp.QueryTables.Add(SearchLink$, tmp.Range("c1")) .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .WebSelectionType = xlSpecifiedTables .WebTables = "7" .WebTables = "7" – Видимо, для всех таблиц, это был все-таки номер 7??????????? DoEvents .Refresh BackgroundQuery:=False: DoEvents Квартал = Left(sTime, 1) Преобразователь исходных данных Год = Split(sTime, " ")(1) Преобразователь исходных данных Dim ResultRange As Range Set ResultRange = tmp.Range(tmp.[c2], tmp.Range("c" & tmp.Rows.Count).End(xlUp)).Offset(, -2) ResultRange.Value = Квартал ResultRange.Offset(, 1).Value = Год ResultRange.Offset(, 5).Value = Application.Trim(ResultRange.Offset (, 5).Value) ResultRange.Offset(, 5).Replace ".", ",", xlPart ResultRange.Offset(, 5).Value = ResultRange.Offset(, 5).Value Set GetQueryResult = ResultRange.Resize(, 6) .Delete: DoEvents End With End Function Последний раз редактировалось Anna1; 30.11.2010 в 13:22. |
30.11.2010, 13:22 | #9 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
|
30.11.2010, 13:30 | #10 | ||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Цитата:
Цитата:
1) ссылку на сайт 2) текст ячейки с листа ИСХОДНЫЕ ДАННЫЕ - из первого столбца (дату) 3) текст ячейки с листа ИСХОДНЫЕ ДАННЫЕ - из второго столбца Эта функция на скрытом листе с кодовым именем tmp выполняет веб-запрос, и возвращает объект типа Range - диапазон ячеек скрытого листа tmp, где содержатся результаты запроса Эта же функция добавляет 3 столбца перед результатами (во всех строках - одно и то же) - чтобы видеть, по какому из запросов получены данные. Цитата:
Вообще, это не совсем тот макрос, с которого следовало бы начинать изучение макросов - для начинающего он будет сложноват. Я бы сам не разобрался в макросах, если бы начал изучение VBA с такого... |
||||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
получение списка ссылок на подпапки файлы однойпапки | i777 | Microsoft Office Excel | 3 | 06.10.2010 23:30 |
использование списка для структуры | dimulka2010 | Помощь студентам | 0 | 28.03.2010 15:46 |
Программа для сканирования ссылок на сайте. | antoha.by | Помощь студентам | 6 | 27.07.2008 17:58 |
LinkCollector - менеджер закладок для захвата и хранения ссылок | AnalogXP | Софт | 15 | 21.01.2008 13:15 |