Гид по технологиям

Интеграция данных Excel в Word с помощью VBA

8 min read Офис Обновлено 11 Apr 2026
Интеграция Excel в Word через VBA
Интеграция Excel в Word через VBA

Этот материал показывает, как автоматически подтягивать данные из файла Microsoft Excel в документ Word с помощью VBA: шаги по настройке ссылки на библиотеку Excel, пример рабочего макроса, рекомендации по автоматическому запуску при открытии документа и варианты более надёжной интеграции.

Обновлено Brad Jones 25 августа 2017 г.

Во время рабочей недели вы наверняка не раз копировали данные из Microsoft Excel в Word или наоборот. Как правило, Excel — отличное место для аккумулирования и расчётов данных, а Word — для оформления читабельных отчётов. Вместо ручного копирования можно связать документ Word с Excel через VBA и автоматически подтягивать актуальные значения.

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

Коротко о примере

В примере используется простая таблица расходов за год. На практике ваш файл Excel может содержать несколько листов и большое количество данных — важно знать расположение нужных ячеек.

Альт-текст изображения: Снимок экрана таблицы Excel с суммами расходов по категориям за год.

Подготовка таблицы Excel

  1. Убедитесь, что данные, которые нужно подтягивать, находятся в фиксированных ячейках или в таблице с постоянной структурой (именованные диапазоны удобнее для поддержки).
  2. При возможности используйте именованные диапазоны (Formulas → Define Name) — это делает код более понятным и устойчивым к перестановке колонок/строк.
  3. Сохраняйте файл Excel в доступном для документа Word месте (локальный диск, сетевой ресурс или путь, доступный пользователю, под которым будет запускаться Word).

Важно: если файл расположён в сетевой папке, учтите права доступа и возможные задержки при открытии.

Подготовка документа Word и элементов управления

Если вы хотите красиво представить данные, добавьте в документ текстовые метки (Label) или поля, куда будут заполняться значения из Excel. Для этого в Word:

  1. Перейдите на вкладку Developer (Разработчик). Если вкладка не видна: File → Options → Customize Ribbon → отметьте Developer.
  2. Включите Design Mode и используйте Legacy Tools, чтобы вставить Label и Command Button (кнопку команды).
  3. Установите у каждой метки свой (Name) в окне Properties — это имя будет использоваться в VBA для обращения.

Альт-текст изображения: Карточка меню Word с вкладкой Разработчик и инструментами Legacy Tools для вставки элементов управления.

Альт-текст изображения: Пример вставки элемента Label через Legacy Tools в Word.

Альт-текст изображения: Окно свойств элемента управления в Word, поле (Name) для задания имени метки.

Добавьте кнопку, дважды щёлкните по ней, чтобы открыть редактор VBA и вставить свой код. Позже можно перенести вызов к событию Document.Open, чтобы запускать обновление автоматически при открытии документа.

Работа с VBA: подключение библиотеки Excel

Перед тем как обращаться к объектам Excel в коде Word, нужно подключить библиотеку объектов Excel:

  1. В редакторе VBA выберите Tools → References.
  2. В списке отметьте Microsoft Excel 16.0 Object Library (версия может отличаться в зависимости от установленного Office).

Альт-текст изображения: Список ссылок в редакторе VBA, подсвечена библиотека Microsoft Excel 16.0 Object Library.

После этого можно создавать переменные типа Excel.Application, Excel.Workbook и обращаться к листам/ячейкам.

Простой рабочий макрос

Ниже — минимальный пример кода, который открывает файл Excel, читает значение из конкретной ячейки и помещает его в Caption метки в документе Word. Скопируйте весь блок в модуль, связанный с кнопкой или в ThisDocument.

Private Sub CommandButton1_Click()
    Dim objExcel As New Excel.Application
    Dim exWb As Excel.Workbook

    Set exWb = objExcel.Workbooks.Open("C:\Users\Brad\Desktop\expenses.xlsx")

    ThisDocument.total_expenses.Caption = exWb.Sheets("Sheet1").Cells(12, 2)

    exWb.Close
    Set exWb = Nothing
    objExcel.Quit
    Set objExcel = Nothing
End Sub

Пояснения:

  • objExcel — объект приложения Excel.
  • exWb — объект рабочей книги; метод Workbooks.Open открывает файл по указанному пути.
  • exWb.Sheets(“Sheet1”).Cells(12, 2) — обращение к листу и ячейке (строка 12, колонка 2).
  • Рекомендуется явно вызывать objExcel.Quit и освобождать объекты (Set … = Nothing), чтобы не оставлять фоновые процессы Excel.

Важно: убедитесь, что пути и имена элементов совпадают с вашими. Если метка называется иначе (не total_expenses), замените имя в коде.

Как тестировать макрос

  1. Сохраните документ как Word Macro-Enabled Document (.docm).
  2. Разрешите макросы или добавьте файл в доверенное расположение (File → Options → Trust Center).
  3. Нажмите кнопку в документе или запустите макрос из редактора VBA.

Если вы планируете распространять документ, используйте цифровую подпись макроса или инструкции по добавлению в доверенные документы.

Интеграция статического текста с данными

Иногда удобнее иметь часть текста в самой метке, а к нему добавлять значение из Excel. Используйте оператор конкатенации “&”.

Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook

Set exWb = objExcel.Workbooks.Open("C:\Users\Brad\Desktop\expenses.xlsx")

ThisDocument.total_expenses.Caption = "Total expenses: " & exWb.Sheets("Sheet1").Cells(12, 2)
ThisDocument.total_hotels.Caption = "Hotels: " & exWb.Sheets("Sheet1").Cells(5, 2)
ThisDocument.total_dining.Caption = "Dining Out: " & exWb.Sheets("Sheet1").Cells(2, 2)
ThisDocument.total_tolls.Caption = "Tolls: " & exWb.Sheets("Sheet1").Cells(3, 2)
ThisDocument.total_fuel.Caption = "Fuel: " & exWb.Sheets("Sheet1").Cells(10, 2)

exWb.Close
Set exWb = Nothing
objExcel.Quit
Set objExcel = Nothing

Альт-текст изображения: Пример меток в документе Word с автоматически подставленными значениями из Excel.

Запуск без кнопки: обновление при открытии документа

Чтобы пользователь не видел кнопку и обновление происходило автоматически, перенесите код в обработчик события Document_Open() в модуле ThisDocument:

Private Sub Document_Open()
    ' Помещаем здесь тот же код, что и для кнопки
End Sub

При таком подходе документ открывается, подтягивает данные и готов к печати — процесс полностью выполняется за кулисами.

Important: если документ открывают пользователи с разными правами, убедитесь, что все имеют доступ к файлу Excel и разрешены макросы.

Когда такой подход может не подойти (примеры ошибок и ограничения)

  • Файл Excel хранится в защищённой сетевой папке с ограниченными правами — макрос не сможет открыть файл.
  • Пользовательские настройки безопасности Word блокируют выполнение макросов — автоматическое обновление не сработает.
  • Excel используется в 64-битной/32-битной спецификации, и в редких случаях могут возникнуть проблемы зависимости от библиотеки; обычно подключение Microsoft Excel Object Library решает это.
  • При одновременном доступе нескольких пользователей к одному файлу Excel возможны конфликты или блокировки (file locking).

Альтернативные подходы

  1. Mail Merge (Слияние почтой): подходит для персонализированных писем/отчетов, когда данные находятся в табличной структуре или базе данных.
  2. Вставка связанной таблицы Excel (Paste Special → Paste Link): создает связь между диапазоном Excel и Word; обновление можно выполнить вручную или при открытии.
  3. OLE-объект или встроенная таблица: можно внедрить часть листа Excel как объект — тогда в документе доступна часть функциональности Excel.
  4. Power Automate / Office Scripts / Add-ins: современные автоматизации и надстройки, работающие в облаке и кроссплатформенно.
  5. Office JavaScript API (Office.js): для разработки надёжных расширений под Office 365.

Каждый вариант имеет свои сценарии применения: VBA удобно для офлайн-автоматизации внутри организации; облачные инструменты лучше для масштабируемых и распределённых процессов.

Практическая методология: шаги внедрения (мини-SOP)

  1. Оцените потребности: какие поля нужны в отчёте и где они хранятся в Excel.
  2. Создайте шаблон Word с метками и назначьте понятные имена (properties Name).
  3. Подключите в VBA Microsoft Excel Object Library.
  4. Напишите код, обрабатывающий открытие файла, чтение значений и обновление элементов Word.
  5. Добавьте обработку ошибок (On Error), логирование и закрытие объектов Excel.
  6. Тестируйте на нескольких машинах/пользователях.
  7. Документируйте требования к путям, правам и настройкам безопасности.

Контроль ошибок и рекомендации по надёжности

  • Всегда оборачивайте блоки доступа в обработчик ошибок:
On Error GoTo ErrHandler
' код
Exit Sub

ErrHandler:
    MsgBox "Ошибка при обновлении данных: " & Err.Description
    If Not exWb Is Nothing Then exWb.Close SaveChanges:=False
    If Not objExcel Is Nothing Then objExcel.Quit
    Set exWb = Nothing
    Set objExcel = Nothing
  • Проверяйте существование файла перед открытием (Dir или FileSystemObject).
  • Закрывайте объекты даже при ошибках — это предотвращает «висячие» процессы Excel в памяти.
  • Используйте именованные диапазоны в Excel — это облегчает сопровождение.

Безопасность и конфиденциальность

  • Макросы могут нести риск, поэтому храните шаблоны в доверенных папках или подписывайте их цифровой подписью.
  • Если Excel содержит персональные или конфиденциальные данные, убедитесь в соответствии политике безопасности компании и в соблюдении требований законодательства о защите данных (GDPR и местные правила).
  • При доступе к общим ресурсам используйте учётные записи с минимально необходимыми правами.

Совместимость и миграция

  • Указывайте в документации требуемую версию Office (например, поддержка Microsoft Excel Object Library 16.0 соответствует Office 2016/Office 365). Код VBA, приведённый выше, обычно совместим с более ранними версиями, но названия библиотек могут иметь другую версию.
  • Для переносимости избегайте жёстко заданных путей; по возможности давайте пользователю выбирать файл через диалог OpenFileDialog.

Рольовые чек-листы

Автор шаблона:

  • Определил список данных и ячеек.
  • Создал именованные диапазоны в Excel.
  • Добавил метки в Word с понятными именами.
  • Написал и протестировал код.

Ревьюер/менеджер:

  • Проверил доступ к файлу Excel и права пользователей.
  • Убедился в отсутствии конфиденциальных данных в шаблоне.
  • Тестирует на целевых рабочих местах.

IT-администратор:

  • Настроил доверенные расположения и политики макросов.
  • Помог с развёртыванием и цифровой подписью.

Критерии приёмки

  • При открытии документа все метки обновляются без ошибок для целевой группы пользователей.
  • Фоновые процессы Excel не остаются запущенными после закрытия.
  • Поведение предсказуемо при отсутствии файла (выводится понятное сообщение).

Быстрый справочник и советы (cheat sheet)

  • Файл документа: сохраняйте как .docm для макросов.
  • Подключение: Tools → References → Microsoft Excel xx.x Object Library.
  • Закрытие: exWb.Close, objExcel.Quit, Set … = Nothing.
  • Защита: храните шаблон в доверенной папке и цифрово подпишите макросы.

Краткий глоссарий в одну строку

  • VBA — Visual Basic for Applications, встроенный язык автоматизации Office.
  • ThisDocument — объект текущего документа Word в VBA.
  • Workbook — рабочая книга Excel.
  • Sheet — отдельный лист в Excel.
  • Caption — свойство текста метки (Label) в Word.

Тестовые сценарии (основные)

  1. Открыть документ с доступным файлом Excel — метки обновляются.
  2. Открыть документ при отсутствии файла Excel — отображается понятное сообщение об ошибке.
  3. Открыть документ с блокировкой макросов — убедиться, что пользователь получает инструкцию по включению макросов.
  4. Множественные пользователи одновременно — проверить поведение при одновременном доступе к файлу Excel.

Идеи для дальнейшего развития

  • Перенести логику в надстройку Office или Office.js для кроссплатформенности и лучшей поддержки в облаке.
  • Использовать Power Automate для подтягивания данных из облачных источников и обновления шаблонов Word.
  • Организовать версионирование исходных Excel-файлов и журнал изменений, чтобы отчёт всегда собирался из нужной версии данных.

Спасибо за чтение. Можете ли вы придумать другие полезные сценарии интеграции Excel и Word с помощью VBA? Поделитесь идеями в комментариях.

Image Credit: Punyaphat Larpsomboon via Shutterstock.com

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Управление Android голосом с Voice Access
Android.

Управление Android голосом с Voice Access

Отрисовка 3D в React с Three.js и react-three-fiber
Веб-разработка

Отрисовка 3D в React с Three.js и react-three-fiber

Показываем и управляем sideload приложениями на Android TV
Android TV

Показываем и управляем sideload приложениями на Android TV

Медленный мобильный интернет: 10 шагов для ускорения
Мобильная связь

Медленный мобильный интернет: 10 шагов для ускорения

Как выбрать тариф iCloud+ — 50GB–12TB
Облако

Как выбрать тариф iCloud+ — 50GB–12TB

Как заменить фон меню GRUB на своё изображение
Linux

Как заменить фон меню GRUB на своё изображение