Макрос в excel для печати

Макрос для слияния данных при серийной печати рассылок в Excel

Текстовый редактор Word обладает определенной функциональностью, которой нет в Excel. Например, функция слияния документов для серийной печати адресов писем на конвертах при массовой рассылке. Задумайтесь, на сколько был-бы практически применим этот инструмент в Excel, чтобы можно было печатать: счета фактур, отчеты, анкеты, бланки заказов, коммерческие предложения и др. В принципе с помощью программы Word мы можем применять инструмент слияния документов так, чтобы импортировать данные из Excel. Но это весьма сложное и не всегда удобно реализуемое решение. В данном примере мы с помощью VBA-макроса создадим свой альтернативный инструмент слияния в Excel. И продемонстрируем как использовать его для серийной печати документов при подготовке их к массовой рассылке по адресам клиентов получателей.

Подготовка слияния данных для серийной печати рассылок в Excel

Чтобы использовать в Excel преимущества серийной печати и слияния данных, в первую очередь необходимо создать таблицу с определенной структурой и контролем ввода в нее значений при заполнении. А после подготовки материалов, мы с помощью средств VBA напишем свой макрос, который будет выполнять серийную печать документов. Данные на основе которых будет реализована печать тиража, должны быть разделены на 2 части:

  1. Таблица с постоянными (не изменяющимися) значениями для информации, которая будет выполнять роль шаблона при многоразовой печати. Например: суть предложения, бланк заказа, отчет, реквизиты фактур Вашей фирмы и т.п. В данном примере эта таблица будет называться «Серийная Таблица».
  2. Таблица в которой все значения уникальны и подаются для заполнения реквизитов при многоразовой печати. Эти значения будут вставлены в соответственные места Серийной Таблицы. Например: адреса клиентов, имена и фамилии получателей и т.д. В данном примере вторая таблица будет навиваться «Таблица Данных».

Естественно правильно выполнять слияние данных из этих двух таблиц будет реализовано с помощью определенного макроса VBA.

Создание Серийной Таблицы с шаблоном для рассылки

Подготовка данных к серийной печати можно начать из создания любой таблицы. Но мы рекомендуем сначала создать Серийную Таблицу. Ведь она будет содержать больше информации, так как представляет собой форму шаблона с видом, наиболее приближенным к финальному результату. Просто потом его нужно заполнить переменными значениями из Таблицы Данных с помощью макроса.

Сначала создадим лист для серийной печати. Самая упрощенная версия документа, подготовленного к заполнению переменными данными перед серийной печатью, изображена на рисунке:

Несложно догадаться, что ячейки B3, B4, B6 и B7 предназначены для заполнения переменными данными из Таблицы Данных. А в ячейку B9 введем формулу, которая автоматически вычислит сроки реализации заказа с учетом даты его составления. Допустим на строки реализации дается 2 недели, тогда вводим простую формулу: =B3+14.

Подготовка Таблицы Данных с реквизитами для рассылок

На отдельном листе создадим Таблицу Данных, которая будет содержать все переменные значения, подставляемые в соответственные места Серийной Таблицы. На следующем рисунке изображен простой пример Таблицы Данных из серийными переменными значениям:

При создании такой таблицы мы должны придерживаться базового правила – каждая строка содержит определенную группу связанных между собой значений. Например, имя и фамилия одного и того же получателя должны находиться в одной строке. Наш макрос будет по строкам считывать эту таблицу и подставлять взятые значения с диапазона каждой строки в соответственные места Серийной Таблицы. Так будет реализована многоразовая печать одного и того же шаблона с разными реквизитами.

Так же следует помнить о том, то Таблица Данных должна быть полностью заполнена. Если будет пустая ячейка, тогда будет опущено значение. А если будет пустая целая строка, тогда будет прервана серия печати. Положение Таблицы Данных не обязательно должно начинаться с ячейки A1. Ее адрес расположения укажем в VBA-коде макроса.

Также важно учитывать тот факт, что листы обеих таблиц должны находиться в одной рабочей книге Excel. Для функционирования кода макроса не важно будут ли в этой книге находиться другие листы. Так же на данном этапе для макроса не играют особой роли названия листов. После переименования названий листов, просто следует указать их имена в коде макроса.

Слияние данных обеих таблиц в Excel с помощью макроса

Заполнение серийной таблицы значениями, собранными в Таблице Данных выполнить за нас программа VBA-макроса. Для этого откройте редактор Visual Basic (ALT+F11) и создайте модуль: «Insert»-«Module», чтобы в него записать этот код макроса:

Sub PechatSerii()
On Error Resume Next
Dim ListSerii As Worksheet
Dim ListDannye As Worksheet
Dim DiapazS As Range
Dim DiapazD As Range
Dim Stroki As Long
Dim Stolbec As Long
Dim Yacheyki As Range
Dim Rekvizit As Range
Dim NameListSerii As String
Dim NameListDanye As String
Dim AdresDannye As String
Dim AdresRekvizitov As String
‘настройки структуры книги
NameListSerii = «Серии»
NameListDanye = «Данные»
AdresDannye = «A2:D20»
AdresRekvizitov = «B3, B4, B6, B7»
‘код программы
Set ListSerii = ActiveWorkbook.Worksheets(NameListSerii)
Set ListDannye = ActiveWorkbook.Worksheets(NameListDanye)
Set DiapazS = ListSerii.Range(AdresRekvizitov)
Set DiapazD = ListDannye.Range(AdresDannye)
For Stroki = 1 To DiapazD.Rows.Count
Stolbec = 1
For Each Rekvizit In DiapazS
Set Yacheyki = DiapazD.Cells(Stroki, Stolbec)
Stolbec = Stolbec + 1
Rekvizit.Formula = Yacheyki.Value
Next Rekvizit
ListSerii.PrintOut
Next Stroki
MsgBox ( «Отравлено на печать» & _
CStr (Stroki — 1) & » бланков» )
On Error GoTo 0
End Sub

В коде применяются 2 цикла:

  1. For Stroki = 1 To DiapazD.Rows.Count – Первый проходить по всем строкам Таблицы Данных. Количество проходов зависит от значения в переменной Stroki. А ее значение получено путем определения количества заполненных строк в Таблице Данных. Адрес этой таблицы находится в переменной DiapazDannye.
  2. For Each Rekvizit In DiapazS – Второй цикл находиться внутри первого. Он отвечает за поочередное заполнение соответственных ячеек на листе где находится Серийная Таблица. А данные берет со строк Таблицы Данных. Количество циклов определяется значением переменной Yacheyki. А ее значение получено путем определения количества ячеек в исходной строке.

Когда макрос Excel пройдет по всем циклам, тогда можно вызвать окно сообщения (MsgBox) о количестве напечатанных документов. То есть сколько было выполнено непрерывных циклов в процессе выполнения кода.

В макросе используются еще 2 переменные с адресами диапазонов ячеек:

  1. DiapazS – содержит адрес на несмежный диапазон ячеек для Серийной Таблицы, в которую будут вводиться переменные значения.
  2. DiapazD – содержит адрес на смежный диапазон ячеек для Таблицы Данных из которой будут браться переменные значения для заполнения.

Чтобы более-менее было удобно приспособить функционирование макроса к изменениям таблиц на листах, адреса на диапазоны ячеек подаются в текстовых переменных AdresRekvizitov и AdresDannye. Благодаря функции Range значения этих переменных из типа строки (As String) преобразуются в тип адреса (As Range):

Set DiapazS = ListSerii.Range(AdresRekvizitov)
Set DiapazD = ListDannye.Range(AdresDannye)

Такой подход к построению макроса имеет определенные преимущества. Можно свободно редактировать и изменять адреса диапазонов для обеих таблиц при их изменении размера или структуры:

AdresDannye = «A2:D20»
AdresRekvizitov = «B3, B4, B6, B7»

Макрос будет работать без проблем.

Код макроса содержит некоторую информацию о структуре данной рабочей книги Excel: размещение исходных данных и целевых, а также названия листов. Сами названия листов указаны в строковых переменных NameListSerii и NameListDannye.

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

NameListSerii = «Серии»
NameListDanye = «Данные»

AdresDannye = «A2:D20»
AdresRekvizitov = «B3, B4, B6, B7»

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

Обратите внимание, что при указании несмежного диапазона адреса между ячейками мы разделяем запятыми. Также количество ячеек в каждой строке Таблицы Данных соответствует количеству поданных адресов ячеек для несмежного диапазона в Серийной Таблице. Все данные собираются и вводятся по очереди. Например, в ячейку Серии!B3 по очереди будут заполняться все значения из столбца Данные!A:A, а в ячейку Серии!B3 – попадут значения из столбца Данные!B:B и т.д.

На этапе тестирования макроса нет необходимости рисковать ошибочной печатью документов и тратит офисные листы бумаги. Достаточно лишь поменять строку кода:

на временную строку которая включит режим предварительного просмотра:

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

Процесс слияния данных и серийной печати рассылок из Excel

Когда уже создадите и заполните все таблицы необходимыми значениями, можно запустить свой макрос для серийной печати. Нажимаете комбинацию клавиш (ALT+F8) из списка в появившемся окне выбираем имя макроса «PechatSerii» и нажимаем на кнопку «Выполнить».

Циклы инструкций кода сразу проходят по всем строкам Таблицы Данных и поочередно вводят собранные значения из ячеек строк в соответственные ячейки Серийной Таблицы. После заполнения каждого комплекта данных выполняется печать готового текущего документа.

Данный процесс повторяется ровно столько раз сколько строк содержит Таблица Данных. После завершения действия макроса выводиться сообщение с информацией о завершении генерации документов и о их количестве отправленных на печать:

После завершения действия макроса Серийная Таблица будет содержать данные полученные из последней строки Таблицы Данных. Как показано ниже на рисунке:

Таким образом у нас получилось автоматизировать большой объем роботы с помощью макроса и без использования программы Word.

Макрос в excel для печати

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

Читать еще:  Выбор даты в excel с помощью календаря

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

  • выделите мышью область А1:J20 (лицевая сторона командировочного удостоверения);
  • нажмите на клавишу Ctrl и, удерживая ее, выделите область А22:J69 (обратная сторона);
  • выполните команду Файл | Область печати | Задать.

После этого с помощью команды Файл | Предварительный просмотр просмотрите, как разместится документ на бумаге и, если необходимо, то произведите устранение недостатков, вызвав диалоговое окно Параметры страницы, нажав на кнопку Страница в меню окна предварительного просмотра.

Вывод командировочного удостоверения на печать с использованием стандартных методов

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

1-й метод. Вывод на печать одного командировочного удостоверения, печатая последовательно лицевую сторону, затем обратную. Для этого желательно, чтобы в принтере находился один лист бумаги. Тогда нажав на кнопку Печать на стандартной панели инструментов нужно лист, после вывода его из принтера с распечатанной лицевой стороной, перевернуть и «пропустить» через принтер с другой стороны. Далее повторить эту операцию с оставшимися командировочными удостоверениями.

2-й метод заключается в том, чтобы отпечатать партию командировочных удостоверений с одной стороны, и затем пропустить эти листы бумаги через принтер с другой стороны. Недостаток этого метода заключается в том, что тогда каждый раз, отправляя документ на печать, нужно применять команду Файл | Печать, а после этого в диалоговом окне Печать отмечать номера печатаемых страниц, например, с 1-й по 1-ю, что тоже не совсем удобно.

Недостаток обоих методов заключается в относительной трудоемкости выполнения операций, которая заключается в повторении ряда обязательных однотипных действий и, как следствие, возможности внесения ошибок. Пользователь должен повторять несколько одних и тех же действий, независимо от применяемого метода. В Справочной системе Microsoft Excel в разделе Автоматизация задач написано следующее:

Запись макроса вывода документа на печать

Чтобы писать макросы, не обязательно быть опытным (продвинутым) пользователем. Можно с помощью активизации средства записи макроса записать последовательность выполняемых действий. При этом программа записи автоматически преобразует последовательность действий пользователя в код на языке Visual Basic of Application (VBA), который является основой записи макроса.

Планирование шагов и команд автоматизации процесса печати

Принимаем за основу для автоматизации 2-й метод. Предполагаем, что необходимо отправить на печать лицевую сторону сформированных командировочных удостоверений с порядковыми номерами с 1-го по 3-й, после чего повторить ту же операцию с выводом на печать обратной стороны.. Исходя из этого однотипные действия 2-го метода по выводу на печать каждой стороны нужно повторить три раза. Значит было бы удобно отправлять документ на печать одним действием, например, нажатием на кнопку, после чего Excel должен самостоятельно вызвать диалоговое окно Печать, определить выводимые на печать страницы и нажать на кнопку ОК.

Макрос вывода документа на печать

Для того чтобы начать запись макроса, выполните команду Сервис | Макрос | Начать запись. Появится диалоговое окно Запись макроса (рисунок 1).

Рис.1. Диалоговое окно Запись макроса

Если это первый записываемый макрос в открываемой книге, то тогда в поле Имя макроса будет указано его имя — Макрос1.

Многие пользователи не изменяют имя макроса и через некоторое время может возникнуть недоразумения — какую операцию выполняет этот макрос. Поэтому сразу измените его имя на ПечатьЛицевойСтороны. Имя макроса должно начинаться с заглавной буквы и между элементами текста имени не должно быть пробелов.

В поле Сочетание клавиш введите букву на английском языке, например, «z» (рисунок 2).

Рис.2. Диалоговое окно Запись макроса после внесения изменений в поля Имя макроса, Описание и Сочетание клавиш

Это позволит сразу же после записи макроса, нажав на комбинацию клавиш Ctrl+z запустить макрос на автоматическое выполнение записанной операции.

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

В раскрывающемся списке Сохранить в находятся:

  • Личная книга макросов;
  • Новая книга;
  • Эта книга;

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

После нажатия на кнопку ОК или клавишу Enter Excel начинает запись макроса, для чего фиксирует все действия пользователя, независимо от того, правильны ли они. Фиксация действий производится на языке кода VBA и будет осуществляться до остановки записи. Для остановки записи предназначена появляющаяся после начала записи кнопка Остановка (рисунок 3).

Для записи кода действий, выполняемых макросом, последовательно выполните процедуры по выводу на печать лицевой стороны командировочного удостоверения:

  • выполните команду Файл | Печать;
  • в появившемся диалоговом окне Печать в области Печатать введите номера страниц с 1-й по 1-ю и нажмите кнопку ОК;
  • для остановки записи макроса нажмите кнопку Остановка или выполните команду Сервис | Макрос | Остановка записи.

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

Просмотр записанного макроса

Просмотр записанного макроса заключается в просмотре непосредственно сгенерированного текста кода VBA при его записи. Для этого, выполнив команду Сервис | Макрос | Редактор Visual Basic или нажав комбинацию клавиш Alt+F11, откройте приложение Microsoft Visual Basic (рисунок 4).

Рис.4. Приложение Microsoft Visual Basic с записанными макросами вывода на печать лицевой и обратной стороны документа

При запуске РедактораVisual Basic в этом приложения присутствуют три основных окна:

  • окно проекта;
  • окно свойств;
  • окно программы.

Окно проекта Окно проекта расположено слева вверху (рисунок 4) и содержит несколько папок. В нашем случае имеются папка Microsoft ExcelОбъекты (рисунок 5), в которой находятся объекты, с которыми производятся действия:

Рис.5. Окно проекта

  • Лист1 (КомандировочноеУдостоверение);
  • Лист2 (ЖурналРегистрацииКУ);
  • ЭтаКнига (в которой записаны эти макросы).

Вторая папка — Модули, в которой находится элемент Модуль1 (рисунок 4), содержащий записанные макросы вывода на печать 1-й и 2-й страницы.

При создании диалоговых окон и форм может находиться и третья папка — Формы, но здесь она рассмотрена не будет.

Окно проекта предназначено для управления различными элементами проекта VBA и открывается с помощью команды Вид | Окно проекта.

Если обратиться к окну проекта, показанному на рисунке 5, то в объекте Модули находится один элемент Модуль1. Это тот элемент, который создан автоматически при записи макросов вывода документов на печать.

Окно свойств Окно свойств находится в левом нижнем углу (рисунок 4).

В окне свойств перечисляются характеристики элементов проекта. Для изменения свойств элемента, выделите его в окне проекта и тогда его характеристики отобразятся в окне свойств. Если выделить элемент Модуль1, то в окне свойств отобразится его имя: Модуль1. Для изменения имени модуля в окне свойств измените значение свойства Name, введя новое имя — Печать (рисунок 6).

Рис.6. Окна Проектов и Свойств с переименованным элементом Модуль1 в элемент Печать

Окно программы Окно программы самое большое и находится справа (рисунок 4).

Именно в нем происходит запись текста макроса на языке Visual Basic of Application. Окно программы имеет два режима просмотра:

  • представление полного модуля;
  • представление процедуры.

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

В режиме представления процедуры отображается только один макрос. Для перехода к следующему макросу, его имя нужно выбрать в раскрывающемся списке в верхней части окна программы или воспользоваться клавишами Ctrl +PageUp и Ctrl+PageDown.

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

Исследование записанного макроса Ознакомимся с кодом VBA макроса ПечатьЛицевойСтороны. Если окно программ закрыто, то для просмотра макроса в окне проекта активизируйте двойным нажатием на правую кнопку мыши элемент Печать объекта Модули.

Текст макроса в окне программы содержит следующие элементы (рисунок 4):

  • ключевые слова Sub и End Sub, означающие начало и конец текста макроса, шрифт которых выделен синим цветом;
  • имя макроса, которое следует за ключевым словом Sub начала макроса;
  • комментарии, шрифт которых выделен зеленым цветом;
  • код VBA или непосредственно записанные действия, которые выполняет макрос.

Комментарии. В нашем примере это те данные, которые вводились в диалоговое окно Запись макроса (рисунок 2). Строка комментария предназначена для описания действий и начинается с апострофа. Удаление комментариев никоим образом не влияет на выполнение макроса. Более подробно комментарии будут рассмотрены далее.

И, наконец, код записанных действий, выполняемых макросом:

Текст макроса, который начинается и заканчивается ключевыми словами Sub и End Sub, называется подпрограммой или процедурой.

На следующем шаге мы рассмотрим запуск записанных макросов на выполнение из приложения Excel.

Как из VBA выбрать и установить принтер для Excel

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

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

Но зачастую необходимо не просто отправить на печать, а еще и на определенный принтер. При этом не просто указать другой принтер, а дать возможность выбрать принтер пользователю, не задавая его жестко в коде. Ведь у разных пользователей могут быть разные принтеры подключены. Часто такое необходимо при печати этикеток или других специфических материалов(открытки, буклеты и т.п.) потому, что для них как правило используют не стандартный офисный черно-белый лазерный принтер, а некий более продвинутый с возможностью заправки специфических листов. Как видно из кода выше — там нет и малейшего намека на указание принтера. Хотя в принципе параметр такой есть — ActivePrinter.
На самом деле есть несколько вариантов выбора принтера, но я покажу самый надежный (как оказалось) и в тоже время самый простой — через стандартный диалог выбора принтеров:

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

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

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

Option Explicit ‘глобальная переменная для хранения значения выбранного принтера при печати из VBA Public sNowPrinter As String ‘————————————————————————————— ‘ Procedure : ChangePrinter ‘ Author : The_Prist(Щербаков Дмитрий) ‘ Purpose : Функция выбора принтера для печати из кода 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 ‘————————————————————————————— ‘ Procedure : DoPrint ‘ Author : The_Prist(Щербаков Дмитрий) ‘ Purpose : Функция печати указанного кол-ва копий указанного диапазона ячеек ‘ rr — ссылка на диапазон ячеек — Range(«A1:B10») ‘ если не указан — на печать выводится весь активный лист ‘ lCopies — целое число, указывающее сколько копий выводить на печать ‘ если не указан — на печать выводится одна копия ‘————————————————————————————— Function DoPrint(Optional rr As Range = Nothing, Optional lCopies As Long = 1) Dim sActPrinter As String ‘проверяем, установлен ли ранее принтер для печати If sNowPrinter = «» Or 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 If rr Is Nothing Then ‘печатаем активный лист на выбранном принтере ActiveSheet.PrintOut Copies:=lCopies, ActivePrinter:=sActPrinter Else ‘печатаем указанный диапазон ячеек на выбранном принтере rr.PrintOut Copies:=lCopies, ActivePrinter:=sActPrinter End If End Function

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

  • rr — ссылка на диапазон ячеек (например Selection для вывода на печать выделенного диапазона или Range(«A1:B10») для вывода на печать конкретного диапазона, вне зависимости от того, какой выделен). Если этот аргумент не указан, то на печать выводится весь активный лист.
  • lCopies — целое число, указывающее сколько копий выводить на печать. Если аргумент не указан — на печать выводится одна копия.

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

    Sub TestPrint() DoPrint Selection, 2 End Sub

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

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

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

    Выбор принтера (74,5 KiB, 674 скачиваний)

    Статья помогла? Поделись ссылкой с друзьями!

    Поиск по меткам

    Здравствуйте! Столкнулся с проблемой, после установки любого принтера в системе пользователя один из файлов Excel при запуске начинает обращаться к подсистеме печати, и показывает окно выбора принтеров, точно такое же как у Вас в статье, далее все запускается в штатном режиме, но не надолго, при попытке выделить ячейки и скопировать их появляется сообщение о том, что печать невозможна так как буфер переполнен, при том что я не пытаюсь печатать, а всего лишь пытаюсь скопировать ячейки, это делает работу с файлом просто навсего невозможной. Запуск на другой машине привел к тому же самому, и на той и на другой установлен Office 2010, могу сделать вывод что дело в файле, но куда копать не знаю, он очень объемный и обладает кучей формул, но без макросов и как я понял без VBA скриптов. Просмотрел данный файл в редакторе VBA ничего не нашел, как избавиться от этой проблемы?

    Антон, в данной ситуации могу посоветовать лишь одно: отключить принтер от ПК, сбросить полностью параметры печати в этой книге, а так же удалить все представления(Вид -Представления).
    Если книга в общем доступе — сначала снять общий доступ, удалив журнал и представления.

    Доброго времени суток. Функция ChangePrinter работает отлично, спасибо Вам, Ваши статьи очень информативны. Однако у меня проблема вот в чем. Функция выбора принтера мне нужна не для выбора принтера по принципу хочу не хочу, а по принципу, работаетне работает. Поэтому, Ваша форма позволяет мне выбрать принтер, но сначала я должен определить какой из принтеров сейчас в сети, а это для обычного юзера может стать неразрешимой задачей) Есть ли возможность добавить в форму статус принтера? Или это «много кода»))? В любом случае, Спасибо.

    Здравствуйте!
    Есть ли возможность создать TextBox в UserForm, и в зависимости от числа в TextBox (1, 2, 3. ), выводить на печать соответствующее число копий?

    Поделитесь своим мнением

    Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме — добро пожаловать на Форум

    Выборочная печать листов в Excel? Печать документов в Excel

    При всем многообразии стандартных возможностей для печати данных в Excel, автору этой статьи пришлось столкнуться с такой задачей, решить которую стандартными средствами оказалось невозможно. Задача состояла в том, чтобы распечатать не все, а несколько листов в каждом из двадцати пяти файлов Excel, но обо всем по порядку.

    Для начала рассмотрим различные возможности, которые предоставляет Excel для печати данных, содержащихся в рабочих книгах, а для определенности остановимся на Excel 2007. В других версиях могут отличаться пункты меню и их названия, а по сути, все действия предельно похожи. Для избежания путаницы определимся с терминами: лист — это часть рабочей книги Excel, а страница — это часть листа, ограниченная размерами бумажного носителя, на который производится печать документа.

    Для удобства выведем значок «Быстрая печать» на панель быстрого доступа.

    «Быстрая печать» от «печати» отличается тем, что отправляет документ на используемый по умолчанию принтер без внесения каких-либо изменений, в то время как «Печать» подразумевает выбор принтера, числа копий и других параметров печати перед печатью документа.

    Как распечатать диапазон ячеек?

    Выделить необходимый для печати диапазон ячеек, после чего перейти на вкладку «Разметка страницы» и в группе «Параметры страницы» зайти в меню кнопки «Область печати» после чего выбрать пункт «Задать». Таким образом, задается область печати и щелчок по кнопке «Быстрая печать» отправит эту область на принтер.

    Как распечатать страницу или несколько страниц листа?

    Для того чтобы распечатать определенную страницу документа, расположенного на листе рабочей книги Excel, необходимо щелкнуть по кнопке «Office» в левом верхнем углу окна, в меню типичных команд навести курсор на пункт печать и в списке команд выбрать одноименный пункт «Печать». Откроется окно «Печать». Окно «Печать» можно вызвать также сочетанием горячих клавиш Ctrl+P (P- это первая буква от английского слова print).

    Выбрав в этом окне опцию «Страницы» можно задать регуляторами значения нужных страниц и при необходимости можно задать число копий в группе «Копии». Для отправки выбранных страниц на принтер нажимается кнопка «ОК».

    Как распечатать таблицу?

    Для печати таблицы данных, необходимо выделить любую ячейку из этой таблицы, после чего вызвать окно «Печать» сочетанием горячих клавиш Ctrl+P, либо через кнопку «Office»/пункт «Печать»/кнопку «Печать». В этом окне, в группе «Вывести на печать» нужно активировать опцию «Таблицу», при необходимости задать число копий и нажать кнопку «ОК» для запуска процесса печати.

    Как распечатать лист?

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

    Как распечатать несколько листов?

    В окне открытой книги необходимо выделить нужные листы, щелкая по их ярлыкам с нажатой клавишей Ctrl. После этого надо вызвать окно «Печать» одним из вышеописанных способов, например через сочетание клавиш Ctrl+P. При необходимости можно установить число копий (оно не должно превышать 999) и снять/установить флажок у пункта «Разобрать по копиям». При включенном флажке принтер распечатает документ, начиная с первой и заканчивая по последней страницей заданное количество раз, а при отключенном, сначала первую страницу документа заданное число раз, затем вторую и так далее.

    Как распечатать книгу?

    Для печати всей книги целиком, то есть всех страниц на всех листах открытой рабочей книги необходимо вызвать окно «Печать» одним из двух способов, описанных выше (например, нажав Ctrl+P) и в группе опций «Вывести на печать» выбрать пункт «Всю книгу».

    Как распечатать несколько книг?

    При печати нескольких книг действует одно ограничение – все файлы этих книг должны находиться в одной папке. Через кнопку «Office» и пункт меню типичных команд «Открыть» (либо нажатием сочетания клавиш Ctrl+O) необходимо выбрать папку, в которой расположены файлы книг и при нажатой клавише Ctrl поочередно щелкнуть по всем нужным файлам книг. После этого в окне «Открытие документа» надо раскрыть меню кнопки «Сервис» и выбрать пункт «Печать».

    Как распечатать несколько листов в нескольких книгах?

    А что если необходимо распечатать по одному или по несколько листов из множества файлов? Или отправить на печать лист с определенным названием, из выбранных рабочих книг? Придется либо перебирать один за другим все файлы книг, отправляя на печать нужные листы, либо печатать полностью все книги, а затем выбрасывать в корзину бумажные листы с отпечатанными лишними данными. Оптимально решить эту задачу поможет надстройка для Excel, в диалоговом окне которой можно выбрать необходимые для печати файлы и задать номера или имена листов, которые требуется распечатать.

    Надстройка позволяет:

    1. Одним кликом мыши вызывать диалоговое окно надстройки прямо из панели инструментов Excel;

    2. выбирать необходимые файлы для печати;

    3. задавать по имени или по номерам листы из выбранных файлов для печати;

    4. при необходимости задавать поля, аналогично тому, как это делается при стандартной печати;

    5. изменять ориентацию страниц с книжной на альбомную;

    6. устанавливать количество копий;

    7. задавать номера страниц для печати (если номера не установлены, то на печать отправляются все страницы);

    8. устанавливать масштаб в процентах от натуральной величины (в пределах от 10 до 400).

    *Для этой надстройки действует следующее ограничение: через диалоговое окно изменить можно только поля, количество копий, номера и ориентацию страниц.

    Как распечатать первые (либо другие заданные) страницы всех (либо только определенных) листов в книгах Excel?

    При помощи представленной выше надстройки можно решить и еще более сложную задачу. Например, распечатать только первые страницы на всех листах рабочей книги, отправить на печать любую страницу, либо диапазон страниц на листах, определенных пользователем. Запустить выборочную печать страниц и листов как в одной, так и в нескольких рабочих книгах.

    Макрос на VBA Excel – Формируем документы по шаблону

    Очень часто бывает такое, что нужно сформировать документы по определенному шаблону, на основе каких-то данных, например, по каждому сотруднику или по каждому лицевому счету. И делать это вручную бывает достаточно долго, когда этих самых сотрудников или лицевых счетов много, поэтому сегодня мы рассмотрим примеры реализации таких задач в Excel с помощью макроса написанного на VBA Excel.

    Немного поясню задачу, допустим, нам необходимо сформировать какие-то специфические документы по шаблону массово, т.е. в итоге их получится очень много, как я уже сказал выше, например, по каждому сотруднику. И это нужно сделать непосредственно в Excel, если было бы можно это сделать в Word, то мы бы это сделали через «Слияние», но нам нужно именно в Excel, поэтому для этой задачи мы будем писать макрос.

    Мы с Вами уже выгружали данные по шаблону через клиент Access из базы MSSql 2008 в Word и Excel вот в этой статье — Выгрузка данных из Access в шаблон Word и Excel. Но сейчас допустим, у нас данные располагаются в базе, в клиенте которой нельзя или слишком трудоемко реализовать такую задачу, поэтому мы просто выгрузим необходимые данные в Excel и на основе таких данных по шаблону сформируем наши документы.

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

    Напомню, что на данном сайте тема VBA Excel уже затрагивалась, например, в материале – Запрет доступа к листу Excel с помощью пароля

    И так приступим!

    Пишем макрос на VBA Excel по формированию документов

    Реализовывать нашу задачу будем на примере «Электронной карточке сотрудника» (я это просто придумал:), хотя может такие и на самом деле есть), т.е. документ в котором хранится личные данные сотрудника вашего предприятия, в определенном виде, именно в Excel.

    Примечание! Программировать будем в Excel 2010.

    И для начала приведем исходные данные, т.е. сами данные и шаблон

    Данные.

    Лист, на котором расположены эти данные так и назовем «Данные»

    Шаблон.

    Лист, на котором расположен шаблон, тоже так и назовем «Шаблон»

    Далее, нам необходимо присвоить имена полей для вставки, так более удобней к ним обращаться чем, например, по номеру ячейки.

    Это делается очень просто, выделяете необходимую ячейку или диапазон, и жмете правой кнопкой мыши и выбираете «Присвоить имя», пишите имя ячейки и жмете «ОК»

    Свои поля я назвал следующим образом:

    • ФИО – fio;
    • № — number;
    • Должность – dolgn;
    • Адрес проживания – addres;
    • Тел. № сотрудника – phone;
    • Комментарий – comment.

    Код макроса на VBA Excel

    Для того чтобы написать код макроса, открывайте на ленте вкладку «Разработчик», далее макросы.

    Примечание! По умолчанию данной вкладке в Excel 2010 может и не быть, чтобы ее отобразить нажмите правой кнопкой по ленте пункт меню «Настройка ленты»

    затем, в правой области поставьте галочку напротив пункта «Разработчик»

    После вкладка разработчик станет отображаться на ленте.

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

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

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

    и после выполнения у Вас в той же папке появится вот такие файлы

    Вот с таким содержимым:

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

    Похожие статьи

  • Ссылка на основную публикацию
    Похожие публикации
    Adblock
    detector