Печать всех листов в excel vba excel

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. Введите или вставьте код во вновь созданном модуле.

 

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

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

Сообщений: 23254
Регистрация: 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

Спасибо

Hello Friends,

Hope you are doing well !! Thought of sharing a small VBA code to help you writing a code to print the Workbook, Worksheet, Cell Range, Chart etc. .PrintOut () Method is used to print any Excel Object.

Syntax of .PrintOut Method

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

Where:

  • YourObj (Required): It is a variable which represents your Object which you want to print. For example: Workbook, Worksheet, Chart etc.
  • From (Optional): Starting page number from which printing has to start. If this argument is omitted, printing starts from page 1.
  • To (Optional): End page number till which printing has to be done. If omitted, printing will be done till the last page.
  • Copies (Optional): This is the number of copies to be printed. If omitted, only one copy will be printed.
  • Preview (Optional): If passed as TRUE then Excel will invoke the print preview before printing the Object. If omitted, FALSE will be passed and hence excel will invoke the printing directly without showing the preview.
  • ActivePrinter (Optional): This sets the name of the active printer
  • PrintToFile (Optional): True is passed to print to a file. If it is not specified then user is prompt to enter an output file.
  • Collate (Optional): This is a Boolean type argument. TRUE is to collate multiple copies.
  • PrToFileName (Optional): If the above parameter PrintToFile is set to TRUE then you need to specify the name of the file you want to print to
  • IgnorePrintAreas (Optional): This is a Boolean type argument. If this argument is set to true then this function print the entire object.

Examples to Print Excel:

Based on above explanation and Syntax we will see examples of printing the Workbook, sheets, charts etc.

Example 1: VBA Statements to Print Objects with Default Options

In this set of examples, I am using all default options to print. This means I am not providing any other parameter to the method .PrintOut

1. VBA code to print ActiveWorkbook


Function PrintActiveWorkbook()
      ActiveWorkbook.PrintOut
End Function

2. VBA code to print Active Sheet


Function PrintActiveSheet()
      ActiveSheet.PrintOut
End Function

3. VBA code to print all WorkSheets


Function PrintAllWorkSheets()
      WorkSheets.PrintOut
End Function

4. VBA code to print a Single Sheet


Function PrintOneSheet()
      Sheets("Sheet1").PrintOut 'Sheet1 is the name of the Sheet which you want to Print
End Function

5. VBA code to print more than one Sheet


Function PrintMultipleSheets()
      Sheets(Array("Sheet1" , "Sheet2", "Sheet3").PrintOut 
End Function

6. VBA code to print Selected area of a Sheet


Function PrintSelectedArea()
      Selection.PrintOut 
End Function

7. VBA code to print Range of Worksheet


Function PrintRange()
      Range("A1:D5").PrintOut 
End Function

8. VBA code to print Excel Chart


Function PrintChart()
      Sheets("Sheet1").ChartObjects("Chart1").Chart.PrintOut 'Chart1 is name of the Chart
End Function

9. VBA code to print All Charts in a WorkSheet


Function PrintAllChart()
Dim ExcelCharts As Object
Set ExcelCharts = Sheets("Sheet1").ChartObjects
For Each Chart In ExcelCharts
    Chart.Chart.PrintOut
Next
End Function


10. VBA code to print All Charts in a Workbook


Function PrintAllChart()
	Dim ExcelCharts As Object
	For Each Sheet In Sheets
		Set ExcelCharts = Sheet.ChartObjects
		For Each Chart In ExcelCharts
			Chart.Chart.PrintOut
		Next
		Set ExcelCharts = Nothing
	Next
End Function

Example 2: VBA Statements to Print Objects with different parameters passed

1. VBA code to print From Page Number X to Page Number Y


'Below statement will print from Page No:2 to Page No:3
Worksheets("Sheet1").PrintOut From:=2, To:=3

2. VBA code to print more than 1 Copy


'Below statement will print 3 copy of the Sheet1 from Page 2 to Page no: 3
Worksheets("Sheet1").PrintOut From:=2, To:=3, Copies:=3

3. VBA code to Show Print Preview before actual printing


'Below statement will print 3 copy of the Sheet1 from Page 2 to Page no: 3
Worksheets("Sheet1").PrintOut From:=2, To:=3, Copies:=3, Preview:=True

Содержание:

  1. Печатайте все листы за один раз
  2. Печать нескольких листов (выбранных) за один раз
  3. Печать нескольких листов с определенной областью печати
  4. Настройка области печати вручную
  5. Настройка области печати с помощью VBA

[lyte id=’sgISE1MCqH8′ /]

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

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

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

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

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

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

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

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

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

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

Достаточно просто!

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

Читай дальше!

Печать нескольких листов (выбранных) за один раз

Этого снова довольно легко добиться.

Все, что вам нужно сделать, это выбрать те конкретные листы, которые вы хотите распечатать, а затем распечатать их!

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

  1. Выберите все листы, которые хотите распечатать. Для этого, удерживая клавишу Ctrl, выбирайте листы один за другим. В этом примере я выбираю листы 1, 4 и 5.
  2. Перейдите на вкладку Файл.
  3. Нажмите на опцию печати
  4. На странице «Печать» щелкните раскрывающееся меню «Параметры печати».
  5. Нажмите «Печатать активные таблицы» (в большинстве случаев это уже вариант по умолчанию, но если это не так, вы можете выбрать его из раскрывающегося списка)
  6. Нажмите на печать

Когда вы выбираете несколько листов, все они действуют как активные листы при печати.

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

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

Этот немного сложнее двух предыдущих.

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

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

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

Теперь, когда дело доходит до настройки области печати:

  • Это нужно делать вручную для каждого листа (особенно, если область печати для каждого листа разная)
  • Или вы можете использовать простой код VBA, чтобы установить одну и ту же область печати на всех листах за один раз.

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

Итак, позвольте мне быстро показать вам, как настроить область печати вручную и с помощью VBA.

Настройка области печати вручную

Ниже приведены шаги для этого:

  1. Выберите ячейки, которые вы хотите покрыть в области печати.
  2. Перейдите на вкладку «Макет страницы».
  3. В группе «Параметры страницы» нажмите «Область печати».
  4. Нажмите «Установить область печати».

Вот и все!

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

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

Настройка области печати с помощью VBA

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

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

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

Ниже приведен код макроса VBA, который сделает это:
Sub SetPrintAreas1 () Dim PrntArea As String Dim ws As Worksheet PrntArea = ActiveSheet.PageSetup.PrintArea For Each ws In Worksheets ws.PageSetup.PrintArea = PrntArea Next Set wks = Nothing End Sub
Приведенный выше код использует область печати с активных листов, переходит ко всем листам в книге и устанавливает ту же область печати в каждом из этих листов.

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

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

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

Итак, это несколько сценариев, в которых вы можете распечатать несколько листов в Excel за один раз.

Надеюсь, вы нашли этот урок полезным!

Что делает макрос


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

Код макроса


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

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

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

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


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

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

Понравилась статья? Поделить с друзьями:
  • Печать всех вкладок excel
  • Печать всей области excel
  • Печать всей книги excel на одном листе
  • Печать всей книги excel на один лист
  • Печать всей книги excel двухсторонний