Karen está buscando una manera de imprimir un libro completo, incluso si un usuario elige imprimir una sola hoja de trabajo. En otras palabras, está buscando una manera de imprimir el libro completo o nada en absoluto; no debería haber opciones «intermedias».

La única forma de manejar esto es mediante el uso de una macro. VBA le permite crear macros que se inician cuando ocurren ciertos eventos. Uno de los eventos que puede activar macros es el evento «imprimir». Cuando alguien solicita imprimir o elige ver una vista previa de impresión, se activa el evento BeforePrint del objeto Libro. Puede crear su propia macro que se ejecuta cuando se activa el evento.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim sht As Variant     Dim bPreview As Boolean     Dim iResponse As Integer     On Error GoTo ErrHandler

iResponse = MsgBox(prompt:="Do you want to Print Preview?", _         Buttons:=vbYesNoCancel, Title:="Preview?")



Select Case iResponse         Case vbYes             bPreview = True         Case vbNo             bPreview = False         Case Else             GoTo ExitHandler     End Select     Application.EnableEvents = False     For Each sht In Sheets         If sht.Visible Then             sht.PrintOut Preview:=bPreview         End If     Next

ExitHandler:

Application.EnableEvents = True     Cancel = True     Exit Sub

ErrHandler:

MsgBox Err.Description     Resume ExitHandler End Sub

Siempre que Excel se prepara para imprimir, o cuando se invoca la vista previa de impresión, se activa el evento BeforePrint y se ejecuta esta macro. La macro primero pregunta al usuario si quiere hacer una vista previa de impresión. Se utiliza una estructura Seleccionar caso para establecer la variable bPreview en función de la respuesta a la pregunta. La configuración de bPreview controla entonces lo que sucede.

Si el usuario hizo clic en Cancelar cuando se le preguntó acerca de la vista previa, se sale de la macro y se cancela la impresión. De lo contrario, cada hoja de trabajo del libro de trabajo se examina para imprimir o previsualizar. Si la hoja de trabajo está visible, se imprime y la propiedad Vista previa se establece en bPreview (Verdadero significa que la hoja de trabajo tiene una vista previa; Falso significa que en realidad está impresa).

Observe que la macro establece la propiedad EnableEvents en False. Esto se hace para que no se puedan activar otros eventos durante la impresión o la vista previa.

Si EnableEvents se deja «activado», cada vez que se usa el método PrintOut, todo el evento BeforePrint se activa nuevamente; el usuario terminaría en un bucle sin fin si el manejo de eventos no estuviera desactivado.

Además, tenga en cuenta que una de las últimas cosas que ocurren antes de salir de la macro es que la propiedad Cancelar está establecida en Verdadero. Esto se hace para que se cancele la impresión original o la solicitud de vista previa de impresión que generó el evento BeforePrint. Después de todo, no hay necesidad de completar esa solicitud, y la macro hizo todo el manejo de impresión por el usuario.

Hay una advertencia, por supuesto, al usar este enfoque de impresión: si las macros no están habilitadas, el controlador no se ejecutará y el usuario puede imprimir como desee. (Mantener presionada la tecla Mayús mientras abre el libro deshabilita las macros y la mayoría de las veces se le pregunta al usuario si desea habilitarlas). Otros problemas de ExcelTips han discutido este hecho.

_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 (3329) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posteriores) aquí:

link: / excelribbon-Printing_All_or_Nothing [Imprimiendo todo o nada].