VBA nos ofrece la posibilidad, muy sencilla y con unas pocas líneas de código, de guardar una copia de seguridad de nuestro libro. En realidad Excel trae una herramienta de autorecuperación, que se habilita desde Herramientas / Opciones / pestaña "Guardar", la cual nos brinda la opcion de activar la recuperación automática y definir cada que período de tiempo se hará, y en que directorio:
de todas formas, esta herramienta nos será útil si nuestra aplicación se cierra de improviso, como por ejemplo ante un corte de luz.
Pero vamos un poco mas allá, dado que el procedimiento anterior no es suficiente para resguardar convenientemente nuestros datos. Haremos lo siguiente: cada vez que cerremos el libro, nuestra macro se encargará de crear una copia del mismo en el directorio que le especifiquemos.
Aprovecharemos el evento: BeforeClose (antes de cerrar) del objeto Workbook. Vamos a VBA con alt + f11 y abrimos la ventana respectiva. Noten las ocpciones resaltadas de amarillo:
Este evento nos permitirá escribir el código que se ejecutará antes de cerrar el libro.
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim NuevoLibro As String Dim LibroActual As String Dim Posi As Integer 'tomo el nombre del libro actual LibroActual = ActiveWorkbook.Name 'ahora a ese nombre necesito quitarle la extensión del archivo 'para esto, busco (desde la derecha) el "." (punto) que separa 'el nombre de la extensión, tomando su posicion dentro de la cadena Posi = InStrRev(LibroActual, ".") 'y ahora tomo solo el nombre, con la función MID(), que tiene 3 'argumentos: cadena, posicion inicial, cantidad de caracteres a extraer NuevoLibro = Mid(LibroActual, 1, (Posi - 1)) 'le agrego la fecha y la hora al final, para hacer un nombre de archivo 'único y que no sobreescriba ninguno anterior, así guardo varios 'backups del mismo libro. para citar un ejemplo, el archivo nos quedaría: 'nombreDeArchivo_fecha_hora: NuevoLibro = NuevoLibro & "_" & Day(Now) & Month(Now) & Year(Now) _ & "_" & Hour(Now) & Minute(Now) & Second(Now) 'para ahorrar trabajo mas adelante, puedo también aquí agregar al 'nombre la ruta en donde se guardará: NuevoLibro = "C:\" & NuevoLibro 'bueno, ya tenemos el nombre que llevará nuestro backup, y la ruta en 'donde lo guardaremos...solo restan hacer tres cosas: '1) guardar el archivo original: ActiveWorkbook.Save '2) "guardar como.." el archivo, con el nombre originado mas arriba: ActiveWorkbook.SaveAs Filename:=NuevoLibro, FileFormat:=xlNormal '3)nos vamos, para evitar que modiquen el backup: ActiveWorkbook.Close End Sub
al utilizar InStrRev() y Mid() nos aseguramos que tome correctamente la extensión del archivo, sea este "xls" o "xlsx", dado que ese caracter de diferencia nos alarga la cadena de texto.
Notarán también que un backup nunca pisa al otro, vá guardando un "historial de backups", lo mas aconsejable para información muy sensible.
Si, de todas formas, quisiéramos borrar cualquier backup existente y solo dejar una copia, el código sería el siguiente:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LibroActual As String 'tomo el nombre del libro actual LibroActual = ActiveWorkbook.Name 'concateno la ruta de acceso: LibroActual = "C:\" & LibroActual 'busco en el directorio donde guardo los backups si existe alguno 'previamente creado: If Dir(LibroActual) <> "" Then 'si existe, lo elimino: Kill LibroActual End If 'y sigo con los tres pasos finales: '1) guardar el archivo original: ActiveWorkbook.Save '2) "guardar como.." el archivo, con el nombre originado mas arriba: ActiveWorkbook.SaveAs Filename:=LibroActual, FileFormat:=xlNormal '3)nos vamos, para evitar que modiquen el backup: ActiveWorkbook.Close End Sub
Bueno, listo nuestro backup. Recuerden que la ruta de guardado deberá ser distinta a la del libro original. Puse en el ejemplo "C:\", pero puede ser cualquiera, especialmente si queremos que la misma quede oculta al usuario final.
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Etiquetas
Macros
Etiquetas:
Macros
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Hola Damian, antes que todo felicitarte por tu blog, llevo varios meses desde tiempo visitándolo y es increíble, me gusta mucho.
ResponderEliminarPasando a otro punto, he usado esta macro en un archivo, y se crean los backup muy bien en la ruta que le asigne, sólo me surgió un duda, ¿cómo abro los backup, en caso de que desee ver algún respaldo en cierto momento?, saludos.
Jesús Medrano.
Dentro de la macro, y para que el ejemplo sea sencillo, ingresé como ruta de guardado a "C:\"... si quieres ver un backup, te vas a ese directorio y desde ahí abres el libro respectivo.
ResponderEliminarQuizás sea mas conveniente que la ruta sea algo mas representativa, como por ejemplo: "C:\Mis Documentos\Mis Macros\BackUps\" y ahí se guarden los libros.
Un abrazo