Impresión condicional (Microsoft Excel)
Kirk preguntó si hay una forma de controlar condicionalmente lo que se imprime en Excel. Por ejemplo, la celda A1 contiene un valor y el valor controla exactamente lo que se imprime. Quizás si A1 contiene 1, se imprime la Hoja1; si contiene 2, se imprimen Sheet1 y Sheet2.
La única forma de hacer esto es con una macro, y hay varios enfoques que puede utilizar. Considere la siguiente macro muy simple, que simplemente usa una estructura Seleccionar caso para controlar la impresión.
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
Ejecute esta macro con el valor 1, 2 o 3 en la celda A1 de la primera hoja, y la macro imprime diferentes cosas según el valor. Si el valor es 1, se imprime Sheet1; si es 2, se imprime la Hoja2; y si es 3, se imprimen tanto Sheet1 como Sheet2. Si desea que diferentes valores impriman diferentes cosas, simplemente modifique la estructura Seleccionar caso para reflejar los valores posibles y lo que debe imprimirse para cada valor.
También se puede crear un enfoque más integral. Considere agregar una «hoja de control» a su libro de trabajo. Esta hoja tendría el nombre de cada hoja de trabajo en el libro de trabajo listado en la primera columna. Si coloca un valor a la derecha del nombre de una hoja de trabajo, en la segunda columna, una macro imprimirá la hoja de trabajo correspondiente.
La siguiente macro se puede utilizar para crear la «hoja de control».
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
La macro primero elimina cualquier hoja de control anterior, si existe. Luego agrega una nueva hoja de trabajo llamada Hoja de control y coloca etiquetas de encabezado en las columnas A y B. Luego, enumera todas las hojas de trabajo en el libro de trabajo en la columna A.
Con la hoja de control creada, puede colocar una «X» o algún otro valor (como «Y» o 1) en la columna B junto a cada hoja de trabajo que desee imprimir. Luego, la siguiente macro examina la hoja de control e imprime cualquier hoja de trabajo que tenga una marca, cualquier marca, en la celda de la columna 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
Otro método consiste en crear una macro que se ejecute justo antes de imprimir.
(La impresión es uno de los eventos que Excel le permite atrapar). La siguiente macro, agregada al objeto thisWorkbook, se ejecuta cada vez que intenta imprimir.
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
La macro verifica el valor en la celda A1 de la primera hoja de trabajo. Utiliza este valor para determinar qué hojas de trabajo se deben imprimir. En otras palabras, un 1 imprime la primera hoja de trabajo, un 2 imprime la segunda, un 3 imprime la tercera y así sucesivamente.
Si el valor en A1 no es un valor o si es menor que 1 o mayor que la cantidad de hojas de trabajo en el libro de trabajo, se informa al usuario que el valor es incorrecto y se sale de la macro.
Suponiendo que el valor en A1 está dentro del rango, la macro le pregunta si desea usar la Vista previa de impresión. Dependiendo de la respuesta del usuario, la macro imprime la hoja de trabajo especificada o muestra la Vista previa de impresión para esa hoja de trabajo.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (13108) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:
link: / excel-Conditional_Printing [Impresión condicional]
.