Кирк спросил, есть ли способ условно контролировать то, что печатается в Excel. Например, ячейка A1 содержит значение, и это значение определяет, что именно печатается. Возможно, если A1 содержит 1, то печатается Sheet1; если он содержит 2, то печатаются Sheet1 и Sheet2.

Единственный способ сделать это — использовать макрос, и вы можете использовать несколько подходов. Рассмотрим следующий очень простой макрос, который просто использует структуру Select Case для управления печатью.

Sub PrintStuff()

Dim vShts As Variant

vShts = Sheets(1).Range("A1")

If Not IsNumeric(vShts) Then         Exit Sub     Else         Select Case vShts             Case 1                 Sheets("Sheet1").PrintOut             Case 2                 Sheets("Sheet2").PrintOut             Case 3                 Sheets("Sheet1").PrintOut                 Sheets("Sheet2").PrintOut         End Select     End If End Sub

Запустите этот макрос со значением 1, 2 или 3 в ячейке A1 первого листа, и макрос будет печатать разные вещи в зависимости от значения. Если значение равно 1, печатается Sheet1; если 2, то печатается Sheet2; а если это 3, то печатаются как Sheet1, так и Sheet2. Если вы хотите, чтобы разные значения печатали разные вещи, просто измените структуру Select Case, чтобы отразить возможные значения и то, что должно быть напечатано для каждого значения.

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

Следующий макрос можно использовать для создания «контрольного листа».

Sub CreateControlSheet()

Dim i as integer

On Error Resume Next   'Delete this sheet if it already exists     Sheets("Control Sheet").Delete     On Error GoTo 0

Sheets.Add   'Add the WhatToPrint Sheet     ActiveSheet.Name = "Control Sheet"



Range("A1").Select   'Label the columns     ActiveCell.FormulaR1C1 = "Sheet Name"



Range("B1").Select     ActiveCell.FormulaR1C1 = "Print?"



Cells.Select     Selection.Columns.AutoFit

For i = 1 To ActiveWorkbook.Sheets.Count         Cells(i + 1, 1).Value = Sheets(i).Name     Next End Sub

Макрос сначала удаляет любой старый контрольный лист, если он существует. Затем он добавляет новый рабочий лист с именем Контрольный лист и помещает метки заголовков в столбцы A и B. Затем он перечисляет все рабочие листы в книге в столбце A.

Создав контрольный лист, вы можете поместить «X» или другое значение (например, «Y» или 1) в столбец B рядом с каждым листом, который хотите распечатать. Следующий макрос затем проверяет контрольный лист и распечатывает любой рабочий лист, имеющий отметку — любую отметку — в ячейке в столбце B.

Sub PrintSelectedSheets()

Dim i as Integer     i = 2

Do Until Sheets("Control Sheet").Cells(i, 1).Value = ""

If Trim(Sheets("Control Sheet").Cells(i, 2).Value <> "") Then             Sheets(Sheets("Control Sheet").Cells(i, 1).Value).Select             ActiveWindow.SelectedSheets.PrintOut Copies:=1         End If         i = i + 1     Loop End Sub

Другой подход — создать макрос, который запускается непосредственно перед печатью.

(Печать — это одно из событий, которое Excel позволяет вам перехватить.) Следующий макрос, добавленный к объекту thisWorkbook, запускается при каждой попытке печати.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim vShts As Variant     Dim iResponse As Integer     Dim bPreview As Boolean

On Error GoTo ErrHandler

vShts = Sheets(1).Range("A1")

If Not IsNumeric(vShts) Then         GoTo InValidEntry     ElseIf vShts < 1 Or vShts > Sheets.Count Then         GoTo InValidEntry     Else         iResponse = MsgBox(prompt:="Do you want Print Preview?", _           Buttons:=vbYesNoCancel, Title:="Preview?")

Select Case iResponse             Case vbYes                 bPreview = True             Case vbNo                 bPreview = False             Case Else                Msgbox "Canceled at User request"

GoTo ExitHandler         End Select

Application.EnableEvents = False         Sheets(vShts).PrintOut Preview:=bPreview     End If

ExitHandler:

Application.EnableEvents = True     Cancel = True     Exit Sub

InValidEntry:

MsgBox "'" & Sheets(1).Name & "'!A1" _         & vbCrLf & "must have a number between " _         & "1 and " & Sheets.Count & vbCrLf     GoTo ExitHandler

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Макрос проверяет значение в ячейке A1 первого листа. Он использует это значение, чтобы определить, какие листы следует распечатать. Другими словами, 1 печатает первый лист, 2 печатает второй, 3 печатает третий и так далее.

Если значение в A1 не является значением или если оно меньше 1 или больше, чем количество листов в книге, то пользователю сообщается, что значение неверно, и макрос закрывается.

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

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (13108) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Conditional_Printing [Условная печать].