Macro para guardar un libro sin preguntar

Cada vez que hacemos una modificación a un libro e intentamos cerrar Excel, obtendremos una notificación en pantalla preguntándonos si queremos guardar los cambios efectuados.

Aunque dicho recordatorio es muy conveniente, podría impedirnos cerrar Excel  automáticamente ya que la hoja de cálculo se quedará esperando la aprobación del usuario en pantalla para guardar los cambios.

Hagamos un ejemplo para entender el problema al que me refiero. Insertaré un botón ActiveX en la hoja del libro que tengo abierto en este momento (Desarrollador > Controles > Insertar) y el objetivo del botón será colocar la fecha y hora actual en la celda A1 y posteriormente cerrar Excel.

Macro para guardar un libro sin preguntar

Después de insertar el botón haré doble clic sobre él para insertar el siguiente código asociado a su evento Click:

Private Sub CommandButton1_Click()

Range("A1") = Now
Application.Quit

End Sub

La primera instrucción se encarga de colocar la fecha y hora en la celda A1 y la segunda instrucción cierra Excel. Al momento de hacer clic en el botón Active X, se insertará la fecha y hora actual en la celda A1 pero antes de cerrar Excel veremos una notificación como la siguiente:

Macro para guardar el libro abierto sin preguntar nada

Nuestra macro no cerrará Excel hasta que el usuario elija si quiere Guardar o No guardar los cambios efectuados. A continuación aprenderemos cómo evitar mostrar la notificación y permitir que la macro cierre automáticamente Excel.

Guardar un libro sin preguntar

La notificación mostrada en el ejemplo anterior se debe a que el archivo ha sufrido una modificación y por lo tanto Excel pide la confirmación del usuario para saber si se desean guardar los cambios antes de salir de la aplicación.

Para evitar la notificación podemos guardar el archivo antes de cerrar Excel y eso lo logramos con el método Save de la siguiente manera:

Private Sub CommandButton1_Click()

Range("A1") = Now
ThisWorkbook.Save
Application.Quit

End Sub

La única diferencia con la macro anterior es la línea con la instrucción ThisWorkbook.Save la cual nos ayuda a guardar el libro. De esa manera ya no habrá cambios sin guardar al momento de cerrar Excel y por lo tanto la macro podrá cerrar el libro sin enviar notificación alguna.

Guardar libro antes de cerrar Excel

Como casi todo en Excel, existe más de una manera de realizar las cosas. Un método alterno al ejemplo anterior es utilizar el evento BeforeClose para colocar la instrucción de guardado del libro. En este caso, el código del botón ActiveX permanece como en el primer ejemplo:

Private Sub CommandButton1_Click()

Range("A1") = Now
Application.Quit

End Sub

El evento BeforeClose del objeto ThisWorkbook tendrá el siguiente código:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

ThisWorkbook.Save

End Sub

El evento BeforeClose se encargará de guardar los cambios en el libro y por lo tanto, al cerrar Excel no se mostrará advertencia alguna al usuario.

Si no estás seguro sobre dónde colocar el código para el evento BeforeClose, te recuerdo que debes abrir el Editor de Visual Basic (Desarrollador > Visual Basic) y en el panel izquierdo deberás hacer doble clic sobre el objeto ThisWorkbook.

Evitar Guardar cambios al cerrar un libro con VBA

En la primera lista desplegable deberás elegir la opción Workbook y en la segunda lista deberás elegir la opción BeforeClose.

Cerrar libro y guardar modificaciones

La última alternativa que te mostraré es diferente a las anteriores porque no cierra Excel sino que solamente cierra el libro.

En este ejemplo también he colocado el botón ActiveX, que inserta la fecha y hora actual en la celda A1 y posteriormente cierra el libro con el método Close utilizando el argumento SaveChanges.

Private Sub CommandButton1_Click()

Range("A1") = Now
ThisWorkbook.Close SaveChanges:=True

End Sub

El método Close cierra el libro y el argumento SaveChanges se segura de guardar los cambios al momento de cerrar el libro y por lo tanto no se mostrarán notificaciones al usuario. Por supuesto que puedes igualar el argumento SaveChanges a False y se cerrará el libro sin guardar las modificaciones.

Descarga el archivo comprimido que contiene los cuatro ejercicios que hemos realizado en esta ocasión. Comienza a practicar con los métodos mostrados y crea tus propias macros que permitan guardar un archivo y cerrar Excel sin mostrar advertencias al usuario.