Vba excel печать
На этом этапе мы рассмотрим особенности печати проездных документов и использование макросов для этой цели.
Чтобы созданный документ размещался на листе бумаги с обеих сторон при печати заполненного бланка проездного сертификата, задайте область печати, разделив лицевую и обратную стороны. Для этого последовательно выполните следующие действия:
- выделите мышью область A1: J20 (перед билета);
- нажмите клавишу Ctrl и, удерживая ее, выберите область A22: J69 (противоположная сторона);
- выполнить команду File Print area Setup.
Затем, используя команду «Просмотр файла», просмотрите, как ваш документ будет размещен на бумаге, и, при необходимости, исправьте любые недостатки, вызвав диалоговое окно «Параметры страницы», нажав кнопку «Страница» в меню окна предварительного просмотра.
Вывод командировочного удостоверения на печать с использованием стандартных методов
Существует два способа последовательной печати пользователем нескольких проездных билетов, ранее внесенных в регистрационный регистр.
1-й способ. Распечатайте проездной сертификат, последовательно распечатав лицевую сторону, а затем оборотную. Для этого желательно, чтобы в принтере был лист бумаги. Затем, нажав кнопку «Печать» на стандартной панели инструментов, необходимо перевернуть лист и «пропустить» через принтер с другой стороны, после того как он был извлечен из принтера с распечатанной лицевой стороной. Затем повторите эту операцию с оставшимися проездными билетами.
метод 2 — распечатать пачку проездных документов с одной стороны, а затем пропустить эти листы через принтер с другой стороны. Недостатком этого метода является то, что каждый раз, когда вы отправляете документ на печать, вам нужно использовать команду File Print, а затем в диалоговом окне Print отмечать номера напечатанных страниц, например 1 к 1, что тоже не совсем комфортный.
Недостаток обоих методов заключается в относительной трудоемкости выполнения операций, заключающейся в повторении нескольких обязательных однотипных действий и, как следствие, в возможности внесения ошибок. Пользователь должен повторить многие из одних и тех же действий, независимо от используемого метода. В справке Microsoft Excel в разделе «Автоматизация задач» говорится следующее:
Запись макроса вывода документа на печать
Вам не обязательно быть продвинутым пользователем, чтобы писать макросы. Вы можете использовать триггер макроса записи, чтобы записать последовательность действий. При этом регистратор автоматически преобразует последовательность действий пользователя в код Visual Basic of Application (VBA), который является основой для записи макроса.
Планирование шагов и команд автоматизации процесса печати
За основу автоматизации возьмем второй способ. Мы предполагаем, что необходимо распечатать лицевую сторону проездных билетов, созданных с серийными номерами от 1 до 3, а затем повторить ту же операцию с печатью оборотной стороны. Исходя из этого, тот же тип действий, что и 2-й метод для печать печать с каждой стороны необходимо повторить трижды. Это означает, что было бы удобно отправить документ на печать за одно действие, например, нажав кнопку, после чего Excel должен самостоятельно вызвать диалоговое окно «Печать», определить страницы для печати и нажать кнопку «ОК.
Макрос вывода документа на печать
Чтобы начать запись макроса, запустите команду Macro Tools Start Recording. Появится диалоговое окно «Запись макроса».
Если это первый макрос, записанный в открываемой книге, его имя будет указано в поле Macro Name — Macro1.
Многие пользователи не меняют имя макроса, и через некоторое время могут возникнуть недопонимания — какую операцию выполняет этот макрос. Поэтому он сразу меняет свое название на PrintFaceSide. Имя макроса должно начинаться с заглавной буквы, и между элементами текста имени не должно быть пробелов.
В поле «Сочетание клавиш» введите английскую букву, например «z».
Это позволит сразу после записи макроса, нажав комбинацию клавиш Ctrl + z, запустить макрос для автоматического выполнения записанной операции.
В поле «Описание» будет записана дата создания макроса, и, при желании, в это поле введите краткое описание макроса с помощью клавиатуры, например Предназначен для печати лицевой стороны проездного сертификата.
Выпадающий список Сохранить в содержит:
- Персональная книга макросов;
- Новая книга;
- Эта книга;
здесь будет размещен и сохранен записанный макрос. При создании этого и последующих приложений все макросы будут записаны в эту книгу, поэтому другие параметры не будут приняты во внимание.
После нажатия кнопки «ОК» или клавиши «Ввод» Excel начинает запись макроса, для которого записываются все действия пользователя, независимо от их правильности. Ведение журнала действий выполняется на языке кода VBA и будет выполняться до тех пор, пока ведение журнала не будет остановлено. Чтобы остановить запись, используйте кнопку «Стоп», которая появляется после начала записи.
Чтобы записать код действий, выполняемых макросом, выполните последовательные процедуры печати лицевой стороны билета:
- выполнить команду File Print;
- в появившемся диалоговом окне «Печать» в области «Печать» введите номера страниц от 1 до 1 и нажмите «ОК;
- чтобы остановить запись макроса, нажмите кнопку «Стоп» или используйте команду «Инструменты макроса» Остановить запись.
Чтобы записать макрос для печати обратной стороны проездного сертификата, необходимо выполнить операцию, аналогичную распечатке страницы 2.
Просмотр записанного макроса
Просмотр записанного макроса заключается в просмотре сгенерированного текста кода VBA непосредственно по мере его записи. Для этого, запустив команду Macro Tools редактора Visual Basic или нажав комбинацию клавиш Alt + F11, откройте приложение Microsoft Visual Basic.
Когда вы запускаете редактор Visual Basic, это приложение имеет три основных окна:
- окно проекта;
- окно свойств;
- окно программы.
Окно проекта Окно проекта расположено вверху слева (рисунок 4) и содержит несколько папок. В нашем случае есть папка Microsoft Excel Objects, в которой находятся объекты, с которыми выполняются действия:
- Лист 1 (Travel Identity);
- Лист2 (LogRegistrationKU);
- Эта книга (которая содержит эти макросы).
Вторая папка — Modules, в которой находится элемент Module1 (рисунок 4), содержащий макросы, записанные для печати 1-й и 2-й страницы.
При создании диалогов и форм может быть третья папка — Forms, но здесь она не рассматривается.
Окно проекта предназначено для управления различными элементами проекта VBA и открывается с помощью команды View Project Window.
Если мы перейдем в окно проекта, в объекте Modules есть элемент Module1. Это элемент, который автоматически создается при записи макросов для печати документов.
Окно свойств Окно свойств расположено в нижнем левом углу.
В окне свойств перечислены характеристики элементов проекта. Чтобы изменить свойства элемента, выберите его в окне проекта, после чего его характеристики отобразятся в окне свойств. Если вы выберете элемент Module1, его имя будет отображаться в окне свойств: Module1. Чтобы изменить имя модуля в окне свойств, измените значение свойства Name, введя новое имя — Print .
Окно программы Окно программы самое большое и находится справа.
именно в нем записывается текст макроса на языке Visual Basic Приложения. Окно программы имеет два режима отображения:
- представление полной формы;
- презентация процедуры.
Переключение между этими режимами осуществляется с помощью кнопок, расположенных в левом нижнем углу окна программы.
В режиме просмотра процедуры отображается только один макрос. Чтобы перейти к следующему макросу, выберите его имя из раскрывающегося списка вверху окна программы или используйте клавиши Ctrl + PageUp и Ctrl + PageDown.
В режиме просмотра окно программы содержит все макросы в записанной последовательности. На рисунке 4 показан режим презентации.
Навигация по записанному макросу. Взгляните на код VBA для макроса PrintFaceSide. Если окно программы закрыто, чтобы просмотреть макрос в окне проекта, дважды щелкните правой кнопкой мыши, чтобы активировать элемент Print объекта Forms.
Текст макроса в окне программы содержит следующие элементы:
- ключевые слова Sub и End Sub, то есть начало и конец текста макроса, символ которого выделен синим цветом;
- имя макроса после ключевого слова Sub в начале макроса;
- комментарии, шрифт которых выделен зеленым цветом;
- код VBA или непосредственно записанные действия, выполняемые макросом.
Комментарии. В нашем примере это данные, которые были введены в диалоговом окне «Запись макроса». Строка комментария предназначена для описания действий и начинается с апострофа. Удаление комментариев никак не влияет на выполнение макроса. Более подробно комментарии будут рассмотрены ниже.
И, наконец, код записанных действий, выполняемых макросом:
Макротекст, который начинается и заканчивается ключевыми словами Sub и End Sub, называется подпрограммой или процедурой.
PrintOut VBA
Печать на принтере Excel
или
ActiveWindow.SelectedSheets.PrintOut Копии: = 1, ActivePrinter: = «MyPrinter»
В этом случае нет необходимости менять активный принтер компьютера. =======================================================
ActiveSheet.PrintOut ActivePrinter: = «HP LaserJet 5L»
Диапазон («A1: C10»). Нажмите
ActivePrinter: = «HP LaserJet 5L (LPT1:)»
Предполагается, что вам нужно распечатать только ячейки и диаграммы в диапазоне B2: C10 первого рабочего листа текущей книги.
Если рабочие листы («киоски»). Диапазон («F4»). Значение «» Тогда
ActiveWindow.SelectedSheets.PrintOut From: = 1, To: = 3, Copies: = 1, Collate: = True
Другой
ActiveWindow.SelectedSheets.PrintOut From: = 1, To: = 4, Copies: = 1, Collate: = True
Если Worksheets. Интервал (F4). Значение «» e
Рабочие листы. Дальность («Е4»). Значение «» Тогда
ActiveWindow.SelectedSheets.PrintOut From: = 1, To: = 2, Copies: = 1, Collate: = True
Другой
ActiveWindow.SelectedSheets.PrintOut From: = 1, To: = 4, Copies: = 1, Collate: = True
Метод PrintOut позволяет распечатать книгу, диаграмму, диапазон, рабочий лист. Синтаксис метода PrintOut показан ниже:
Expression.PrintOut (From, To, Copies, Previev, ActivePrinter, PrintToFile, Collate)
Синтаксис метода PrintOut содержит элементы, представленные
______________________________________________________________________________
Описание предмета
______________________________________________________________________________
Expression Выражение, возвращающее объект Workbook
_______________________________________________________________________________
From Необязательный параметр типа Variant указывает страницу, с которой следует начать печать. Если этот аргумент отсутствует, печать начинается с первой страницы.
________________________________________________________________________________
A Необязательный параметр типа Variant указывает последнюю страницу для печати. Если этот аргумент отсутствует, печать продолжается до последней страницы.
_______________________________________________________________________________
Вариант копирования необязательный. Задает количество копий для печати
________________________________________________________________________________
Предварительный просмотр Необязательный параметр Variant, который принимает одно из двух значений:
Установка этого значения в True дает вам вывод перед печатью окна предварительного просмотра.
Если установлено значение «Ложь» (по умолчанию), печать без предварительного просмотра
________________________________________________________________________________
Параметр Необязательный вариант ActivePrinter. Задает имя активного принтера
________________________________________________________________________________
Параметр PrintToFile Необязательный вариант. Если для этого параметра установлено значение True, он печатается в файл. В этом случае пользователю предлагается ввести имя файла
______________________________________________________________________________
Вариант с подборкой необязательный. Если установлено значение True, копии будут объединены.
______________________________________________________________________________
Элементы синтаксиса метода PrintOut
Вот пример печати листа с именем Sheet1:
Рабочие листы («Лист1»). PrintOut (1, 2, 1, Ложь, PrintToFile: = Истина)
Начиная с версии 11 (Office XP), в ACCESS появилась коллекция Printers, содержащая все активные принтеры
Как из VBA выбрать и установить принтер для Excel
Основная цель кода Visual Basic для приложений — автоматизация. И задачи часто очень разные. Одно из таких действий — печать листов или ячеек условно или в цикле. Отправить лист или диапазон на печать несложно, его легко записать макро рекордером и вставить в код. Это будет выглядеть так:
Подмакрос1 () ActiveWindow.SelectedSheets.PrintOut Копии: = 1, Разбор по копиям: = True, IgnorePrintAreas: = False End Sub
Но часто бывает необходимо не только отправить на печать, но и на конкретный принтер. В то же время речь идет не только о том, чтобы указать другой принтер, но и о том, чтобы позволить пользователю выбрать принтер без его кодирования. В конце концов, у разных пользователей могут быть подключены разные принтеры. Часто это необходимо при печати этикеток или других материалов (открыток, брошюр и т.д.), Потому что они обычно не используют стандартный офисный черно-белый лазерный принтер, а используют более продвинутый принтер с возможностью перезагрузки определенных листов. Как видно из приведенного выше кода, здесь нет ни малейшего намека на принтер. Хотя в принципе есть такой параметр — ActivePrinter.
Действительно, вариантов выбора принтера несколько, но я покажу самый надежный (как оказалось) и в то же время самый простой, через стандартный диалог выбора принтера:
Sub ShowPrinters () Application.Dialogs (xlDialogPrinterSetup) .Show End Sub
После вызова этого диалогового окна оно автоматически назначает выбранный принтер в качестве принтера по умолчанию для печати. Теперь все, что мы отправляем на печать, будет отправлено на этот принтер. Это было бы хорошо, но здесь возникает небольшая проблема: в этом случае мы будем печатать не только с кодов на этот принтер, но и во время обычной печати. И нам это не нужно, потому что даже 100 500 каких-то «зловещих» документов вместо лазерной печати в черно-белом цвете будут печатать в фантастических цветах. Вы можете потерять за это свой бонус.Конечно, вы можете каждый раз настраивать нужный принтер перед печатью вручную. Но во-первых, об этом можно просто забыть, а во-вторых, как только мы его поменяли один раз, нам придется снова менять принтер перед печатью из кода. Замкнутый круг и автоматизация совсем не воняют.
Поэтому лучше немного усложнить ситуацию и назначать правильный принтер каждый раз, когда вы печатаете из кода VBA. Я подготовил универсальный код, который печатает активный лист или указанный диапазон ячеек на принтере, выбранном для печати из VBA. При желании и умении код можно модифицировать для печати листов и диапазонов за один цикл. Но главная цель — выбрать принтер для печати только по коду. При первом запуске кода печати вам будет предложено выбрать принтер:
Если вы выберете принтер и нажмете кнопку OK, принтер будет запомнен, и вскоре после этого принтер, изначально установленный для печати, будет сброшен и переустановлен. Однако при печати кода будет использоваться выбранный принтер, а не тот, который используется для ручной печати.
Для ручной печати будет использоваться один принтер, а для печати из кода — другой.
Явный параметр глобальной переменной для сохранения значения принтера, выбранного при печати из VBA Public sNowPrinter, как строка ‘——————————————————————————— -‘ Порядок действий: ChangePrinter ‘Автор: The_Prist (Дмитрий Щербаков)’ Назначение: Функция выбора принтера для печати из кода VBA ‘—————————————————————————— ——— — Sub ChangePrinter () sNowPrinter = «Set» Dim v, s ‘запоминает текущий принтер, поэтому мы можем вернуть его после выбора s = Application.ActivePrinter’ показать окно выбора принтера v = Application. Dialogs (xlDialogPrinterSetup) .Show ‘если был выбран принтер — запомнить выбор If v = True Then sNowPrinter = Application.ActivePrinter End If’ возвращает принтер по умолчанию, поэтому стандартная печать переходит к нему Application.ActivePrinter = s End Sub ‘———— ————————— ——— —————————————— ‘Порядок действий: DoPrint’ Автор: The_Prist (Дмитрий Щербаков) ‘Назначение: Функция печати спецификации число копий указанного диапазона ячеек ‘rr — ссылка на диапазон ячеек — диапазон («A1: B10»)’ если не указано занято — печатается весь активный лист ‘lCopies — целое число, указывающее, сколько копий напечатано’ если не указано — печатается копия »—————————————————— — ———————— Функция DoPrint (Необязательно rr As Range = Nothing, Optional lCopies As Long = 1) Dim sActPrinter As String ‘проверяет, установлен ли принтер для печати If sNowPrinter = «» или sNowPrinter = «Set» Then’, если нет — вызовите процедуру для выбора принтера Call ChangePrinter ‘, если выбранный принтер не был выбрано (нажмите Отмена), поэтому используйте текущий If sNowPrinter = «Set» Then If MsgBox («Не выбран принтер для печати. Использовать установленный как активный? «, VbCritical + vbYesNo,» www.excel-vba.ru «) = vbNo Then Exit Function End If sActPrinter = Application.ActivePrinter Else sActPrinter = sNowPrinter ‘получить принтер, выбранный в окне End If End If rr Is Nothing Then’ print активный лист на выбранном принтере ActiveSheet.PrintOut Copies: = lCopies, ActivePrinter: = sActPrinter Else ‘печатает указанный диапазон ячеек на выбранном принтере rr.PrintOut Copies: = lCopies, ActivePrinter: = sActPrinter End If End Function
Функция ChangePrinter отображает диалоговое окно выбора принтера и устанавливает выбранный принтер в качестве принтера по умолчанию, запоминает выбор и отменяет его, возвращая принтер перед вызовом функции.
Функция DoPrint позволяет печатать прямо на выбранном принтере. Если принтер не был выбран ранее, сначала будет вызвана функция ChangePrinter .
В этом случае функция DoPrint имеет два необязательных аргумента:
- rr — это ссылка на диапазон ячеек (например, Select для печати выбранного диапазона или Range («A1: B10») для печати определенного диапазона, независимо от того, какой диапазон выбран). Если этот аргумент не указан, печатается весь активный лист.