Como Obtener el estado de guardado de un archivo usando VBA
A menudo, al crear una macro, es posible que necesitemos saber el estado de guardado del archivo con el que estamos trabajando. Esta publicación explora algunas de las opciones disponibles para comprender y controlar este importante aspecto del control de archivos.
Usando la propiedad .saved
Dentro del Editor de Visual Basic podemos ver la propiedad Guardado de un libro.
Si guarda un libro de trabajo, cambiará a Verdadero, pero una vez que realice un solo cambio, volverá a ser Falso.
Efectivamente, esta propiedad muestra si el archivo actual ha cambiado con respecto a la versión guardada anteriormente.
Sub saveStatus()If ActiveWorkbook.Saved = False Then MsgBox "El archivo ha cambiado desde la última vez que se guardó"Else MsgBox "El archivo no ha cambiado desde la última vez que se guardó"End IfEnd Sub
Aunque parece que esta debería ser una propiedad de solo lectura, es posible cambiarla con VBA. Esto engañará a Excel haciéndole creer que el archivo actual ha sido modificado o no.
Es esta propiedad la que utiliza Excel para saber si mostrar el siguiente mensaje al cerrar el libro.
Hay dos formas de evitar este mensaje:
Método 1: configurar DisplayAlerts = Falso
El uso del siguiente código no hará que aparezca el cuadro de mensaje "quiero guardar los cambios" y el archivo no se guardará.
Application.DisplayAlerts = FalseActiveWorkbook.CloseApplication.DisplayAlerts = Verdadero
Método 2: use .saved = true
Al igual que el método 1, al usar el código siguiente no aparecerá el cuadro de mensaje "quiero guardar los cambios" y el archivo no se guardará.
ActiveWorkbook.Saved = TrueActiveWorkbook.Cerrar
¿Alguna vez se ha guardado un archivo?
Hemos establecido lo que puede hacer la propiedad .saved. Pero falta un dato. . . no nos dice si el archivo se ha guardado alguna vez.
Si crea un nuevo documento en Excel, su estado guardado se muestra como Verdadero. Pero una vez que se realiza un cambio en el libro, cambia a Falso. Por lo tanto, el estado Verdadero/Falso de la propiedad guardada no nos ayuda a saber si alguna vez se guardó un archivo. Pero también tenemos varias opciones aquí.
Método 1: probar la ruta del archivo
Un libro que nunca se haya guardado tendrá un valor en blanco para la ruta del archivo.
Si ActiveWorkbook.Path = "" Entonces MsgBox "No guardado"
Método 2: utilizar la función FILEDATETIME
La función FILEDATETIME en VBA toma solo un argumento, una ruta de archivo completa, y devuelve la última vez que se modificó el archivo.
Depurar.Imprimir FileDateTime(ActiveWorkbook.Name)
Si el archivo se ha guardado, se devolverá una fecha y hora a la ventana Inmediato; de lo contrario, se devolverá un error.
Al detectar el error, sabrá si el archivo se guardó alguna vez.
En caso de error, reanudar NextDebug.Print FileDateTime(ActiveWorkbook.Name)Si Err.Number 0 Entonces MsgBox "El archivo nunca se ha guardado"Finalizar si en error Ir a 0
Método 3: utilizar propiedades de documento integradas
Este enfoque es similar a la función FILEDATETIME.
Debug.Print ActiveWorkbook.BuiltinDocumentProperties ("Última hora de guardado")
Si el archivo se ha guardado, se devolverá una fecha y hora a la ventana Inmediato; de lo contrario, se devolverá un error.
Al igual que la función FILEDATETIME, puede detectar el error si el archivo nunca se ha guardado.
Conclusión
Al escribir código VBA, existen varias opciones y configuraciones que podemos usar para comprender y controlar cómo y si se guarda un archivo. En varias aplicaciones, esto es crucial para garantizar que la macro se ejecute sin problemas.
Deja una respuesta