Количество листов для печати макросы excel

Содержание

  1. Как напечатать несколько листов (или все листы) в Excel за один раз
  2. Печатайте все листы за один раз
  3. Выборочная печать листов в Excel? Печать документов в Excel
  4. Как распечатать диапазон ячеек?
  5. Как распечатать страницу или несколько страниц листа?
  6. Как распечатать таблицу?
  7. Как распечатать лист?
  8. Как распечатать несколько листов?
  9. Как распечатать книгу?
  10. Как распечатать несколько книг?
  11. Как распечатать несколько листов в нескольких книгах?
  12. Надстройка позволяет:
  13. Как распечатать первые (либо другие заданные) страницы всех (либо только определенных) листов в книгах Excel?
  14. Как распечатать все книги в папке
  15. Как макрос работает
  16. Код макроса
  17. Как работает этот код
  18. Как использовать
  19. Excel макрос для печати всех листов
  20. Excel макрос для печати всех листов

Как напечатать несколько листов (или все листы) в Excel за один раз

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

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

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

Печатайте все листы за один раз

В Excel есть встроенная функция, которая позволяет указать печать всех листов за один раз.

Ниже приведены шаги для печати всех листов в книге:

  1. Перейдите на вкладку Файл.
  2. Нажмите на опцию печати
  3. На странице «Печать» щелкните раскрывающееся меню «Параметры печати».
  4. Нажмите Распечатать всю книгу
  5. Нажмите на печать

Вышеупомянутые шаги распечатают все листы в книге. Если у вас установлена ​​область печати на некоторых листах, то будет напечатана только эта область печати.

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

А что, если вы хотите напечатать только отдельные листы, а не всю книгу.

Источник

Выборочная печать листов в 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?

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

Источник

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

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

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

В этом макросе, мы используем функцию Dir. Функция Dir возвращает строку, которая представляет собой имя файла. С её помощью в указанной папке мы возьмём имя каждого файла (с расширением “.xlsx”), затем будем открывать каждый файл, выводить на печать и закрывать файл после сохранения.

Код макроса

Как работает этот код

  1. Объявляем переменную MyFiles (тип строчный), которая будет фиксировать имя каждого файла.
  2. В шаге 2, макрос использует функцию DIR, чтобы указать Тип файла и адрес папки. Обратите внимание, что код ищет файлы в формате xlsx. Это означает, что только .xlsx файлы будут передаваться. Если вы ищете .xls файлы, вам необходимо изменить расширение.
  3. Открываем файл и распечатываем один экземпляр Лист1. Можете внести изменения в названия листа, который необходимо напечатать. Также можете изменить количество копий.
  4. Ищем снова по кругу, чтобы найти больше файлов. Если нет файлов, переменная MyFiles пустая.
    Если это так, то цикл и макрос завершается.

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

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

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.

Источник

Excel макрос для печати всех листов

= Мир MS Excel/Макрос печати — Мир MS Excel

Войти через uID

Войти через uID

Модератор форума: китин, _Boroda_

Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос печати (Макросы/Sub)

Макрос печати

BlackRaven Дата: Вторник, 29.05.2018, 08:05 | Сообщение № 1

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

Простой макрос печати диапазона есть:
[vba]

[/vba]
Что нужно добавить для горизонтальной ориентации и печати выделенного диапазона на 1 лист?

Заранее большое человеческое спасибо! )))

P.S. с ориентацией справился (вроде). Добавил следующую строку ниже .DisplayDrawingObjects = xlHide:
[vba]

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

Простой макрос печати диапазона есть:
[vba]

[/vba]
Что нужно добавить для горизонтальной ориентации и печати выделенного диапазона на 1 лист?

Заранее большое человеческое спасибо! )))

P.S. с ориентацией справился (вроде). Добавил следующую строку ниже .DisplayDrawingObjects = xlHide:
[vba]

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

Простой макрос печати диапазона есть:
[vba]

[/vba]
Что нужно добавить для горизонтальной ориентации и печати выделенного диапазона на 1 лист?

Источник

Excel макрос для печати всех листов

Модератор форума: китин, _Boroda_

Мир MS Excel » Вопросы и решения » Вопросы по VBA » Печать разного количества листов по условию (Макросы/Sub)

Печать разного количества листов по условию

Garik007 Дата: Четверг, 18.05.2017, 18:19 | Сообщение № 1
KuklP Дата: Четверг, 18.05.2017, 18:37 | Сообщение № 2
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

Garik007 Дата: Четверг, 18.05.2017, 20:45 | Сообщение № 3

KuklP, файл смогу только завтра приложить, только как-то странно получается условия формирования Range(«N44»). везде одинаковы, а печать идет только первых двух. Если убрать 44 и 45 будет без проблем печатать 46 и 47, убрать 46 и 47 будет нормально печатать 48 и 49 и так далее, но только всегда первые 2 листа.
А где его взять этот родительский объект? Указание вручную цифр на листе ситуацию вроде не меняет, завтра попробую вместо Range(«N44»). указать конкретные цифры в самом макросе.
Листов около сотни и вручную указывать при печати количество экземпляров каждого как-то муторно получается.

UPD. А вот и сам файл.

KuklP, файл смогу только завтра приложить, только как-то странно получается условия формирования Range(«N44»). везде одинаковы, а печать идет только первых двух. Если убрать 44 и 45 будет без проблем печатать 46 и 47, убрать 46 и 47 будет нормально печатать 48 и 49 и так далее, но только всегда первые 2 листа.
А где его взять этот родительский объект? Указание вручную цифр на листе ситуацию вроде не меняет, завтра попробую вместо Range(«N44»). указать конкретные цифры в самом макросе.
Листов около сотни и вручную указывать при печати количество экземпляров каждого как-то муторно получается.

UPD. А вот и сам файл. Garik007

Сообщение KuklP, файл смогу только завтра приложить, только как-то странно получается условия формирования Range(«N44»). везде одинаковы, а печать идет только первых двух. Если убрать 44 и 45 будет без проблем печатать 46 и 47, убрать 46 и 47 будет нормально печатать 48 и 49 и так далее, но только всегда первые 2 листа.
А где его взять этот родительский объект? Указание вручную цифр на листе ситуацию вроде не меняет, завтра попробую вместо Range(«N44»). указать конкретные цифры в самом макросе.
Листов около сотни и вручную указывать при печати количество экземпляров каждого как-то муторно получается.

UPD. А вот и сам файл. Автор — Garik007
Дата добавления — 18.05.2017 в 20:45

Источник

Adblock
detector

 

Olga_L

Пользователь

Сообщений: 31
Регистрация: 17.02.2015

Здравствуйте, хочу сделать печать нескольких листов одной кнопкой, оптом, так саказать. Но как сделать не знаю.  При этом есть условие: сколько листов печатать — зависит от значения в конкретной ячейке. Подскажите пожалуйста как в VB это реализовать. Знание VB на уровне «записать» или «копировать — вставить». Потому и не получаеться ничего.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#2

25.08.2015 10:21:13

Цитата
Olga_L написал: Потому и не получаеться ничего.

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

Знание VB на уровне «записать»

приводит к примерно такому результату:

Код
Sub Макрос1()
    Sheets(Array("1-4", "5-8", "9-12")).Select
    Sheets("1-4").Activate
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub

от него рукой подать до рабочего макроса.

но в Вашем файле даже таких попыток нет.

Изменено: ikki25.08.2015 10:22:55

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Olga_L

Пользователь

Сообщений: 31
Регистрация: 17.02.2015

 Уважаеммый Ikki, возможно для Вас и «рукой подать», а для меня привязать записанный макрос «быстрой печати» к условию пока целая проблема, на решение которой было потрачено целое утро. Поверьте, могла бы решить сама, не стала бы обращаться на форум. А попыток в моем файле Вы не увидели, потому как, я не была уверена в том, что в даном случае нужно начинать с записи «быстрой печати».

 

Olga_L

Пользователь

Сообщений: 31
Регистрация: 17.02.2015

Я не прошу решить задачу за меня. Прошу, чтобы подсказали хотя бы каким образом ее решить.

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#5

25.08.2015 10:59:31

Olga_L, проверяйте.

Скрытый текст

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Olga_L

Пользователь

Сообщений: 31
Регистрация: 17.02.2015

Мне выдает ошибку. Run-time error 438. Пишет что «обьект не поддердивает это свойство или метод».

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#7

25.08.2015 11:32:04

Цитата
Olga_L написал: Прошу, чтобы подсказали хотя бы каким образом ее решить

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

Цитата
Olga_L написал: Я не прошу решить задачу за меня

;) Не получится — сообщите.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Olga_L

Пользователь

Сообщений: 31
Регистрация: 17.02.2015

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

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#9

25.08.2015 12:25:38

Olga_L, простите, что не угодил. :)

Скрытый текст

Так понятней?

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Если яч. H3=3, то надо будет напечатать листы с 1_4 по 17_20, т.е. ВСЕ листы?
Ведь 3 < 20 ?
Я хочу сказать, что по Вашим условиям, всегда надо печатать все листы.

Изменено: Михаил Лебедев25.08.2015 12:33:51

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

Михаил Лебедев, срабатывает приоритетное правило. Как понял, правила взаимоисключающие.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Михаил Лебедев

Пользователь

Сообщений: 2856
Регистрация: 17.01.2013

#12

25.08.2015 12:48:48

Цитата
JayBhagavan написал:
Как понял, … т .д. …

JayBhagavan

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

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Михаил Лебедев

Пользователь

Сообщений: 2856
Регистрация: 17.01.2013

#13

25.08.2015 13:06:42

Если логика от

Olga_L

именно такая, как понял

JayBhagavan

, тогда вот такой еще вариант (правда, в отличие от вар. от

JayBhagavan

с elseif, мой печатает листы в обратном порядке ☺):

Код
Sub procPrint()
    var_val = Worksheets("Лист1").[H3].Value
    Select Case var_val
    Case Is > 16: Sheets("17-20").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Case Is > 12: Sheets("13-16").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Case Is > 8:  Sheets("9-12").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Case Is > 4:  Sheets("5-8").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Case Is > 0: Sheets("1-4").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    End Select
End Sub

Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/

 

Imelman

Пользователь

Сообщений: 9
Регистрация: 23.04.2017

#14

28.10.2017 13:20:04

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

Код
Sheets("2").Range("A1:I70").PrintOut Copies:=1, Collate:=True
Sheets("3").Range("A1:I70").PrintOut Copies:=1, Collate:=True

Может как-то по умному Range (через запятую) написать?
Возможно ли вообще?  

Изменено: Imelman28.10.2017 13:21:12

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

#15

28.10.2017 13:26:26

Можно так:

Код
Sheets(Array("2", "3")).PrintOut Copies:=1, Collate:=True

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

 

Imelman

Пользователь

Сообщений: 9
Регистрация: 23.04.2017

#16

28.10.2017 15:09:28

Да, в такой форме сработало:

Код
    Sheets(Array("1", "2")).PrintOut Copies:=1, Collate:=True, _
       IgnorePrintAreas:=False

Спасибо

Skip to content

На чтение 1 мин. Просмотров 3.1k.

Что делает макрос: Если вы хотите распечатать все листы файла (или отдельные) вручную в Excel, для этого нужно зажать клавишу CTRL на клавиатуре, выбрать листы, которые требуется распечатать, и нажать кнопку печать. Если вы делаете это достаточно часто, можете использовать этот простой макрос.

Содержание

  1. Как работает макрос
  2. Код макроса
  3. Как использовать

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

Это очень просто. Все, что нам нужно сделать — это выбрать листы, которые мы хотим напечатать. Затем мы используем метод печати, чтобы запустить. Все листы, которые вы выбрали, печатаются на одном дыхании.

Код макроса

Sub PechatOpredelennihListov()
'Печать определенных листов
ActiveWorkbook.Sheets( _
Array("Лист1", "Лист3", "Лист5")).PrintOut Copies:=1
End Sub

Хотите напечатать все рабочие листы в книге? Это еще проще.

Sub PechatVsehListov()
'Печать всех листов
ActiveWorkbook.Worksheets.PrintOut Copies:=1
End Sub

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

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши personal.xlb в окне Project.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код во вновь созданном модуле.

Печать разного количества листов по условию

Garik007

Дата: Четверг, 18.05.2017, 18:19 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 102


Репутация:

0

±

Замечаний:
0% ±


Excel 2013, 2016

Добрый день. Написал макрос для печати нескольких копий листов из книги в зависимости от количества, устанавливаемого в ячейках N44-N62 (в данных ячейках формула: если сумма > 0, то печатается определенное количество).
[vba]

Код

Sub печать()
  Application.EnableEvents = False
  If Application.Dialogs(xlDialogPrint).Show = True Then
    Worksheets(«a2-1»).PrintOut Copies:=Range(«N44»).Value
    Worksheets(«b10»).PrintOut Copies:=Range(«N45»).Value
    Worksheets(«b12-1»).PrintOut Copies:=Range(«N46»).Value
    Worksheets(«b18-1»).PrintOut Copies:=Range(«N47»).Value
    Worksheets(«b23-1»).PrintOut Copies:=Range(«N48»).Value
    Worksheets(«c55»).PrintOut Copies:=Range(«N49»).Value
    Worksheets(«c55-1»).PrintOut Copies:=Range(«N50»).Value
    Worksheets(«c11»).PrintOut Copies:=Range(«N51»).Value
    Worksheets(«d13-1»).PrintOut Copies:=Range(«N52»).Value
    Worksheets(«d13-2»).PrintOut Copies:=Range(«N53»).Value
    Worksheets(«d7-1»).PrintOut Copies:=Range(«N54»).Value
    Worksheets(«e9»).PrintOut Copies:=Range(«N55»).Value
    Worksheets(«e13-3»).PrintOut Copies:=Range(«N56»).Value
    Worksheets(«e26»).PrintOut Copies:=Range(«N57»).Value
    Worksheets(«f5-3»).PrintOut Copies:=Range(«N58»).Value
    Worksheets(«f5-4»).PrintOut Copies:=Range(«N59»).Value
    Worksheets(«f9-3»).PrintOut Copies:=Range(«N60»).Value
    Worksheets(«g9-4»).PrintOut Copies:=Range(«N61»).Value
    Worksheets(«g10-2»).PrintOut Copies:=Range(«N62»).Value
  End If
  Application.EnableEvents = True
End Sub

[/vba]
Проблема в том, что печатаются только 2 первых листа с необходимым количеством копий, а потом макрос останавливается или без объяснения причин или с ошибкой 400.
Можно ли это исправить?

 

Ответить

KuklP

Дата: Четверг, 18.05.2017, 18:37 |
Сообщение № 2

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Может проблема в том, что для всех этих Range(«N44»)… не указан родительский объект? Откуда они берутся, файла-то нет :(


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Garik007

Дата: Четверг, 18.05.2017, 20:45 |
Сообщение № 3

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 102


Репутация:

0

±

Замечаний:
0% ±


Excel 2013, 2016

KuklP, файл смогу только завтра приложить, только как-то странно получается условия формирования Range(«N44»)… везде одинаковы, а печать идет только первых двух. Если убрать 44 и 45 будет без проблем печатать 46 и 47, убрать 46 и 47 будет нормально печатать 48 и 49 и так далее, но только всегда первые 2 листа.
А где его взять этот родительский объект? Указание вручную цифр на листе ситуацию вроде не меняет, завтра попробую вместо Range(«N44»)… указать конкретные цифры в самом макросе.
Листов около сотни и вручную указывать при печати количество экземпляров каждого как-то муторно получается.

UPD. А вот и сам файл.

К сообщению приложен файл:

6883324.xlsm
(32.7 Kb)

Сообщение отредактировал Garik007Четверг, 18.05.2017, 21:38

 

Ответить

gling

Дата: Четверг, 18.05.2017, 21:24 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

Здравствуйте.

А где его взять этот родительский объект?

Это имя листа на котором записаны данные в этих ячейках. выглядеть должно так [vba]

Код

=Sheets(«ЗесьИмяЛиста»).Range(«N48»).Value

[/vba]или через With. А лучше конечно в файле пробовать и показывать, в файле понятнее.


ЯД-41001506838083

 

Ответить

KuklP

Дата: Пятница, 19.05.2017, 06:43 |
Сообщение № 5

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Ну так у Вас там ноль в третьем кол-ве. Попробуйте так, в модуль листа «список»:
[vba]

Код

Sub печать()
    Dim i&
    With Me
        For i = 2 To 6
        If .Cells(i, 14).Value > 0 Then _
            Sheets(.Cells(i, 11).Value).PrintOut Copies:=.Cells(i, 14)
        Next
    End With
End Sub

[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Garik007

Дата: Пятница, 19.05.2017, 08:54 |
Сообщение № 6

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 102


Репутация:

0

±

Замечаний:
0% ±


Excel 2013, 2016

KuklP, ноль мне кажется не основная причина, менял и в строке формул все на значения больше ноля, и принудительно в макросе везде прописывал количество копий больше ноля, но больше двух листов за раз не печатает.
Если добавить Вашу формулу в модуль листа выдает ошибку «Invalid use of Me keyword».

 

Ответить

KuklP

Дата: Пятница, 19.05.2017, 09:00 |
Сообщение № 7

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Если добавить Вашу формулу в модуль листа выдает ошибку «Invalid use of Me keyword».

Чушь собачья. Значит Вы не в модуль листа его сунули, а в отдельный модуль. См. скрин.

Макрос отработал до конца, считайте к-во документов в столбце и в диспетчере печати.

К сообщению приложен файл:

7199723.gif
(91.4 Kb)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPПятница, 19.05.2017, 09:07

 

Ответить

Garik007

Дата: Пятница, 19.05.2017, 09:26 |
Сообщение № 8

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 102


Репутация:

0

±

Замечаний:
0% ±


Excel 2013, 2016

KuklP, да все работает, спасибо большое, смутило слово модуль в Вашем ответе, поэтому и добавил не на лист, а создал модуль в книге, поэтому и вылезала ошибка, не силен еще в ВБА.

 

Ответить

KuklP

Дата: Пятница, 19.05.2017, 11:15 |
Сообщение № 9

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

 

Ответить

Oleg

1

05.03.2008, 08:04. Показов 35049. Ответов 21


Студворк — интернет-сервис помощи студентам

Убедительная просьба помоч!!!
Как узнать количество страниц при печати в Excel?

Tim

06.03.2008, 13:13

2

Привет!!!
Ты когда-нить нажимал на разметку страницы в Екселе???
Там появляется лист екселя с синими пунктирными полосочками.
Так вот, именно по этим полосочкам и печатает принтер!
Остается их только посчитать.
А называются они PageBreak

Returns or sets the location of a page break. Can be one of the following XlPageBreak constants: xlPageBreakAutomatic, xlPageBreakManual, or xlPageBreakNone. Read/write Long.

Remarks

This property can return the location of either automatic or manual page breaks, but it can only set the location of manual breaks (it can only be set to xlPageBreakManual or xlPageBreakNone).

To remove all manual page breaks on a worksheet, set Cells.PageBreak to xlPageBreakNone.

Tim

06.03.2008, 13:33

3

Лови родной!
только для точного кол-ва страниц нужно всегда делать r+1 т.к. HPageBreaks — это коллекция межстраничных разрывов, а т.к. после последней страницы его нету, то и последнего HPageBreak тоже нету!
Надеюсь я помог хоть чем-то

Visual Basic
1
2
3
4
Sub test()
    r = ActiveSheet.HPageBreaks.Count
    MsgBox r
End Sub

Oleg

07.03.2008, 08:26

4

Спасибо за подсказку!!!
Есть еще одна проблемма!!!
Если в последней строке будуд данные, то количество страниц определяется правильно, если нет, на 1 меньше. А как это определить?

Tim

07.03.2008, 11:23

5

Извини, не понял. Про какую последнюю строку ты говоришь?

Oleg

07.03.2008, 11:31

6

Слова из первого ответа:
Ты когда-нить нажимал на разметку страницы в Екселе???
Там появляется лист екселя с синими пунктирными полосочками.
Так вот, именно по этим полосочкам и печатает принтер!
Остается их только посчитать.
А называются они PageBreak

Так вот если перед самой этой синей полосочкой в ячейку внести данные, то количество страниц будет правильным, иначе +1

Tim

07.03.2008, 13:26

7

Понятно
Но ведь я ж тебе примерчик с HPageBreaks сбросил!
Количество HPageBreaks + 1 и будет кол-м листов выводимых на печать
отталкивайся от него и все. А уж куда ты там данные занесешь перед разрывом страницы или после, этой коллекции наплевать!

Oleg

07.03.2008, 13:33

8

Это я все понимаю, но дело в том что я заполняю это программно и не знаю где будет последняя строка. Поэтому может получиться, что она будет посередине страницы и тогда количество страниц +1, а может быть последняя строка будет ровно в конце страницы, и тогда количество страниц будет правельным.
Как узнать в конце вывода, где я нахожусь по отношению к странице?
или как узнать количество строк на странице?

Tim

09.03.2008, 11:27

9

Вот оно что. Т.е. фактически тебе нужно узнать сколько строк у тебя в печатной странице? Блин… по-моему с этим будет сложнее. Я не помню ни одну функцию или метод, который бы позволял сказать сколько строк на печати в той или иной странице…
Тут очень много зависит от параметров печати, т.е. полей, шрифта, высоты строк, объеденены или нет ячейки, есть ли всякие переносы.. и т.п.
Если все это унифицировать, то можно высчитать сколько строк на странице, а соответственно и сколько страниц.
Давай, копай!

Olegusha

19.01.2010, 13:02

10

Visual Basic
1
2
3
4
Sub test()
r = ActiveSheet.HPageBreaks.Count
MsgBox r
End Sub

Этот макрос работает через раз.
Раз он выдает истинное к-во страниц, а другой раз — к-во, которое равно к-ву листов в книге.
И действительно есть проблема, когда определяет на одну страница меньше.
Заранее благодарен за ответы.

Oleg

19.01.2010, 13:19

11

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

Olegusha

19.01.2010, 14:06

12

Главное не то, что он добавляет страницу, а то что он ЧЕРЕЗ РАЗ работает ((
Один раз он говорит, что страниц 4 (по одной на каждый лист книги), а другой — истинное значение. По предварительным данным нужно переместиться на последнюю заполненную ячейку на последнем листе книги. И тогда все ок.
Вот макрос, который я использую (печатает сразу четные страницы в обратном порядке, а потом — нечетные в прямом). Может кто-то подскажет!?!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Sub print_stage()
 
Dim i, j, k, n, nos, sheet_count, total_pages, cur_pages As Byte
 
'не думаю что у тебя больше 255 листов
 
n = 0
total_pages = 0
 
' print_stage Макрос
 
 'Подсчет к-ва листов в книге
 sheet_count = ActiveWorkbook.Sheets.Count
 
 'Подсчет к-ва страниц в каждом листе
 For nos = 1 To sheet_count
    cur_pages = ActiveWorkbook.Sheets(nos).HPageBreaks.Count + 1
    
    
    n = ActiveWorkbook.Sheets(nos).VPageBreaks.Count
        
    If n > 1 Then
       MsgBox 'Столбцы поздвигай на ' & nos & ' листе, а то вылазят черт знает куда'
       GoTo m1:
    End If
 
 'Подсчет суммарного к-ва страниц во всей книге
    total_pages = total_pages + cur_pages
 Next nos
 
 
  MsgBox 'Печать четных страниц в обратном порядке (вставь бумагу).' & Chr(13) & Chr(13) & total_pages & ' страниц ' & sheet_count & ' раздела(ов)'
    
    For i = 2 To total_pages Step 2
       j = Int(total_pages / 2) * 2 + 2 - i
       'ActiveWorkbook.PrintOut From:=j, To:=j, Copies:=1, Collate:=True
       MsgBox 'Печать четных страниц' & Chr(13) & Chr(13) & j
    Next i
    
 MsgBox 'Печать нечетных страниц (переверни напечатанные листы и вставь обратно).' & Chr(13) & Chr(13) & total_pages & ' страниц [' & sheet_count & ' раздела(ов)]'
    
    For k = 1 To total_pages Step 2
       'ActiveWorkbook.PrintOut From:=k, To:=k, Copies:=1, Collate:=True
       MsgBox 'Печать нечетных страниц' & Chr(13) & Chr(13) & k
    Next k
   
m1:
 
End Sub

barinrec

62 / 4 / 1

Регистрация: 27.04.2014

Сообщений: 100

16.10.2014, 23:12

13

У Уокенбаха есть пример, но не правильно счет ведет все равно. Кто поможет уточнить код, чтобы пустые листы не считал?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub ShowPageCount()
    Dim PageCount As Integer
    Dim sht As Worksheet
    PageCount = 0
    For Each sht In Worksheets
        
        PageCount = PageCount + (sht.HPageBreaks.Count + 1) * _
         (sht.VPageBreaks.Count + 1)
    Next sht
    MsgBox "Total Pages = " & PageCount
End Sub



0



Eustas

0 / 0 / 0

Регистрация: 18.03.2016

Сообщений: 1

13.07.2017, 17:30

14

Суть в том, что Count считает именно Breaks (разрывы внутри диапазона печати). Т.е. границу листа не считает за разрыв, хотя на самом деле — это ещё одна страница. Т.о. вышеприведенные примеры для диапазона в котором всего одна страница должны рассчитывать 0. Пример для горизонтальных разрывов:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    rEnd = Cells(65000, 1).End(xlUp).Row  ' нижняя граница печати
 
    nCountSheets = 0  ' количество листов для печати
    rBreaks = 0          ' адрес строки, после которой стоит разрыв
 
' перебираю все разрывы (горизонтальные), определяя их положение
' тут главное определить строку последней границы
 
    For Each hp In ActiveSheet.HPageBreaks
        Set rngHPB = hp.Location
        rBreaks = rngHPB.Row - 1
        
        If rBreaks <= rEnd Then nCountSheets = nCountSheets + 1
    
    Next
    
    If rBreaks = 0 Then nCountSheets = 1
    If (ActiveSheet.HPageBreaks.Count <> 0 And rBreaks < rEnd ) Then nCountSheets = nCountSheets + 1
    
Debug.Print nCountSheets



0



mitzn

0 / 0 / 0

Регистрация: 19.10.2017

Сообщений: 1

19.10.2017, 10:17

15

а не проще ли так:

Visual Basic
1
2
3
4
5
6
7
8
9
Sub TotalPageCount()
 
Dim sh As Worksheet
    For Each sh In Worksheets
        c = c + sh.PageSetup.Pages.Count
        Z = Z & vbCrLf & sh.Name & "=" & sh.PageSetup.Pages.Count
    Next
    MsgBox "Total=" & c & Z
End Sub

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



0



kukana

2 / 2 / 0

Регистрация: 23.10.2015

Сообщений: 65

04.03.2022, 12:05

16

mitzn, книга состоит из трёх листов. В первом 1 страница. Во втором 1 страница. В третьем 2 страницы.
Код

Visual Basic
1
2
3
4
5
6
7
Sub TotalPageCount()
Dim sh As Worksheet
c = 0   
For Each sh In Worksheets
        c = c + sh.PageSetup.Pages.Count
Next sh
End Sub

Выдаёт 218 страниц.
Пробовал удалять/сбрасывать разрывы — ситуация не меняется.
При пошаговом выполнении:
первый лист с=4;
второй лист с=4 , т.е. как будто в нём ноль страниц;
третий лист с=218, т.е. в нём их 214.
При предпросмотре и печати всё норм, в книге три листа на четырёх страницах.
Кто знает, что не так?



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,505

Записей в блоге: 4

04.03.2022, 12:14

17

kukana,
возможно, что где-то задана область печати , надо смотреть файл



0



2 / 2 / 0

Регистрация: 23.10.2015

Сообщений: 65

04.03.2022, 12:45

18

Нашёл. На третьем листе было разлиновано до конца.
Удачи всем.



0



2632 / 1637 / 745

Регистрация: 23.03.2015

Сообщений: 5,143

04.03.2022, 13:04

19

kukana,

For Each sh In ThisWorkbook.Worksheets



0



2 / 2 / 0

Регистрация: 23.10.2015

Сообщений: 65

04.03.2022, 14:29

20

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



0



Понравилась статья? Поделить с друзьями:
  • Количество листов в excel не открывая файл
  • Количество лет на определенную дату в excel
  • Количество календарных дней между датами excel
  • Количество истинных значений excel
  • Количество информации в битах excel