Чтение и вывод HTML через VBA
О чём эта статья
Браузер — по сути, приложение, которое получает текст с сервера и отображает его. С помощью встроенной ссылки “Microsoft Internet Controls” в VBA вы можете: читать HTML со страницы, манипулировать им и формировать собственные HTML-страницы из данных Excel/Word/Access.
Важно: InternetExplorer через COM работает в Windows-окружениях и использует движок Internet Explorer. Для новых проектов рассмотрите современные альтернативы (см. раздел «Альтернативные подходы»).
Что вы получите в результате
- Пошаговую инструкцию по включению Microsoft Internet Controls.
- Два полноценных примера кода: 1) вывод HTML из данных листа Excel, 2) чтение HTML с сайта и вывод модифицированной страницы.
- Разбор кода, ограничения, рекомендации по безопасности и план миграции от IE к современным решениям.

Включение Microsoft Internet Controls
- В Excel откройте вкладку Разработчик.
- Включите Режим конструктора и нажмите Просмотр кода, чтобы открыть редактор VBA. (В старых версиях Excel шаги могут отличаться.)
- В редакторе VBA выберите Tools → References.
- В списке ссылок найдите “Microsoft Internet Controls” и отметьте чекбокс, затем нажмите OK.
После этого в VBA можно создавать объекты InternetExplorer через CreateObject или New. Эти объекты умеют навигировать по URL, возвращать DOM страницы и позволять вам записать собственный HTML в окно браузера.
Пример 1 — формирование HTML-отчёта из листа Excel
Ниже — рабочий пример, который берет значения из ячеек Sheet1 и выводит их в новое окно браузера.
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.")
On Error Resume Next
objIE.Quit
Set objIE = Nothing
End Sub
Как это работает (коротко): CreateObject создаёт COM-объект InternetExplorer, .Navigate открывает пустую страницу, вы ждёте, пока объект не станет готов, затем .Document.Write выводит ваш HTML.
Пример 2 — чтение и модификация HTML с внешнего сайта
В следующем примере мы загружаем страницу Google в объект IE, читаем innerHTML тела страницы в переменную, и затем выводим комбинированную страницу (вашая шапка + оригинальное тело).
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.")
On Error Resume Next
objIE.Quit
Set objIE = Nothing
End SubРезультат: вы получаете исходный HTML страницы в виде строки. После этого можно искать элементы, изменять контент, добавлять свои блоки перед выводом.
Разбор и советы по коду
- objIE.Document.Body.innerHTML возвращает содержимое тела страницы как строку.
- Циклы Do While .Busy и Do While .ReadyState <> 4 нужны, чтобы дождаться загрузки.
- .Document.Write перезаписывает текущее содержимое документа. Если нужно дописать, можно манипулировать DOM через .Document.createElement и .appendChild.
- Всегда освобождайте объект (Set objIE = Nothing) и корректно обрабатывайте ошибки, чтобы не оставлять висящие процессы.
Альтернативные подходы
- XMLHTTP/WinHTTP (без визуального браузера). Подходит, если нужна быстрая загрузка HTML и дальнейший парсинг. Не выполняет JavaScript.
- Selenium (WebDriver) для автоматизации реального браузера (Chrome/Edge/Firefox). Поддерживает исполнение JS и взаимодействие с интерактивными элементами.
- WebView2 (Edge Chromium) — современная встроенная компонента для встраивания Chromium-движка в приложения; рекомендуема для новых проектов.
- Power Query в Excel — если нужно просто импортировать таблицы с веб-страницы.
Когда выбрать альтернативу: если страница активно использует JavaScript для рендера, XMLHTTP не подойдёт — нужен Selenium или WebView2.
Ограничения и когда это не сработает
- InternetExplorer устарел: на многих системах его поддержка уже ограничена.
- Сайты с защитой от скрапинга, капчей, динамической подгрузкой через JS потребуют более сложных инструментов (Selenium, Puppeteer, WebView2).
- Правила использования: не нарушайте условия использования сайтов и законы о приватности.
Безопасность и приватность
- Не сохраняйте пароли и персональные данные в открытом виде в HTML.
- При загрузке страниц используйте HTTPS, если возможно.
- Уважайте robots.txt и условия сервиса.
- Ограничьте частоту запросов, чтобы не создавать нагрузку на чужие ресурсы.
Чек-листы по ролям
Разработчик:
- Включил Microsoft Internet Controls.
- Добавил обработку ошибок и логи.
- Освобождает COM-объекты.
Аналитик:
- Определил, какие поля листа будут экспортироваться в HTML.
- Проверил форматирование и кодировку (UTF-8).
Системный администратор:
- Убедился в совместимости браузерного движка и политик безопасности.
- Проверил права на сетевые вызовы с клиентских машин.
Мини-методология разработки надежного решения
- Прототип: реализуйте минимальную функциональность с CreateObject(“InternetExplorer.Application”).
- Локальные тесты: проверяйте для нескольких страниц, включая динамические.
- Обработка ошибок: логирование, таймауты, graceful shutdown.
- Производительность: кеширование, минимизация парсинга.
- Миграция: план перехода на WebView2 или Selenium при необходимости.
Критерии приёмки
- Скрипт корректно открывает и закрывает окно браузера без оставшихся процессов.
- HTML-отчёт отображает данные из листа в ожидаемом формате.
- Решение соответствует требованиям безопасности и не вызывает блокировок со стороны целевого сайта.
Глоссарий (1 строка)
- COM — механизм межпроцессного взаимодействия в Windows.
- DOM — модель объектов документа, позволяет программно изменять HTML.
- WebView2 — современный встроенный компонент Microsoft на базе Chromium.
Совместимость и миграция
Поскольку Internet Explorer устарел, для долгосрочных решений планируйте миграцию на:
- WebView2 (встраиваемый Chromium), если нужен UI внутри приложения;
- Selenium/Headless Chrome для сложной автоматизации и взаимодействия с JS;
- XMLHTTP/WinHTTP для простого скачивания HTML (без выполнения JS).
Примеры тест-кейсов и приёмка
- Открыть страницу «about:blank» и вывести простой HTML — ожидается видимое окно с форматированным текстом.
- Загрузить внешнюю страницу и сохранить её тело в переменную — ожидается непустая строка HTML.
Image credit: Shutterstock
Если у вас есть идеи по применению этого способа в ваших задачах (от отчётов до простого скрапинга), напишите, какие данные вы хотите автоматизировать — и я помогу адаптировать код.
Похожие материалы
Резервное копирование в облако: дублирование
Pages для Mac — полное руководство по шаблонам
Как управлять доступом к местоположению на iPhone
Как освободить внутреннюю память Android
Как установить Linux на ПК или ноутбук