Vba excel настройка печати

Обновлено: 05.07.2024

Определимся с условными названиями:
Принтер Windows - Принтера из Пуск -> Панель управления -> Принтеры
Примнет Excel - Excel -> Файл -> Печать
И там и там можно открыть свойства принтера. Но это не одно и тоже. Когда Excel открывается, он читает настройки принтера, выбранного по умолчанию в Windows, далее по тексту просто принтер Windows. Можно изменять свойства принтера Windows и его свойства будут прочитаны Excel-ом при открытии или выборе этого принтера в Excel. Если принтер в Excel уже выбран, то изменять свойства принтера Windows уже бес толку, так как Excel их уже получил, запомнил, и больше смотреть туда не будет до выбора другого принтера.

Двухсторонняя печать и другие свойства принтера:
Первое что надо вкурить - в Excel и вообще в Оффисе нет, не было и наверное не будет двухсторонней печати. Точно также как подобного свойства нет и в других программах, например в 1С или в простом блокноте. Да проще сказать где оно есть. Есть оно например в программе FinePrint. Кто юзал, тот поймет. А в других программах мы просто вызываем свойства принтера и выбираем там режим двухсторонней печати. То есть все это обрабатывает драйвер принтера, а не Excel. Excel просто отправляет документ на печать с настройками, которые уже получил и помнит.

Для окончательного усвоения материала, проделаем следующее:
Забудем на время про VBA, API и вообще все что связано с программированием. Открываем принтер Windows (см. формулировку в начале статьи). Ставим там у принтера по умолчанию например свойство двухсторонней печати (далее по тексту Duplex). Открываем Excel. Смотрим свойства принтера Excel (Excel -> Файл -> Печать -> Свойства). Видим там что Duplex выставлен. Закрываем свойства принтера Excel, но не сам Excel. Открываем свойства принтера Windows и убираем Duplex. Опять открываем совйства принтера Excel, смотрим, а дуплекс то там остался, хоть мы и убрали его в принтере Windows.
Что же это означает? А то, что после того, как Excel получил свойства принтера Windows, изменять их уже бес толку, потому что Excel помнит свою копию свойств.
А теперь проделаем все наоборот. Изменим свойства принтера Excel и посмотрим отразились ли они на свойствах принтера Windows. А и не отобразились, но Excel продолжает их помнить. Ну а это означает, что изменение свойств принтера Excel никак не повлияет на свойства принтера Winows, и другие программы не увидят этих изменений, что мы сделали в Excel.

Теперь подумаем что и когда надо менять:
Правильнее будет предоставить изменять свойства принтера Windows только пользователю. Пусть он сам установит те первоначальные свойства принтеров, с какими он бы хотел видеть их в других программах. А вод свойства принтера Excel можно "гнуть" как угодно под каждую конкретную задачу.

Ну а теперь грустный финал этой статьи. Увы это не урок, а простой вопрос. Есть пример VBA который легко, быстро, и надежно (ну у меня по крайней мере) меняет свойства принтера Windows. А нужно изменять свойства принтера Excel.

Как нелепое решение могу предложить следующее:
Меняем принтер Excel на какой нибудь другой. Изменяем свойства принтера Windows. Выбираем в Excel этот принтер. В момент выбора будут опять прочитаны его уже измененные свойства.
Недостатки этого способа:
1. Танцы со сменой принтеров требуют задержки и нагружают код нашей программы.
2. Изменения сделанные кодом нашей программы влияют на все другие программы, т.к. мы изменяем общие свойства принтера. Можно конечно по завершению вернуть все обратно, но можно и забыть, или например прога завершиться не корректно, и возврат сделан не будет.

В примере сразу смотрим модуль PrinterDuplex. Там внизу две процедуры теста. Получение и установка дуплекса.

Что нужно:
Добиться чтобы пример изменял не свойства принтера Windows, а свойства принтера Excel.

Давайте сделаем это. Любые идеи, будем пробовать. Очень бы помогла консультация специалиста на тему печати в целом. Где и как хранятся свойства принтера на время жизни программы, которая отправляет документы на печать. Вот например тот же Блокнот тоже позволит открыть свойства принтера. Но там не будет кнопки "Применить". И все изменения будут сразу же забыты при закрытии диалога печати.

Мы часто печатаем вещи в своей работе и вручную устанавливаем некоторые параметры, например, горизонтальную или вертикальную печать. Разберитесь в свойствах PageSetup, задайте параметры печати с помощью нескольких коротких строк кода, затем вы можете установить их один раз, использовать постоянно, удобно и эффективно.

Объект PageSetup представляет инструкции по настройке страницы. Содержит все свойства настроек страницы (левое поле, нижнее поле, размер бумаги и т. Д.).

В следующем примере устанавливается альбомная ориентация печати, а затем выполняется печать рабочего листа.


Атрибуты Описание
FirstPageNumber Вернуть или установить номер первой страницы при печати указанного рабочего листа. Если установлено значение xlAutomatic, Microsoft Excel использует номер первой страницы. Значение по умолчанию - xlAutomatic. Длинный шрифт, читаемый и записываемый.
FitToPagesTall Верните или установите высоту страницы, используемую для масштабирования листа при его печати. Применяется только к рабочим листам. Тип варианта, читаемый и записываемый.
FitToPagesWide Верните или установите ширину страницы, используемую для масштабирования рабочего листа при его печати. Применяется только к рабочим листам. Тип варианта, читаемый и записываемый.
Orientation Возвращает или задает значение XlPageOrientation, которое представляет портретный или альбомный режим печати.
Pages Возвращает или задает количество страниц в коллекции Pages.
PaperSize Верните или установите размер бумаги. Может читать и писать XlPaperSize.
PrintQuality Вернуть или установить качество печати. Тип варианта, читаемый и записываемый.
Zoom Возвращает или задает значение Variant, которое представляет собой процентное значение от 10% до 400%. Этот процент представляет собой коэффициент масштабирования, когда Microsoft Excel печатает рабочий лист. Это свойство применяется только к листам. Если для этого атрибута установлено значениеFalse, ЗатемFitToPagesWide с участием FitToPagesTallАтрибуты определяют способ масштабирования листа. При любом увеличении сохраняется соотношение сторон исходного документа.

В этом примере Sheet1 настраивается для печати в альбомной ориентации.

2. Свойства, соответствующие вкладке «Поля».


Установление и возврат маржи в пунктах. быть полезнымInchesToPoints Метод преобразования дюймов в фунты, вы также можете использоватьCentimetersToPoints Метод перевода сантиметров в точки.

Точка: относится к единице измерения высоты печатаемых символов. Фунт равен 1/72 дюйма или примерно равен 1/28 сантиметра. )

Атрибуты Описание
BottomMargin Возвращает или задает размер нижнего поля в пунктах. Двойной тип, читаемый и записываемый.
CenterHorizontally Если указанный рабочий лист напечатан в центре страницы по горизонтали, значение атрибута равно True. Логический тип, доступный для чтения и записи.
CenterVertically Если указанный рабочий лист напечатан в центре страницы по вертикали, значение атрибута равно True. Логический тип, доступный для чтения и записи.
FooterMargin Вернуть или установить расстояние от нижнего колонтитула до низа страницы в пунктах. Двойной тип, читаемый и записываемый.
HeaderMargin Вернуть или установить расстояние от верха страницы до верхнего колонтитула в пунктах. Двойной тип, читаемый и записываемый.
LeftMargin Возвращает или задает размер левого поля в пунктах. Двойной тип, читаемый и записываемый.
RightMargin Возвращает или задает размер правого поля в пунктах. Двойной тип, читаемый и записываемый.
TopMargin Возвращает или задает размер верхнего поля в пунктах. Двойной тип, читаемый и записываемый.

В следующем примере устанавливаются все поля первого листа.

Эти два свойства аналогичны настройке содержимого ячейки по центру по горизонтали и вертикали.

3. Свойства, соответствующие вкладке «Верхний / нижний колонтитул».


Атрибуты Описание
AlignMarginsHeaderFooter Если Excel выравнивает верхний и нижний колонтитулы с полями, заданными в параметрах настройки страницы, он возвращает True. Чтение / запись логического типа.
CenterFooter Отцентрируйте информацию нижнего колонтитула в объекте PageSetup. Чтение / запись типа String.
CenterFooterPicture Возвращает графический объект, который представляет изображение в средней части нижнего колонтитула. Используется для установки атрибутов, связанных с изображением.
CenterHeader Выровняйте информацию заголовка по центру объекта PageSetup. Чтение / запись типа String.
CenterHeaderPicture Возвращает графический объект, который представляет изображение в средней части заголовка. Используется для установки атрибутов, связанных с изображением.
DifferentFirstPageHeaderFooter Истинно, если на первой странице используется другой верхний или нижний колонтитул. Чтение / запись логического типа.
LeftFooter Возвращает или задает выравнивание текста в левом нижнем колонтитуле книги или раздела.
LeftFooterPicture Возвращает графический объект, который представляет изображение в левой части нижнего колонтитула. Используется для установки атрибутов, связанных с изображением.
LeftHeader Возвращает или задает выравнивание текста в левом заголовке книги или раздела.
LeftHeaderPicture Возвращает графический объект, который представляет изображение в левой части заголовка. Используется для установки атрибутов, связанных с изображением.
OddAndEvenPagesHeaderFooter Если нечетные и четные страницы указанного объекта PageSetup имеют разные верхние и нижние колонтитулы, значение этого атрибута равно True. Логический тип, доступный для чтения и записи.
RightFooter Возвращает или задает расстояние (в пунктах) между правым краем страницы и правым краем нижнего колонтитула. Чтение / запись типа String.
RightFooterPicture Возвращает графический объект, который представляет изображение в правой части нижнего колонтитула. Используется для установки атрибутов изображения.
RightHeader Вернуть или установить правую часть заголовка. Чтение / запись типа String.
RightHeaderPicture Укажите графическое изображение, которое должно отображаться в правом заголовке. Только чтение.
ScaleWithDocHeaderFooter Возвращает или задает, будут ли масштабироваться верхний и нижний колонтитулы вместе с документом при изменении размера документа. Чтение / запись логического типа.

4. Свойства, соответствующие вкладке «Рабочий лист»


Атрибуты Описание
BlackAndWhite Если элементы в указанном документе напечатаны черно-белыми, значение атрибута равно True. Логический тип, доступный для чтения и записи.
Draft Если графика на листе не печатается при печати, значение атрибута равно True. Логический тип, доступный для чтения и записи.
Order Возвращает или задает значение XlOrder, которое представляет порядок, который Microsoft Excel использует для нумерации страниц при печати большого рабочего листа.
PrintArea Верните или установите область для печати в виде строки, которая использует ссылку стиля A1 макроязыка. Тип строки, доступный для чтения и записи.
PrintComments Вернуть или установить способ печати комментариев на листе. Тип XlPrintLocation, доступный для чтения и записи. Вы можете распечатать комментарии в виде текстовых полей или концевых сносок.
PrintErrors Устанавливает или возвращает константу XlPrintErrors, которая указывает тип отображаемой ошибки печати. Эта функция позволяет пользователям отменять отображение ошибок при печати рабочего листа. Могу читать и писать.
PrintGridlines Если линии сетки ячеек напечатаны на странице, значение равно True. Применяется только к рабочим листам. Логический тип, доступный для чтения и записи.
PrintHeadings Если заголовки строк и столбцов печатаются одновременно при печати этой страницы, значение равно True. Применяется только к рабочим листам. Логический тип, доступный для чтения и записи.
PrintNotes Если при печати рабочего листа комментарии к ячейкам печатаются вместе как концевые сноски, значение равно True. Применяется только к рабочим листам. Логический тип, доступный для чтения и записи.
PrintTitleColumns Возвращает или задает столбец, содержащий ячейки, которые повторно появляются в левой части каждой страницы, выраженные строкой на языке макросов в стиле A1. Тип строки, доступный для чтения и записи. Установите для этого атрибута значениеFalseИли пустая строка (""), строка заголовка будет закрыта.
PrintTitleRows Возвращает или задает те строки, которые содержат ячейки, которые многократно появляются в верхней части каждой страницы, выраженные в нотации стиля A1 с помощью строк макроязыка. Тип строки, доступный для чтения и записи.


Комментарий будет напечатан на новой странице.


5. Атрибуты, не соответствующие вкладкам

Атрибуты Описание
Application Если идентификатор объекта не используется, это свойство возвращает объект Application, представляющий приложение Microsoft Excel. Если используется идентификатор объекта, это свойство возвращает объект Application, представляющий создателя указанного объекта (вы можете использовать это свойство в объекте автоматизации OLE, чтобы вернуть приложение объекта). Только чтение.
Creator Возвращает 32-битное целое число, указывающее приложение, создавшее объект. Только чтение Длинный тип.
EvenPage Возвращает или задает выравнивание текста на четных страницах книги или раздела.
FirstPage Возвращает или задает выравнивание текста на первой странице книги или раздела.
Parent Возвращает родительский объект указанного объекта. Только чтение.

Range.PrintOut метод

Этот метод эквивалентен нажатию кнопки печати в Excel для выполнения операции печати. Этот метод позволяет указать принтер для печати.

Выражение выглядит следующим образом.

.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)

название Описание
From Номер начальной страницы для печати. Если этот параметр не указан, печать начнется с начальной позиции.
To Номер конечной страницы печати. Если этот параметр не указан, печать будет до последней страницы.
Copies Количество копий для печати. Если этот параметр не указан, будет напечатана только одна копия.
Preview Если этоTrue, Microsoft Excel вызовет предварительный просмотр перед печатью объекта. Если этоFalse(Или опустите этот параметр), объект будет немедленно напечатан.
ActivePrinter Задайте имя активного принтера.
PrintToFile Если этоTrue, Затем распечатайте в файл. Если не указаноPrToFileName, Microsoft Excel предложит пользователю ввести имя файла вывода, который будет использоваться.
Collate Если этоTrue, Печать нескольких копий с подборкой.
PrToFileName в случае PrintToFileУстановить какTrue, Параметр указывает имя файла для печати.

Заметка:From с участием ToОписанная «страница» относится к странице, которая будет напечатана, а не ко всем страницам в указанном листе или книге.

Публичный аккаунт WeChat: VBA168

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


Все мы знаем, что Microsoft Excel используется для создания формул, простого расчета, нескольких баз данных. Многие из таких данных используются крупными организациями в их повседневной работе. В мире компьютеров и интернета все оцифровано. Однако мы часто используем функцию « Печать» для распечатки данных и работы с ними. Задумывались ли мы о том, как создать автоматический формат печати для любой книги?

Как использовать функцию печати в Excel VBA?

Нам хорошо известна функция Print, которая является частью вкладки File - Print. Однако сегодня мы научимся вставлять функцию печати, но с помощью VBA. Чтобы улучшить наше понимание, мы объяснили процесс с помощью различных примеров использования VBA Print.

Вы можете скачать этот шаблон VBA Print Excel здесь - Шаблон VBA Print Excel

VBA Print - Пример № 1

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


Чтобы распечатать вышесказанное, нам нужно добавить принтер на наш компьютер / ноутбук, и мы можем напрямую распечатать вышеприведенные данные, перейдя в File-Print .

Как и выше, у нас есть такие опции и в VBA, с расширенными возможностями. Это называется VBA Print.

Однако для правильной работы функции печати VBA нам сначала нужно создать макрос. Макрос обычно создается для облегчения доступа к данным. Обычно создается как ярлык для большого объема данных.

Выполните следующие шаги, чтобы использовать функцию печати в Excel VBA.

Шаг 1 : создайте макрос следующим образом

Выберите Данные - Просмотр - Макросы - Запись макроса.


Как только мы добавим эту опцию, мы увидим нижеприведенный экран.

Шаг 2 : назовите макрос

В данном случае мы сохранили имя наших макросов как « Macro1 », которое является именем по умолчанию. После создания макроса мы можем приступить к созданию опции «Печать».


Шаг 3 : Вариант разработчика.

Функция Print может быть использована в VBA с помощью опции Developer. Чтобы получить опцию в Excel, нам нужно выполнить следующую инструкцию: Нажмите на вкладку « Разработчик », затем нажмите на Visual Basic, чтобы войти в VBA.


Шаг 4: Как только мы попадаем в VBA, нам нужно вставить модуль, чтобы мы могли писать в нем код. Сделайте следующее

Перейдите на вкладку « Вставка » и нажмите « Модуль» .


Шаг 5 : Теперь давайте начнем писать код, для этого нам нужно сначала назвать макрос следующим образом. Субъект должен начинаться с команды «Sub-Print1 ()», поскольку информационная база данных взята из Macro1, который мы создали на шаге. 2 Функция написана следующим образом:

Код:


Шаг 6 : Первая команда - это исходные данные, которые мы упомянули как Macro1. Команда «Выбранные листы» означает, что те же данные были скопированы из исходного листа, где упоминаются данные.

Код:


Шаг 7 : Затем мы должны использовать опцию « Распечатка » в VBA, которая появляется на экране.

Код:


Шаг 8 : После установки опции «Распечатка» мы выбираем количество копий в аргументе.

Код:


Например, в нашем примере мы упомянули « Copies = 1». Но мы также можем изменить детали, как 2 или 3 копии, если требуется. Мы можем настроить его на основе количества копий, которые нам нужно распечатать.

Шаг 8: Следующий аргумент - функция « Сортировка» . Вводя функцию « Collate _: = True », мы гарантируем, что данные составляются вместе на листе. В приведенной выше функции,

Код:


Шаг 9: Мы также упомянули «Игнорировать области печати», потому что у нас есть только 1 лист для печати, и это находится в пределах области печати. Но мы также можем настроить эту опцию, если это необходимо.

Код:


Шаг 10: Для завершения команды нам нужно ввести «End Sub». Если мы не введем эту команду, аргументы будут считаться неполными.


Шаг 10 : Мы можем напрямую выполнить, нажав F5 или нажав на кнопку воспроизведения.

Как только мы нажимаем команду «Выполнение», область документа автоматически передается на принтер для печати.

VBA Print - Пример № 2

Точно так же у нас есть еще одна функция, связанная с Print, которая называется Print Preview в VBA. Это помогает нам взглянуть на данные о том, как они будут выглядеть во время печати, прежде чем приступить к выполнению. Чтобы объяснить функцию предварительного просмотра в VBA, мы использовали те же данные, что и в предыдущем примере:

Шаг 1: В VBE начните писать макрос и определите имя переменной.

Код:


Шаг 2: При этом используется функция «Printpreview».

Код:


Шаг 3 : Запустите этот код, нажав F5 напрямую или вручную, нажав кнопку Run на левой верхней панели. Как только мы выполним команду, автоматически появится следующий экран.


Предварительный просмотр печати помогает нам просматривать данные, прежде чем приступить к печати.

Итак, вот как функции в VBA Print можно использовать для непосредственного выполнения распечаток. Я надеюсь, что теперь у нас есть лучшее понимание и реализация функции.

То, что нужно запомнить

  • Функция VBA становится доступной после создания макросов для исходных данных. В первые несколько шагов мы узнали, как создавать макросы.
  • Мы всегда должны помнить, чтобы не предоставлять пробелы между функциями.
  • Alt + F11 может напрямую вызывать функцию VBA вместо перехода в режим разработчика.
  • Всегда помните, когда вы вводите функцию Activesheet, как вы можете видеть в шаге 2примера 2, а затем убедитесь, что курсор (щелчок) перед выполнением команды находится на том же листе, для которого требуется печать.

Рекомендуемые статьи

Это руководство по функции печати VBA. Здесь мы обсудим, как использовать функцию печати в Excel VBA вместе с некоторыми практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

Основная задача кодов Visual Basic for Applications - автоматизация. И задачи зачастую бывают самые разные. Одна из таких задач - печать листов или ячеек по условию или в цикле. Сама по себе отправка на печать листа или диапазона не представляет сложностей, это легко можно записать макрорекордером и вставить в свой код. Выглядеть это будет примерно так:

Sub Макрос1() ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False End Sub

Sub ShowPrinters() Application.Dialogs(xlDialogPrinterSetup).Show End Sub

Окно выбора принтера

Этот диалог после вызова автоматически назначает выбранный в нем принтер принтером по умолчанию для печати. Т.е. теперь чтобы мы ни отправили на печать будет отправлено на этот принтер. Все бы хорошо, но тут появляется небольшая проблема: в этом случае у нас не только из кодов будет идти печать на этот принтер, но и при обычной печати. А это нам не надо, ведь тогда даже 100500 каких-то "левых" документов вместо печати на лазерном черно-белом будут распечатаны на офигительном цветном. За такое можно и премии лишиться :) Конечно, можно каждый раз перед ручной печатью выставлять нужный принтер. Но во-первых об этом можно просто забыть, а во-вторых - как только изменим один раз, нам придется перед печатью из кода опять менять принтер. Замкнутый круг и автоматизацией вообще не пахнет.
Поэтому лучше чуть-чуть все усложнить и при каждой печати из кода VBA назначать нужный принтер. Я заготовил универсальный код, который отправляет на печать либо активный лист, либо указанный диапазон ячеек именно на выбранный для печати из VBA принтер. При желании и умении код можно доработать для печати листов и диапазонов в цикле. Но основной упор сделан на выбор принтера для печати только из кода. Т.е. при первом запуске кода печати будет предложено выбрать принтер:

Если принтер будет выбран и нажата кнопка Ок, то принтер будет запомнен и сразу после этого сброшен и установлен заново тот принтер, который был изначально установлен для печати. Однако при печати из кода будет использован именно выбранный принтер, а не тот, который будет применяться при ручной печати.
Т.е. при ручной печати будет один принтер, а при печати из кода - другой.

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

В процедуре ниже на печать выводится выделенный диапазон с количеством печатных копий листов - 2.

Sub TestPrint() DoPrint Selection, 2 End Sub

Так же в функции DoPrint можно заменить ActiveSheet на конкретный лист. Например: Workbooks("Книга2.xlsx").Sheets("Лист3") . Книга Книга2.xlsx должна быть открыта и должна содержать лист с именем Лист3 .

Этикетки на листе

В приложенном к статье файле так же есть пример печати по очереди каждой из этикеток, расположенных в два ряда:

Хотя практичнее автоматически заполнять только один шаблон этикетки в цикле разными данными и его отправлять на печать.

Читайте также: