Как использовать VBA для чтения и вывода HTML в браузере
Краткое введение
На первый взгляд браузер — простое приложение: загрузил текстовый файл с разметкой и отобразил его. VBA в Office предоставляет объектную модель, которая позволяет встроить именно такие операции внутрь макроса. Вы можете: получить HTML с сайта, вставить данные из таблицы Excel в HTML-шаблон, отобразить готовую страницу или сохранить её для дальнейшей обработки.
Важно: этот подход опирается на управление Internet Explorer через компонент Microsoft Internet Controls. В современных системах Internet Explorer устарел — в ряде окружений этот метод может работать хуже или требовать дополнительных прав. Ниже перечислены альтернативы и рекомендации по безопасности.

Включение Microsoft Internet Controls
- Откройте редактор VBA (например: вкладка «Разработчик» → «Режим конструктора» → «Просмотр кода» или нажмите Alt+F11).
- В редакторе выберите меню «Инструменты» → «Ссылки».
- В списке отметьте «Microsoft Internet Controls» и нажмите ОК.
После этого внутри VBA вы сможете создавать объекты браузера (InternetExplorer.Application), навигировать по URL, читать и записывать DOM/HTML.
Пример 1 — вывод простого HTML-отчёта из Excel
Ниже — минимальный пример: кнопка на листе формирует строку HTML, подставляет значения из ячеек и открывает страницу в окне Internet Explorer.
Sub Button1_Click()
Dim objIE As Object
Dim HTML As String
'----------The HTML CODE GOES FROM HERE AND DOWN----------
HTML = "HTML Report Page " & _
"" & _
"The Following Are Results From Your Daily Calculation" & _
"" & _
"Daily Production: " & Sheet1.Cells(1, 1) & "
" & _
"Daily Scrap: " & Sheet1.Cells(1, 2) & "
"
'----------The HTML CODE GOES HERE AND ABOVE---------
On Error GoTo error_handler
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Navigate "about:blank"
Do While .Busy: DoEvents: Loop
Do While .ReadyState <> 4: DoEvents: Loop
.Visible = True
.Document.Write HTML
End With
Set objIE = Nothing
Exit Sub
error_handler:
MsgBox ("Unexpected Error, I'm quitting.")
objIE.Quit
Set objIE = Nothing
End Sub
Примечание по локализации: в этом фрагменте строка HTML формируется конкатенацией. Для более сложных отчётов удобнее формировать шаблон (файл .html или строка с маркерами), затем заменять маркеры значениями из таблицы.
Результат выполнения похож на отчёт ниже.
Пример 2 — чтение страницы и её модификация
Следующий код загружает страницу (в примере — google.com), читает HTML тела страницы в строковую переменную, добавляет свой заголовок и выводит изменённую страницу.
Sub Button1_Click()
Dim objIE As Object
Dim HTML As String
On Error GoTo error_handler
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Navigate "http://www.google.com"
Do While .Busy: DoEvents: Loop
Do While .ReadyState <> 4: DoEvents: Loop
.Visible = True
HTML = objIE.Document.Body.innerHTML
.Document.Write "My Own Google Results! This is an Edited Version of the Google Page!
" & HTML & ""
End With
Set objIE = Nothing
Exit Sub
error_handler:
MsgBox ("Unexpected Error, I'm quitting.")
objIE.Quit
Set objIE = Nothing
End SubИз прочитанного HTML можно извлекать элементы, искать e-mail адреса, телефоны, ссылки или изображения — а затем сохранить или отобразить отфильтрованный и отформатированный результат.
Важные замечания и ограничения
Важно: Управление Internet Explorer через COM-запросы зависит от установленного Internet Explorer и его настроек безопасности. На машинах с корпоративной политикой или на новых версиях Windows этот компонент может быть ограничен или отсутствовать. Рассмотрите альтернативы, описанные ниже.
- Internet Explorer устарел: Microsoft переводит пользователей на движок Edge (Chromium). В новых проектах лучше планировать миграцию к WebView2 (Edge) или внешним инструментам.
- Безопасность: открытие внешних сайтов и запись их HTML может запускать вредоносные скрипты при последующем сохранении. Не используйте непроверенные сайты в автоматизации.
- Совместимость: код, который работает в 32-битном Office, может требовать изменений в 64-битной среде (Declare, API calls и т.п.).
Альтернативные подходы
- WebView2 (Edge Chromium) — современная встраиваемая оболочка браузера. Рекомендуется для долгосрочных решений.
- Использование WinHTTP/XMLHTTP — если нужен только HTML-контент (без исполнения JS), запросы можно отправлять напрямую и парсить ответ.
- Внешние инструменты (Python + requests/BeautifulSoup, Puppeteer) — подходят для тяжёлого парсинга и работы с JavaScript.
Когда этот метод не подойдёт (Counterexamples)
- Если страница интенсивно использует JavaScript для генерации контента на клиенте, чтение HTML через простые HTTP-запросы вернёт лишь начальную разметку.
- Если в компании запрещено использование COM-автоматизации или отключён Internet Explorer — метод недоступен.
- Для высоконагруженной автоматизации и масштабируемой обработки данных лучше использовать серверные решения.
Методика быстрого внедрения (мини-SOP)
- Включите ссылку Microsoft Internet Controls в VBA.
- Создайте прототип: кнопка на листе, простая страница «about:blank» с несколькими подставляемыми полями.
- Тестируйте навигацию к целевому URL и чтение objIE.Document.Body.innerHTML.
- Расширьте обработку: регулярные выражения для извлечения данных или использование objIE.Document.getElementsByTagName()/getElementById().
- Добавьте обработку ошибок и логирование (в файл/лист).
- Проанализируйте безопасность и права исполнения в корпоративной среде.
Чек-листы по ролям
Разработчик:
- Включены нужные ссылки в References.
- Есть обработка ошибок и освобождение объектов (Set objIE = Nothing).
- Тесты на 32/64-битные версии Office.
Аналитик/Бизнес-пользователь:
- Шаблон HTML с местами для подстановки данных готов.
- Прототип проверен на корректность вывода.
Администратор безопасности:
- Проверены политики запуска макросов.
- Оценка доверия к внешним сайтам выполнена.
Безопасность и конфиденциальность
- Не сохраняйте в HTML чувствительные данные (пароли, PII) без шифрования.
- Контролируйте список доверенных сайтов, с которых разрешено считывать данные.
- При распространении макросов документируйте права, которые требуются скрипту.
- Для обработки персональных данных проверьте требования локального законодательства и политики организации.
Тесты и критерии приёмки
Критерии приёмки:
- Скрипт открывает пустую страницу и записывает туда сгенерированный HTML без ошибок.
- Скрипт корректно считывает HTML целевого URL и возвращает non-empty строку.
- При ошибке соединения появляется информативное сообщение, объект освобождается.
Минимальные тест-кейсы:
- Навигация к about:blank и запись простого HTML.
- Чтение HTML известной статической страницы (например, локального файла) и проверка содержимого.
- Поведение при недоступном URL (таймаут/исключение).
Примеры расширений (идеи)
- Формирование многостраничных HTML-отчётов с оглавлением и ссылками на CSV/Excel-резервы.
- Автоматический экспорт в PDF через печать страницы IE или через Headless-принтер.
- Парсинг HTML с последующим заполнением базы данных или CRM.
Глоссарий — 1 строка на термин
COM: механизм межпроцессного взаимодействия в Windows, позволяющий VBA управлять внешними приложениями. DOM: модель документа, представление HTML-страницы как дерева объектов. WebView2: современный компонент на базе Chromium для встраивания браузера в приложения.
Короткое резюме
Этот подход даёт быстрый путь к созданию HTML-отчётов и простому парсингу веб-страниц прямо из Office с помощью VBA. Он хорош для прототипов и внутренних утилит, но требует внимания к совместимости и безопасности. Для production-решений рассмотрите более современные движки (WebView2) или серверные инструменты.
Источник изображения: Shutterstock