Remkomplekty.ru

IT Новости из мира ПК
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel область печати

Определить диапазон печати, если «Область печати не задана»

Здравствуйте, уважаемые форумчане! Прошу у вас помощь.

Мне необходимо для листов определять диапазон (прямоугольную область), который пойдет на печать вне зависимости от того, задана или не задана «Область печати» явно, то есть ту область, которую видно в Страничном режиме (Вид — Страничный режим). Если область печати задана явно, я её могу получить на листе через .PageSetup.PrintArea, а если область печати не задавалась явно, это свойство вернет пустую строку. Вот этот случай мне и надо разрешить. .Cells.SpecialCells(xlLastCell) здесь не поможет, так как часто последняя ячейка уходит дальше того, что уйдет на печать по умолчанию.

Добавлено через 1 час 17 минут
Чтобы понять, о чем я тут пишу, попробуйте на пустом листе включить Страничный режим, в ячейку [D8] вписать символ скажем ‘1’, а затем в [H32] поставить формат числа, отличный от общего. Так вот, мне нужно найти положение ячейки [D8], при этом понимая, что .PageSetup.PrintArea равна пустой строке, а .Cells.SpecialCells(xlCellTypeLastCell) указывает на [H32] Помогите мне найти программно ячейку [D8], заранее не зная содержимого листа..

Задана матрица размером NxM. Определить k — количество «oco6ых» элементов матрицы, считая элемент «особым», если он больше суммы остальных элементов с
Задана матрица размером NxM. Определить k — количество "oco6ых" элементов матрицы, считая элемент.

Excel при печати разбивает область печати по ячейкам
При масштабировании страницы (чтобы документ влез на одну страницу) Ексель автоматом определяет.

Как при открытии или печати отчета вывести «Нет данных», если в источнике нет записей?
Как при открытии или печати отчета вывести ‘НЕТ ДАННЫХ’ если в источнике нет записей ? Если нет.

Стили для страниц «Версия для печати» / «Рекомендовать другу»
Приветствую! Как можно сделать стили для окон страниц ‘Версия для печати’ и ‘Рекомендовать другу’.

Если не подойдёт отпишитесь.

С уважением, SysUnit.

SysUnit, спасибо, но к сожалению не подойдет. Мне нужно универсальное решение. Ваш вариант подойдет только как частный случай: крайний левый столбец можно определить по 4 строке, нижнюю строку — по 1 столбцу. Мне нужно универсальное решение, которое сработает на любом листе с любым раскладом данных и форматов ячеек (заранее неизвестном программисту), такое же надёжное, как UsedRange, или как .SpecialCells(xlCellTypeLastCell), но с иным вложенным в него смыслом.

toiai, ваше решение, если приглядеться и проверить всегда выдает диапазон, совпадающий с UsedRange 🙂 Ведь .SpecialCells(xlCellTypeLastCell) является правым нижним краем диапазона .UsedRange

Сейчас подумал, можно сформулировать задачу как поиск модификации UsedRange, нечувствительной к форматированию — только на слое данных (формул, включая значения). Я раньше уже решал эту задачу итерационно, но это кажется мне нерациональным и медленным путем. Суть том, чтобы начать с .SpecialCells(xlCellTypeLastCell) брать диапазоны от .Range(.Cells(lr, 1), .Cells(lr, lc)), их свойство .Text сравнивать с «», двигаться вверх до тех пор, пока не дойдем до данных (непустых значений), как найдем последнюю строку. Тем же методом двигаемся влево проверяя столбцы. Такой метод работает, но не лишен недостатков: 1) на практике итерации могут дико тормозить процесс; 2) свойство .Text не увидит формул, возвращающих пустое значение.

Мне всегда казалось, что раз «Страничный режим» умеет показывать то, что мне надо, значит это уже реализовано в Excel наиболее эффективным образом. Другой вопрос в том, есть ли доступ через объектную модель Excel к параметрам такой области?

Установка и удаление области печати на листе

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

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

На листе может быть несколько областей печати. Каждая область печати будет напечатана как отдельная страница.

Примечание: Снимки экрана, приведенные в этой статье, были сделаны в Excel 2013. Если вы используете другую версию, то в ней может быть немного другой интерфейс, но если не указано иное, функции будут такими же.

В этой статье

Установка одной или нескольких областей печати

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

Совет: Чтобы задать несколько областей печати, удерживая нажатой клавишу CTRL, щелкните области, которые вы хотите распечатать. Каждая из этих областей выводится на печать на отдельной странице.

На вкладке Разметка страницы в группе Параметры страницы нажмите кнопку область печати, а затем выберите команду установить область печати.

Примечание: Заданная область печати сохраняется при сохранении книги.

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

Добавление ячеек в существующую область печати

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

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

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

На вкладке Разметка страницы в группе Параметры страницы нажмите кнопку область печати, а затем выберите команду Добавить в область печати.

При сохранении книги область печати также сохраняется.

Очистка области печати

Примечание: Если на листе есть несколько областей печати, Очистка области печати приводит к удалению всех областей печати на листе.

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

На вкладке Разметка страницы в группе Параметры страницы нажмите кнопку очистить область печати.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.

Vba excel область печати

Формулировка задачи:

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

здесь не поможет, так как часто последняя ячейка уходит дальше того, что уйдет на печать по умолчанию.

Это меня настораживает и не может найти ничего близкого к решению, любая помощь оценивается.

Читать еще:  Vba excel текущий лист

Пример. У меня есть рабочая книга с несколькими листами от A до H. Каждый лист имеет идентичные настройки страницы (диапазоны) на двух страницах, причем каждая настройка страницы не подключена к другой (пустые строки между страницами). Все листы защищены.

Задача — я хочу поместить макрокоманду в Рабочий лист D, который напечатает страницу 2 Листа C и Страница 1 листа D в одном задании на печать. Идея состоит в том, что с принтером, установленным в дуплекс, у меня есть две страницы, напечатанные с одной стороны одного листа бумаги. Я видел некоторые решения, требующие конвертации в pdf, но не хотел бы, если бы я мог его избежать.

Кто-нибудь может решить эту проблему?

vba excel-vba excel

1 ответ

Это общий код «Записанный макрос». Но это основа того, что вы хотите. ВАМ ДОЛЖНО ИЗМЕНИТЬ SLIGHLTY, чтобы работать с вашей установкой.

В основном, что вы будете делать, вы бы установили области печати для листов, которые вы хотите распечатать. поэтому там, где сказано, что ActiveSheet.PageSetup.PrintArea = «$A$1:$D$47» thats page 1 на этом листе в моей книге excel. затем: ActiveSheet.PageSetup.PrintArea = «$A$48:$D$94» — это страница 2 на другом листе. то вам нужно перенести эти 2 листа на первую и вторую (или это не сработает). строка ActiveWorkbook.PrintOut From:=1, To:=2, Copies:=1, Collate:=True, _ IgnorePrintAreas:=False печатает всю книгу, но она печатается только со страниц с 1 по 2. ActiveWorkbook.PrintOut From:=1, To:=2, Copies:=1, Collate:=True, _ IgnorePrintAreas:=False образом, в основном, я задайте области печати для двух разных листов на одну страницу на обоих листах. поэтому при печати этих листов печатается только область печати. то эти 2 листа являются 1-й и 2-й, поэтому при печати страниц с 1 по 2 он просто распечатает 1 страницу с обоих листов. если у вас установлен принтер на 2 стороны, он будет печатать на обеих сторонах 1 страницы.

для динамической установки области печати вы можете использовать цикл для обработки строк, а если они не пустые, добавьте их в область печати. пример того, как иметь несколько областей печати: ActiveSheet.PageSetup.PrintArea = «$A$1:$D$14,$A$19:$D$

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

так что приспосабливайтесь к тому, что с петлей, и это поможет вам ближе.

Что делает макрос: Этот макрос позволяет автоматически задать область печати.

Как макрос работает

В этом простом макросе, мы используем свойство PrintArea, чтобы определить диапазон ячеек, которые будут включены при печати. Как вы можете видеть, мы просто используем свойство PrintArea с адресом UsedRange. Свойство UsedRange дает диапазон, который охватывает ячейки, которые были использованы для ввода данных.
Чтобы сохранить эту динамику, мы реализуем код в изменении событии рабочего листа:

Код макроса

Как использовать

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

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. В окне проекта, найти свой проект / имя рабочей книги и нажмите на знак плюс рядом с ней, чтобы увидеть все листы.
  3. Нажмите на лист, в котором вы хотите, чтобы вызвать код.
  4. Выберите Изменить событие из событий в раскрывающемся списке.
  5. Введите или вставьте код.

Vba 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, 772 скачиваний)

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

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

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

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

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

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

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

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

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