Всем добрый день. Заранее прошу прощение, за возможный вопрос не по теме форума. Но я даже не знаю, на какой форум мне податься. Может если мой вопрос ответа здесь не найдет, то хоть пните в нужном направлении. Проблема такая: На сайте http://stocks.investfunds.ru/stocks/leaders.phtml есть таблиц «Лидеры роста». В таблице этой 7 вкладок: за день, за неделю, за месяц и т.д. Есть макрос, который подгружает эту таблицу в EXCEL файл. Но он может подгрузить ее только первую страницу «За день», а вот остальные семь не хочет. Ссылка у каждой странице разная типа «javascript:%20change(1);» «javascript:%20change(2);» и т.д. (что это значит, представляю на уровне догадок) У общей таблицы ссылка такая «http://stocks.investfunds.ru/stocks/leaders.phtml#growth» Вот собственно и вопрос как в макросе URL правильно написать, я так думаю нужно соединить воедино полный адрес таблицы и ссылку на конкретный лист, чтобы он подтягивал тот лист который нужно. Перепробовал кучу вариантов, но все никак. Может свойство какое есть специальное или метод у QueryTables. Всем заранее спасибо
> Может свойство какое есть специальное или метод у QueryTables C QueryTables я особо не сталкивался, поэтому не знаю, можно ли встроенными средствами реализовать задумку.
Принцип отображения таблиц на сайте: В странице, скачиваемой по указанной Вами ссылке, уже присутствуют ВСЕ значения ВСЕХ таблиц.
1) Скачиваем макросом страницу (её HTML - код) в текстовый файл, и парсим её, выдирая из вышеприведённого текста нужные данные. Недостаток такого варианта - очень много сложного кода.
2) Работаем с объектной моделью документа. Грузим страницу, считываем таблицу, программно щелкаем на следующей вкладке для запуска function change(gid), считываем следующую таблицу, и т.д.
(Если во время запуска формы будут вылетать ошибки, нажимайте CONTINUE. Почему вылетают ошибки - не понимаю - ведь используется On Error Resume Next Возможно, это у меня Excel глючит)
Нажмите кнопку "считать таблицу" после выбора нужной вкладки.
PS: Считывать ТЕКСТ таблицы, вместо того, чтобы в цикле перебирать её ячейки, - не лучшая идея. (сделал лишь для демонстрации такой возможности)
Лучше будет в цикле пройтись по строкам и столбцам. Сейчас попробую сделать пример.
PPS: Форма с IE сделана лишь для удобства отладки. После изготовления работоспособного кода её можно убрать, создавая объект IE динамически.
Нажмите зеленую кнопку - через несколько секунд на листе появится таблица. Номер таблицы (номер вкладки на сайте) и начальная ячейка для вставки таблицу задаются в качестве параметров макроса:
Sub test() СкачатьТаблицу 5, [a2] End Sub
Sub СкачатьТаблицу(ByVal НомерТаблицы As Integer, ПерваяЯчейка As Range) Set IE = CreateObject("InternetExplorer.Application"): DoEvents NavStr = "http://stocks.investfunds.ru/stocks/leaders.phtml#growth"
IE.Navigate NavStr While IE.ReadyState <> 4: DoEvents: Wend
Set ieDoc = IE.Document: On Error Resume Next Application.ScreenUpdating = False
Set t = ieDoc.getElementById("maintable1").all.Item(0) For i = 0 To t.Rows.Length - 1 With t.Rows.Item(i).Cells For j = 1 To 5 txt = .Item(j - 1).innerText Select Case j Case 1: txt = Replace(txt, ".", "") Case 4: txt = CDbl(Replace(Replace(txt, " ", ""), ".", ".")) Case 3: txt = "'" & txt Case 5: txt = Split(Replace(txt, ".", ","), " ")(0) End Select ПерваяЯчейка(i, j) = txt Next j End With Next i IE.Quit: Set IE = Nothing ПерваяЯчейка.Resize(, 5).EntireColumn.AutoFit Application.ScreenUpdating = True End Sub
Хотел у Вас спросить. Вы говорили о ячейках и столбцах какой-то таблицы, Я так подозреваю эта таблицы, которые присутствуют на WEB-страницах. Мне, по ходу дела, часто придется вытаскивать информацию из WEB-а. Хотел у вас спросить: Может вы литературу, какую посоветуете или сайты, что бы можно было получше понять механизм получения нужной информации с WEB страниц, да и то как они устроены, а то если честно я в Вашем коде ни чего не понял, много нового для меня, а научиться делать такие вот вещи очень даже нужно. Заранее благодарю,
> Не думал что Вы будете возиться )) У меня было 2 часа свободного времени. Не знал, чем заняться... решил помочь)
> Может вы литературу, какую посоветуете или сайты, что бы можно было получше понять механизм получения нужной информации с WEB страниц, да и то как они устроены
Можно также использовать Watch в отладчике VBA, чтобы видеть структуру загруженной веб-страницы.
С иерархией объектов и методами можно ознакомится, подключив к проекту VBA библиотеку Microsoft HTML Object Library
Для анализа структуры сайта я использую браузер Firefox c подключенными расширениями Firebug и WebDeveloper.
Будут конкретные вопросы (например, как скачать вот эту табличку вот с этого сайта) - обращайтесь через Скайп. Постараюсь помочь. Могу и кое-что из общих принципов разъяснить, но только не по переписке - времени жалко.
PS: Сам этому научился за несколько часов методом научного тыка)) Так что сложного абсолютно ничего нет - программно работать из VBA с веб-страницей не сложнее, чем с диаграммой или сводной.