Hola estimados amigos, tanto tiempo. Mi retorno por estos lares tiene como base la consulta de un lector del blog, quien me plantea lo siguiente: necesita que toda la información que vuelca a una tabla sea resguardada en otra hoja, a modo de backup. Es decir: realiza distintas acciones sobre una tabla (alta, baja, modificaciones de registros) y luego estas acciones deben quedar guardadas en otra hoja, como resguardo. Desconozco los motivos que tiene mi lector para realizar dicha acción, ya que si a ese backup lo realizamos dentro del mismo libro... si se "rompe" el libro, perdemos la fuente original y la copia. Personalmente, y para asegurarme estar a salvo de cualquier problema mayor, también haría un resguardo de la hoja en otro libro. Y, ya que estamos, lo agregaré a este trabajo, para dar mas opciones y hacer que la entrada nos enseñe sobre nuevos aspectos. Empecemos.
los que ya me conocen... saben sobre mi total falta de buen gusto y extremada vagancia a la hora de diseñar algo. Bien sencillo.
[+/-] Ver el resto / Ocultar
Supongamos que mi amigo tiene la tabla de la imagen superior: agrega datos, elimina, los modifica, puede crear nuevos campos, etc, etc, etc. Programar algo que ante cada cambio se refleje en una tabla espejo me parece mucho trabajo y código inútil, mas vale (y siguiendo con el "paso a paso" tan necesario en todos nuestros proyectos) yo haría lo siguiente:
1) El usuario modifica datos a gusto.
2) Antes de cerrar el libro hago una copia de la tabla en otra hoja
3) Luego del punto 2), hago una copia de la tabla en otro libro
Entonces, vamos a crear una hoja llamada "backup", y la dejamos en blanco. A partir de ahora la manejaremos mediante código.
Seguimos. Esa hoja "backup" deberá estar oculta (muy oculta), por cuanto nos vamos a la ventana de propiedades de dicha hoja y colocamos la propiedad "visible" en "veryHidden"
Ahora ¿Qué evento aprovecharé para guardar los datos? ¿O coloco un botón que diga "Guardar" para que el usuario pueda backapear los datos? No, mejor no dejo nada en manos del usuario... somos humanos y cometemos errores y olvidos; es mas oportuno aprovechar las macros y automatizar la tarea. Entonces voy a escribir el código para que el proceso de resguardo se realice antes de cerrar el libro: de esta forma me garantizaré que toda la información quede respaldada en el instante previo a cerrar el libro sobre el cual trabajo. Me parece una de las mejores opciones.
Entonces, desde el explorador de proyectos, haré clic sobre "ThisWorkbook" y procederé como lo muestra la siguiente imagen, haciendo uso del evento Workbook_BeforeClose (traducido, algo como "antes de cerrar el libro"):
el código se encuentra bien comentado, por cuanto les será factible realizar sin problemas el "paso a paso", analizando cada línea.
Ahora colocaré el código del Sub "GuardarEnOtroLibro". Recordemos que a este procedimiento lo agrego yo, a modo de mejora, para salvaguardar los registros dentro del propio libro y, también, fuera de este:
En las líneas de arriba les es posible visualizar un pequeño truco, un "rebusque": ¿como hago para generar nombres de archivo que no se repitan? Fácil: les coloco el año, mes, día, hora, minuto y segundo en que se guarda. De esta forma, por ejemplo, un archivo me queda: "backup_20140818-172315.xls", con lo cual creo un nombre irrepetible, ya que al guardar un nuevo archivo, transcurren un par de segundos y evito así la duplicidad (que me arrojaría un error).
Así queda el directorio de guardado: el original mas todas las copias que se fueron generando, las cuales puedo conservar en su totalidad (creando un registro histórico) o bien eliminando las que crea conveniente:
Gracias por todos los mensajes y comentarios que recibo. Pido disculpas si no los contesto enseguida, se hace muy difícil ya que son muchas preguntas y algunas de ellas muy complejas.
Mientras tanto, seguimos en contacto con nuevas entradas.
Comentarios
Publicar un comentario