Cerrar un libro sin guardar
Cuando se obtienen datos de otro archivo de Excel con VBA, lo habitual es abrirlo con el método Workbooks.Open y cerrarlo al terminar.
Si solo necesita consultar el archivo, no hace falta guardarlo. Guardar sin necesidad también puede confirmar cambios accidentales en los datos.
En esta página se explica cómo cerrar un libro sin guardar usando VBA.
Respuesta: pase SaveChanges:=False al método Close
Al especificar False en el argumento SaveChanges de Workbook.Close, se descartan los cambios y el libro se cierra sin guardar.
Workbook.Close SaveChanges:=False
Si omite SaveChanges y el libro tiene cambios sin guardar, Excel muestra el cuadro “¿Desea guardar los cambios?” y la macro se detiene. En procesos automáticos, especifique siempre SaveChanges.
| Valor de SaveChanges | Comportamiento |
|---|---|
False | Cierra sin guardar |
True | Guarda y cierra (en libros nuevos pide la ubicación) |
| Omitido | Muestra un cuadro de confirmación si hay cambios sin guardar |
Código de ejemplo
Cerrar el libro activo sin guardar
ActiveWorkbook.Close SaveChanges:=False
ActiveWorkbook es el libro que está al frente cuando se ejecuta la macro. Use ThisWorkbook para el libro que contiene la propia macro. Para no cerrar un libro equivocado, es preferible mantener una referencia al libro concreto, como en el siguiente ejemplo.
Cerrar un archivo de Excel específico sin guardar
Dim wb As Workbook
Set wb = Workbooks.Open("C:\data\Book1.xlsx", ReadOnly:=True)
' ...procesamiento necesario...
wb.Close SaveChanges:=False
Si guarda el libro en una variable al abrirlo con Workbooks.Open, no habrá riesgo de cerrar otro por error. Abrirlo con ReadOnly:=True también reduce el riesgo de sobrescribirlo cuando solo se necesita leer.
Cerrar todos los libros excepto el de la macro
Dim i As Long
For i = Workbooks.Count To 1 Step -1
If Not Workbooks(i) Is ThisWorkbook Then
Workbooks(i).Close SaveChanges:=False
End If
Next i
Cerrar libros mientras se recorre Workbooks con For Each modifica el tamaño de la colección, por lo que es más seguro recorrerla hacia atrás. Se excluye ThisWorkbook porque cerrarlo terminaría la macro a medias.
Los cambios se descartan y no se pueden recuperar. Compruebe que ningún otro libro tenga trabajo sin guardar antes de ejecutarlo.
Nota: mostrar u ocultar el cuadro de confirmación
En lugar de SaveChanges:=False, puede establecer la propiedad Saved del libro en True para que Excel lo considere ya guardado.
wb.Saved = True
wb.Close
También puede suprimir el cuadro con Application.DisplayAlerts = False, pero esto desactiva todas las demás alertas, por lo que debe volver a establecerlo en True después. Para simplemente cerrar un libro, SaveChanges:=False es la opción más sencilla.
Ejemplos de uso
- Cerrar un libro de solo lectura abierto temporalmente durante una macro
- Terminar sin dejar archivos temporales generados por una macro
- Volver a abrir un libro de prueba varias veces sin conservar las ediciones