Impedir la impresión en Excel

Cuando has creado un libro de Excel que contiene información sensible y no deseas que el usuario la imprima, puedes hacer uso de una macro para impedir su impresión. En esta ocasión crearemos una macro que nos ayudará a evitar la impresión de una o varias hojas en Excel.

Advertencia sobre la macro

Esta técnica supone que el usuario habilitará la ejecución de macros al abrir el archivo. En caso de que eso no suceda, será imposible evitar que el usuario imprima las hojas del libro.

Cómo impedir la impresión en Excel

El evento BeforePrint en Excel

Cuando hablamos de un evento en programación nos referimos a un bloque de código que será ejecutado en el momento en que se realice determinada acción dentro de Excel.

Para nuestro ejemplo nos interesa el evento llamado BeforePrint que ejecutará el código justo antes de enviar el documento a impresión. Este evento es el que utilizaremos para interceptar la ejecución del comando Imprimir y evitar la impresión del libro.

Para acceder al evento BeforePrint debemos abrir el Editor de Visual Basic pulsando la combinación de teclas ALT + F11. Posteriormente debes hacer doble clic en el objeto ThisWorkbook que se muestra en el panel izquierdo y en las listas desplegables del panel derecho deberás seleccionar las opciones Workbook y BeforePrint como se muestra en la siguiente imagen:

Impedir que se pueda imprimir en Excel

Una vez hecha la selección de la opción BeforePrint, se insertarán las líneas de código correspondientes al evento como se muestra en la imagen anterior.

Impedir la impresión de un libro en Excel

Para crear la macro que impida la impresión del libro de Excel, debemos agregar un par de líneas de código al evento BeforePrint como se muestra a continuación.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Cancel = True
MsgBox "No está permitido imprimir esta hoja."

End Sub

La primera línea de código asigna el valor True al argumento Cancel y es precisamente esta instrucción la que cancela la impresión. La segunda línea de código es solamente una notificación para indicar al usuario que no es posible hacer la impresión.

En este punto es conveniente guardar el archivo como un Libro habilitado para macros de manera que se hagan permanentes los cambios recién hechos al código del evento BeforePrint.

Para probar la macro será suficiente con ejecutar el comando Imprimir. Ya sea que vayas a la ficha Archivo y pulses Imprimir o que tengas el comando Imprimir en la barra de herramientas de acceso rápido, el resultado será la misma notificación de parte de Excel.

Impedir que los usuarios impriman un libro de Excel

Puedes agregar nuevas hojas al libro, pero no podrás imprimirlas ya que la macro recién creada se ejecutará para todas ellas evitando la impresión. Si queremos evitar la impresión solo de alguna de las hojas de nuestro libro, es necesario agregar algunas líneas de código a la macro.

Impedir la impresión de una hoja específica

Es posible impedir la impresión de determinada hoja de Excel comparando su nombre con el de la hoja activa. Supongamos que en un nuevo libro de Excel tengo tres hojas: Hoja1, Hoja2 y Hoja3. Para impedir la impresión de la Hoja2, debo modificar el código de la macro de la siguiente manera:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

If ActiveSheet.Name = "Hoja2" Then
Cancel = True
MsgBox "No está permitido imprimir esta hoja."
End If

End Sub

La sentencia IF nos ayudará a comparar el nombre de la hoja activa con el nombre de la hoja que deseamos evitar que sea impresa. Si los nombres coinciden, se cancelará la ejecución del comando Imprimir y se mostrará el mensaje de advertencia al usuario.

Impedir la impresión de varias hojas

Si deseas impedir la impresión de varias hojas a la vez, entonces podemos modificar un poco el código de la macro anterior para utilizar una sentencia Select Case y así facilitar la comparación del nombre de la hoja activa con aquellas hojas que no deseamos que sean impresas.

Para este ejemplo utilizaré un libro de Excel con 5 hojas y evitaré la impresión de la Hoja2, Hoja3 y Hoja4. El código es el siguiente.

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Select Case ActiveSheet.Name
Case "Hoja2", "Hoja3", "Hoja4"
Cancel = True
MsgBox "No está permitido imprimir esta hoja."
End Select

End Sub

Para agregar más hojas a la lista de aquellas que no se podrá imprimir, solo deberás ingresar su nombre entre comillas dobles y separarlo con una coma del resto de nombres al final de la instrucción Case.

Con estos tres ejemplos hemos aprendido a impedir la impresión en Excel. En el primer ejemplo evitamos la impresión de cualquier hoja del libro. El segundo ejemplo utiliza la sentencia IF para evitar la impresión de una hoja específica del libro y nuestro último ejemplo utiliza la sentencia Select Case para crear una lista de los nombres de hojas que queremos impedir que sean impresas.

Descarga el archivo comprimido que contiene los tres archivos de Excel con los ejemplos que hemos desarrollado en esta ocasión y comienza a practicar con el evento BeforePrint en Excel.