Функция VBA для выполнения веб-запроса (Web Query)

Функция GetQueryRange предназначена для автоматизации загрузки данных с веб-страниц.

Например, нам надо из макроса Excel получить данные с нескольких однотипных страниц сайта.

Самый простой способ достичь этого - выполнять почти идентичные веб-запросы (где незначительно отличаться будет только URL страницы),
каждый раз анализируя данные, загруженные веб-запросом на лист Excel

Поскольку количество обращений ко мне, с просьбами сделать программу загрузки данных из интернета, с каждым днём растёт, я решил сделать для этих целей универсальную функцию:

 

Sub ПримерИспользования()
    Dim ra As Range: On Error Resume Next
 
    Set ra = GetQueryRange("http://ExcelVBA.ru/", 6)
    Debug.Print ra.Address    ' переменная ra содержит ссылку на диапазон ячеек $A$1:$C$15,
    ' содержащий данные 6-й таблицы главной страницы сайта ExcelVBA.ru

    Set ra = GetQueryRange("http://excelvba.ru/sitemap.xml")
    Debug.Print ra.Address    ' теперь переменная ra содержит ссылку на диапазон ячеек $A$1:$D$502,
    ' содержащий данные карты сайта ExcelVBA.ru

End Sub

При запуске функции, создаётся скрытый лист с именем «tmpWQ» (если такой лист уже есть - используется существующий), и на этом листе выполняется веб-запрос к указанному сайту.

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

скопировал пример из статьи, чтобы посмотреть как это работает - никак.
GetQueryRange - sub or function not defined

Если вы загуглите сообщение об ошибке, то в первых же результатах поиска будет написано, какие ключи в реестре Windows поменять, чтобы эта проблема исчезла.

Во 2-м примере функция GetQueryRange
в строке
.Refresh BackgroundQuery:=False
выдает ошибку
"Указаный сервер не может выполнить требуемую операцию"

Почему же не работают?
Макрос, опубликованный в этой статье, работает сам по себе, без каких-либо дополнительных прог.
Достаточно создать новый файл Excel, вставить туда ВЕСЬ код из статьи, — и всё заработает.

Вы прекрасно "разнесли" возможности по всему рунету. Но макросы без Вашей проги не работают. Изумительно! Писать код для юзеров, которые не работают без без проги! И стелить их по всему интернету.
Мне нравится Ваш подход к SEO.

Макс, тут не от протокола (https) зависит, а от конкретного сайта.
Какие-то сайты можно обрабатывать веб-запросами, а какие-то не получается.
В таких случаях поможет надстройка «Парсер сайтов»
http://excelvba.ru/programmes/Parser

Замечательная функция.
Только почему-то станица вида https://... не загружается в "tmpWQ."

Отличный материал. А кому мешают кракозябры раскройте глаза ведь есть http://excelvba.ru/code/Encode (отличная функция этого же автора)

Ну так выгрузите сначала одну таблицу, а потом другую.
Не имея никаких данных (что откуда выгружать, что должно получиться, что вы там написали в макросе), - не могу посоветовать ничего конкретного.
Если нужно готовое решение, - можем сделать под заказ.

Здравствуйте. Спасибо очень полезная функция для работы. Но возник вопрос, а как можно одновременно 2 опциональных таблицы выгрузить друг под другом, чтобы не выгружать лишнего? Пробовал сам скорректировать код, но у не получилось (( Заранее спасибо.

Добрый день. Авторизоваться получилось (точнее отправляется запрос на получение необходимых данных), а вот сохранить данные со страницы не получается. Сохраняется стартовая страница а не та, которая выводится после запроса. Подскажите как решить данный вопрос. Заранее спс.

Вам что не нравится? что я предусмотрительно не сделал макрос, идеально подходящий для вашей задачи?
Не нравятся мои макросы, вопросы возникают, - ну так берите макросы с других сайтов.
А те, кто обращается с платными заказами, - всегда получают решение, не требующее никаких доработок.
На этом сайте я публикую макросы прежде всего для себя (это для меня как записная книжка - выкладываю свои наработки, чтобы не потерялись)
PS: Пожалуйста, не посещайте больше мой сайт, раз мои бесплатные макросы вас не устраивают, и не пишите здесь коммменты.

Блин, совсем забыл, что тут за бесплатно рта никто не откроет! Так вот, братцы, чтобы Вам деньги люди платили, нужно, чтобы эти люди реально Вам поверили. А как? Если какой макрос отсюда не возьмёшь - куча вопросов появляется. Заплатишь Вам, а потом будешь сам сидеть и править. И незачем огрызаться, принимайте к сведению желания и просьбы потребителя.

Если тупо вставлять ссылку в процедуру, — конечно, ничего не получится
(да и вообще, «тупо вставлять» ни к чему хорошему не приводит...)

Вы хотите бесплатный универсальный макрос, чтобы работал с любыми исходными данными, и выводил результат в точности как вам надо?
Не бывает такого...

Код должен быть рабочим и универсальным

Да? Ну так напишите такой код на досуге

заголовки столбцов - сплошные кракозябры

Пожалуйтесь разработчику Excel (в Microsoft) - это они так сделали веб-запрос, что кодировку не указать.
У меня на сайте много макросов, - если умело их применять, то всегда можно получить желаемый результат.

К примеру мне нужно скачать данные с таблицы http://finance.yahoo.com/q/hp?s=^DJI+Historical+Prices и как это сделать? Да никак. Если тупо вставлять ссылку в процедуру - ничего не работает, надо сидеть и разбираться детально в коде самому и править-править-править. И на кого написан код? На новичка? Он ничего не поймёт. На профи - ему это не надо. Код должен быть рабочим и универсальным. (цитирую Уокенбаха)

http://excelvba.ru/sitemap.xml
вот с этой страницы заголовки столбцов - сплошные кракозябры. НЕ могу уяснить где какое свойство пропущено.

Проблема точно не в коде. Мне маленько не ясно где должны появляться скачанные данные, допустим в первом столбце адрес вэб страницы, во втором я включаю макрос, в searchlinks делаю ссылку на первый столбик, в tables ничего не пишу, дабы скачалось полностью страница, жму окей, вижу процесс пошел, но данных нигде нет! Вот, где искать скачанные данные я не понял!
Кажется я понял, у меня не получалось потому что я запускал это как функцию, а теперь я запустил это все как макрос с поддержкой макроса, и все данные стали выводиться в книге с поддержкой макроса, хотя сама формула и адреса в другой книге! Вот...как то так!

Максим, а чем я смогу помочь, зная только то, что вы написали?
Если первый раз все сделали, и всё получилось, - значит, проблема не в моём коде.
А почему у вас не получается, - сказать не могу, т.к. не знаю, что и каким кодом вы скачиваете.
Не можете разобраться, - оформите заказ на сайте, я сам всё сделаю, - и всё всегда будет работать как вам надо.

Здравствуйте!
Я не могу разобраться, первый раз у меня получилось, все вэб данные появились на листе, хотя я на этот лист даже не нажимал и ничего с ним не делал. А теперь у меня ничего не получается, я вижу что он скачал, скопировал и вставил в лист, но скачанные страницы я не вижу? И как их вывести на видное место, то же не понимаю!

Руслан, моя функция дает вам только ссылку на диапазон
Вы ведь потом этот диапазон куда-то копируете своим кодом, в единую таблицу, верно?
Так вот копируйте на один столбец правее, а в первый столбец вставляйте ссылку
(вы же эти действия выполняете в цикле из своего макроса - так что все просто)

PS: Могу продемонстрировать на примере, - если вы покажете свой код.

Добрый день, а не подскажите, как сюда добавить еще и ссылку откуда скопировалась таблица?
Суть: Использовал данную функцию, добавил цикл с обработкой массива ссылок лежащих на отдельной странице.Результат представлен в виде идущих подряд таблиц, которые нужно подписывать вручную. Можно как то автоматизировать?

Здраствуйте.
Очень полезная фукция для меня - большое Вам спасибо!..
Подскажите пожалуста, можна ли как-то получить после запроса URL страници которая загрузилась?

Здравствуйте, Михаил.
Встроенные средства Excel (веб-запрос) не поддерживают авторизацию.
Надо использовать более сложные макросы - сначала, например, авторизоваться на сервере, а потом работать уже с веб-страницей (анализируя текст веб-страницы, или её исходный код)

Если самостоятельно не разберетесь - оформляйте заказ, сделаем.

Здравствуйте! У меня такой вопрос: есть сайт с онлайн базой данных, для того что бы получить доступ к базе нужно авторизоваться. Через обычный импорт данных в Excel не получается. Как можно изменить этот макрос что бы сначала делал авторизацию и потом импорт данных.
Для логина нужно заполнить 2 поля(логин и пароль) и нажать на кнопку "Вход". Можете помочь?
Заранее спасибо

Здравствуйте, Сергей.
К сожалению, с видеоуроками помочь не смогу - на это потребуется много времени (которого у меня нет).
К тому же, есть куча сайтов, где выложены видеоуроки по работе с макросами в Excel.
Делать же аналогичное видео для каждой из опубликованных у меня на сайте функций - считаю необоснованной тратой времени.

А можете сделать видео как им пользоваться.
Штука нужная, но как использовать VAB макросы я не знаю.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
  _         _   _   _   _____          _   
| |_ | | | | | | |___ / ___ | |_
| __| _ | | | | | | |_ \ / __| | __|
| |_ | |_| | | |_| | ___) | | (__ | |_
\__| \___/ \___/ |____/ \___| \__|
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.