Перейти к содержимому
15 000 бонусов на бронирование отелей!
(Реклама. АО "СУТОЧНО". ИНН 7300037501)

VBA Excel. Печать документа Word

    Отправка на печать документа Word из кода VBA Excel. Пакетная печать всех документов Word из указанной папки. Примеры процедур с комментариями.

    Позднее или раннее связывание

    Для управления приложением Word из Excel мы будем использовать технологию OLE Automation.

    OLE Automation (в современной документации Microsoft чаще называемая просто Автоматизацией) — это технология, позволяющая одной программе управлять объектами, функциями и данными другого приложения напрямую при помощи скриптов или кода. Она базируется на архитектуре COM (Component Object Model).

    Существует два подхода:

    1. Раннее связывание (Early Binding)
      Требует подключения библиотеки Microsoft Word XX.0 Object Library через меню Tools -> References.
      Плюс: работает автодополнение кода (IntelliSense).
      Минус: код может не работать на компьютере с другой версией Office.
    2. Позднее связывание (Late Binding)
      Мы создаем объект через CreateObject.
      Плюс: код универсален и работает на любых версиях Office без настроек.
      Минус: нет автодополнения.

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

    Печать одного документа

    Этот макрос открывает указанный файл Word, отправляет его на принтер по умолчанию, закрывает файл и выгружает Word из памяти.

    Важно:
    Использование параметра Background:=False метода PrintOut заставляет Excel ждать, пока документ полностью не уйдет в спулер печати, прежде чем он будет закрыт.

    Спулер печати — набор компонентов Microsoft Windows, управляющих процессом печати. Диспетчер печати предоставляет пользователю графический интерфейс для получения информации о работе спулера и его конфигурирования. Однако спулер может продолжать работать, даже если диспетчер печати неактивен.

    Пакетная печать документов

    Часто стоит задача распечатать все документы из определенной директории. Для этого мы используем функцию Dir, чтобы перебрать все Word-файлы в указанной папке.

    Примечания

    Фоновая печать

    По умолчанию Word печатает в фоновом режиме (Background Printing). Это значит, что команда PrintOut отдается, и VBA мгновенно выполняет следующую строку (wdDoc.Close). Если закрыть документ слишком рано, спулер печати может не успеть перехватить данные, и на принтер ничего не уйдет.

    Всегда используйте wdDoc.PrintOut Background:=False или добавляйте небольшую задержку кода, чтобы не возникало ошибок при печати.

    Выбор принтера

    Если у вас в системе несколько принтеров, Word будет использовать тот, который установлен «по умолчанию». Если нужно перенаправить печать, используйте свойство ActivePrinter:

    Имя принтера должно в точности совпадать с тем, что отображается в панели управления Windows.

    Печать определенных страниц

    Метод PrintOut имеет множество параметров. Например, чтобы распечатать только первую страницу, используйте:

    Печать диапазона страниц (например, с 1 по 5):

    Резюме

    С помощью VBA можно полностью автоматизировать печать любых документов Word непосредственно из приложения Excel. Особенно полезно это в следующих случаях:

    1. Когда необходимо сгенерировать отчет в Excel, сохранить его как Word-файл и тут же распечатать.
    2. Когда нужно массово распечатать все документы Word из определённой директории.

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.