Has creado un archivo de Excel con mucha funcionalidad y no deseas que otra persona guarde algún cambio o ingrese nuevos datos en el archivo. Aunque existen métodos para proteger el contenido de las celdas, en esta ocasión te mostraré una alternativa para impedir que un usuario guarde el archivo de Excel.
Advertencia importante sobre la macro
El método utilizado en este artículo supone que el usuario tendrá habilitada la ejecución de macros en Excel, de lo contrario el código jamás será ejecutado y ésta técnica no podrá evitar que el archivo sea guardado.
Considera que las opciones de seguridad de Excel son muy básicas y nunca es recomendable almacenar información confidencial en un libro de trabajo de Excel.
El evento BeforeSave en Excel
Si eres un usuario con experiencia en la programación de Excel sabrás que tenemos a nuestra disposición varios Eventos que nos permiten ejecutar código en el momento preciso en que se realiza alguna acción en Excel.
Ese el caso del evento BeforeSave que nos permitirá ejecutar código VBA antes de guardar un libro de Excel. Para nuestro ejemplo, utilizaremos este evento para evitar que el usuario guarde el archivo. Pero antes de escribir ese código haremos una prueba para dejar en claro el momento exacto en que dicho bloque de código será ejecutado.
Es necesario abrir el Editor de Visual Basic y para eso puedes pulsar el atajo de teclado ALT + F11. Otra opción es hacer clic derecho sobre el nombre de alguna de las hojas del libro y elegir la opción Ver código.
Una vez que tienes abierto el Editor de Visual Basic deberás hacer doble clic en el objeto ThisWorkbook dentro del panel del proyecto.
Posteriormente elige las opciones Workbook y BeforeSave de las listas desplegables del panel derecho tal como se muestra en la siguiente imagen:
La prueba la realizaremos con una sola instrucción que mostrará una caja de texto con el mensaje “Evento BeforeSave”. Asegúrate de tener el siguiente código en el panel derecho del Editor de Visual Basic:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "Evento BeforeSave" End Sub
Ahora regresa a la ventana de Excel y pulsa el botón Guardar que se encuentra en la barra de herramientas de acceso rápido. Como resultado obtendremos un mensaje como el siguiente:
Haz clic en el botón Aceptar para cerrar el mensaje y ahora ve a la pestaña Archivo > Guardar como y al momento de elegir una carpeta para guardar el archivo se mostrará el mismo mensaje:
La conclusión de este breve ejercicio es que nuestro código se ejecutará al utilizar el comando Guardar o el comando Guardar como.
Impedir guardar el archivo Excel
Para evitar guardar el archivo será suficiente con asignar el valor True al argumento Cancel de la siguiente manera:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "No está permitido guardar este archivo." Cancel = True End Sub
Es importante seguir un orden específico para guardar esta instrucción en nuestro archivo ya que tú mismo podrías impedir guardar el código anterior. Mi sugerencia es seguir los siguientes pasos:
- Crear y guardar el libro habilitado para macros solo incluyendo la instrucción MsgBox.
- Cerrar el archivo y volver a abrirlo pero esta vez deshabilitando las macros.
- Agregar la línea de código Cancel = True y guardar el archivo.
La próxima vez que abras el archivo y habilites las macros, el código anterior impedirá que se guarde el archivo.
Distinguir entre Guardar y Guardar como
El código del ejemplo anterior se ejecuta con el comando Guardar y con el comando Guardar como. Es probable que en alguna ocasión necesites impedir solamente alguno de los dos comandos y en ese caso deberás evaluar el valor del argumento SaveAsUI del evento BeforeSave.
El argumento SaveAsUI será VERDADERO cuando se ejecute el comando Guardar como y tendrá el valor FALSO cuando se ejecute el comando Guardar. Un ejemplo de uso sería cuando quieres impedir que se guarde el archivo actual pero deseas permitir que el usuario guarde el archivo con otro nombre. En ese caso nuestro código será el siguiente:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If SaveAsUI = False Then MsgBox "No está permitido guardar este archivo." Cancel = True End If End Sub
El usuario podrá utilizar el comando Guardar como, pero si utiliza el comando Guardar, la macro se lo impedirá.
Proteger código de la macro
Es posible proteger el código de la macro de manera que no pueda ser alterado fácilmente por otro usuario. Para hacerlo, abre el Editor de Visual Basic (ALT + F11) y haz clic derecho sobre el Proyecto VBA y elige la opción Propiedades de VBAProject.
En el cuadro de diálogo Propiedades del proyecto, selecciona la pestaña Protección y marca la casilla de verificación Bloquear proyecto para visualización y además coloca una contraseña para proteger el proyecto.
Si algún usuario ingresa al Editor de Visual Basic e intenta visualizar el código de la macro, se le pedirá la contraseña que hemos establecido. Recuerda que este cambio en la protección de la macro deberás realizarlo antes de evitar el guardado del archivo con la instrucción Cancel = True o de lo contrario no podrás guardar los cambios en el archivo.
Descarga los tres ejemplos que hemos realizado en este artículo y experimenta con el uso del evento BeforeSave para impedir guardar un archivo Excel.