En mas de una oportunidad deberemos realizar backups de nuestros datos. Siempre deberíamos tener una copia de nuestro libro en alguna parte del disco, pendrive, cd, etc, etc... Por las dudas.
[+/-] Ver el resto / Ocultar
Presionando simplemente "Guardar como..." del menú archivo, lograremos este objetivo. Luego mostraré como realizar esto con macros, para ir guardando archivos con fechas secuenciales.
Pero el objetivo de este post es realizar un backup de una tabla en particular, hacia un archivo de texto.
Si el archivo tiene una sola hoja, desde el menú "guardar como" seleccionamos en la lista desplegable "tipo de archivo" el formato "txt" o "cvs" y tarea concluída, nos guardará esa unica hoja presente en el libro con el formato elegido.
Pero si armamos un sistema de gestión para nuestros clientes, resulta muy raro que nuestro archivo contenga una sola hoja y, encima, posea el formato apropiado para guardarlo convenientemente.
Entonces, la mejor solución (en este caso) es recurrir a las macros.
Detallaré a continuación como recorrer una tabla determinada y guardar todos sus datos en en archivo de texto, el cual servirá de respaldo y nos permitirá migrarlo nuevamente a excel sin mayores problemas, o bien llevarlo a
cualquier otra base de datos, como Access.
Analisis: poseo una tabla con datos personales de los empleados de la firma. le debo brindar al usuario la posibilidad de guardar esos registros externamente. me decido por el formato txt (muy liviano de de facil manejo), que se grabará en un directorio específico, sin borrar los backups existentes, para dejar un historial de los mismos. Para una correcta identificación de cada campo en el txt, los separé con un punto y coma ( ; ), lo que con posterioridad me facilitará la migración a cualquier otra aplicación.
Comencemos:
tenemos la siguiente tabla. Para que la macro funcione correctamente, el usuario deberá seleccionar la primer columna de datos, sin incluir el encabezado. Utilizo esta forma ya que puede ser que necesite realizar el resguardo de una parte de la tabla: la macro solo llevará al txt los datos de la columna seleccionada.
vean en la siguiente imagen: selecciono la primer columna, excluyendo el encabezado:
[+/-] Ver el resto / Ocultar
Presionando simplemente "Guardar como..." del menú archivo, lograremos este objetivo. Luego mostraré como realizar esto con macros, para ir guardando archivos con fechas secuenciales.
Pero el objetivo de este post es realizar un backup de una tabla en particular, hacia un archivo de texto.
Si el archivo tiene una sola hoja, desde el menú "guardar como" seleccionamos en la lista desplegable "tipo de archivo" el formato "txt" o "cvs" y tarea concluída, nos guardará esa unica hoja presente en el libro con el formato elegido.
Pero si armamos un sistema de gestión para nuestros clientes, resulta muy raro que nuestro archivo contenga una sola hoja y, encima, posea el formato apropiado para guardarlo convenientemente.
Entonces, la mejor solución (en este caso) es recurrir a las macros.
Detallaré a continuación como recorrer una tabla determinada y guardar todos sus datos en en archivo de texto, el cual servirá de respaldo y nos permitirá migrarlo nuevamente a excel sin mayores problemas, o bien llevarlo a
cualquier otra base de datos, como Access.
Analisis: poseo una tabla con datos personales de los empleados de la firma. le debo brindar al usuario la posibilidad de guardar esos registros externamente. me decido por el formato txt (muy liviano de de facil manejo), que se grabará en un directorio específico, sin borrar los backups existentes, para dejar un historial de los mismos. Para una correcta identificación de cada campo en el txt, los separé con un punto y coma ( ; ), lo que con posterioridad me facilitará la migración a cualquier otra aplicación.
Comencemos:
tenemos la siguiente tabla. Para que la macro funcione correctamente, el usuario deberá seleccionar la primer columna de datos, sin incluir el encabezado. Utilizo esta forma ya que puede ser que necesite realizar el resguardo de una parte de la tabla: la macro solo llevará al txt los datos de la columna seleccionada.
vean en la siguiente imagen: selecciono la primer columna, excluyendo el encabezado:
vamos al editor de visual basic (alt + f11) y en un nuevo modulo escribimos esto, que será el procedimiento al que luego llamaremos:
'creo una variable del tipo Range, para recorrer las'celdas de la tabla
Dim Celda As Range
Sub BackUpTabla(Archivo As String)
'en Linea iré guardando cada registro, para luego
'grabarlo en el txt
Dim Linea As String
Dim Sep As String 'separador de campos
Sep = ";"
'abro en archivo de forma secuencial. utilizo Output para que, si no existe, lo genere:
Open "C:\MisArchivos\" & Archivo For Output As #1
For Each Celda In Selection.Cells
'ahora llega el momento en el cual almaceno en Linea
'cada campo de la tabla, separandolos por un punto y
'coma, agregando al final la fecha y hora del backup
Dim Celda As Range
Sub BackUpTabla(Archivo As String)
'en Linea iré guardando cada registro, para luego
'grabarlo en el txt
Dim Linea As String
Dim Sep As String 'separador de campos
Sep = ";"
'abro en archivo de forma secuencial. utilizo Output para que, si no existe, lo genere:
Open "C:\MisArchivos\" & Archivo For Output As #1
For Each Celda In Selection.Cells
'ahora llega el momento en el cual almaceno en Linea
'cada campo de la tabla, separandolos por un punto y
'coma, agregando al final la fecha y hora del backup
Linea = Cells(Celda.Row, 1).Value & Sep & _
Cells(Celda.Row, 2).Value & Sep _
& Cells(Celda.Row, 3).Value & Sep _
& Cells(Celda.Row, 4).Value & Sep _
& Cells(Celda.Row, 5).Value & Sep _
& Now
'ahora con este comando envio los datos al txt:
Print #1, Linea
Linea = "" 'vacío la variable... por las dudas
Next Celda
Close #1
'la variable de objeto Celda debe ser destruída luego de utilizarse, para liberar recursos del sistema
Set Celda = Nothing
End Sub
Cells(Celda.Row, 2).Value & Sep _
& Cells(Celda.Row, 3).Value & Sep _
& Cells(Celda.Row, 4).Value & Sep _
& Cells(Celda.Row, 5).Value & Sep _
& Now
'ahora con este comando envio los datos al txt:
Print #1, Linea
Linea = "" 'vacío la variable... por las dudas
Next Celda
Close #1
'la variable de objeto Celda debe ser destruída luego de utilizarse, para liberar recursos del sistema
Set Celda = Nothing
End Sub
teniendo listo el Sub que hará la tarea, ahora lo llamamos desde otro procedimiento:
Sub AccionBackUp()
'defino una variable en la cual guardaré el nombre que
'llevará el backup. recordemos que debe llevar un nombre
'distinto a cualquier otro generado.
Dim NombreArchivo As String
'la mejor forma de hacer lo anterior es esta: nombro al
'nuevo archivo incluyendo: fecha y hora. listo, jamas se
'duplicará, salvo que le hagan cambios al calendario del
'sistema:
NombreArchivo = Day(Now) & Month(Now) & Year(Now)
NombreArchivo = NombreArchivo & Hour(Time) & Minute(Time) & Second(Time)
'ahora le agrego la extension, para que posteriormente sea
'reconocido por el sistema operativo
NombreArchivo = NombreArchivo & ".txt"
'y listo, llamo al Sub que realiza el backup y le paso como
'argumento el nombre de archivo recién generado:
BackUpTabla NombreArchivo
MsgBox "BackUp Finalizado", vbInformation
End Sub
'defino una variable en la cual guardaré el nombre que
'llevará el backup. recordemos que debe llevar un nombre
'distinto a cualquier otro generado.
Dim NombreArchivo As String
'la mejor forma de hacer lo anterior es esta: nombro al
'nuevo archivo incluyendo: fecha y hora. listo, jamas se
'duplicará, salvo que le hagan cambios al calendario del
'sistema:
NombreArchivo = Day(Now) & Month(Now) & Year(Now)
NombreArchivo = NombreArchivo & Hour(Time) & Minute(Time) & Second(Time)
'ahora le agrego la extension, para que posteriormente sea
'reconocido por el sistema operativo
NombreArchivo = NombreArchivo & ".txt"
'y listo, llamo al Sub que realiza el backup y le paso como
'argumento el nombre de archivo recién generado:
BackUpTabla NombreArchivo
MsgBox "BackUp Finalizado", vbInformation
End Sub
listo el pollo. ahora tendremos un historial de backups de la tabla en cuestión. si bien los archivos de texto son vulnerables, convengamos que todos los son. con el notepad puedo abrir cualquier cosa y hacer un desastre, hasta en un archivo .exe
en otro post indicaré como mediante el objeto File Sistem Object (FSO) podemos acceder a las propiedades del archivo, y así ocultarlo. otra buena técnica es encriptar los datos con alguna clave y luego grabarlo, cuestión de que le que acceda al txt entienda poco y nada. otra: podemos guardar el archivo con alguna extensión "rara", por ejemplo: .xtkl, total luego desde VBA lo abriríamos sin problemas.
expliqué al principio que el usuario deberá seleccionar la primer columna para que la macro funcione correctamente. bueno, aquí un par de trucos por si se equivoca:
con este código averiguo si tiene mas de una columna seleccionada:
If Selection.Columns.Count <> 1 Then
MsgBox "Debe seleccionar una sola columna", vbCritical
Exit Sub
End If
MsgBox "Debe seleccionar una sola columna", vbCritical
Exit Sub
End If
con este, si tiene una sola fila seleccionada:
If Selection.Rows.Count = 1 Then
MsgBox "Debe seleccionar mas de una fila", vbCritical
Exit Sub
End If
MsgBox "Debe seleccionar mas de una fila", vbCritical
Exit Sub
End If
las posibilidades son infinitas. dudas... comentarios... consultas... simplemente posteenlas.
un abrazo
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Etiquetas
Macros
Etiquetas:
Macros
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Comentarios
Publicar un comentario