jueves, 10 de marzo de 2016

Macros para operaciones con archivos y carpetas en Excel

Hace unos minutos tuve que realizar un procesos con macros que genere una copia de respaldo en una base de datos. No tenia la menor idea de como hacerlo, pero gracias a Dios...está GOOGLE.

Encontré la siguiente publicación que me sirvió mucho para lograr la generación de la copia de respaldo de una base de datos en MS Access, y se los comparto en esta publicación:

Operaciones básicas

Las macros que les comparto nos permitirán realizar opciones tales como:
  • Mostrar rutas.
  • Crear directorios.
  • Copiar archivos.
  • Eliminar archivos.
  • Renombrar archivos.
  • Mover archivos.


Mostrar rutas

Con la siguiente macro mostramos la ruta del archivo en uso.
Sub MostrarRutaArchivo()
'Mostramos la ruta del archivo actual.
MsgBox ThisWorkbook.Path
'
End Sub
Aquí mostramos el directorio activo, mismo que se ubica cuando damos la opción Abrir Archivo.

Sub MostrarRutaActual()
'Mostramos la ruta activa.
MsgBox CurDir
'
End Sub
Crear directorio

Para crear un directorio vemos que hay una similitud con comando CMD.

Sub CrearDirectorio()
'Creamos una caroeta en el escritorio
MkDir "C:\Users\Usuario\Desktop\NombreNuevaCarpeta"
'
End Sub
Copiar archivos

Simplemente usamos FileCopy para copiar archivos.

Sub CopiarArchivo()
'Copiamos archivo a la carpeta Nuevo
FileCopy "C:\Users\Usuario\Desktop\Archivo.xlsx", "C:\Users\Usuario\Desktop\Nuevo\Archivo.xlsx"
'
End Sub
Eliminar archivos

Hay que tener mucho cuidado al eliminar archivos, ya que éstos no pasan por la Papelera de reciclaje.
Sub EliminarArchivo()
'Eliminamos archivo
Kill "C:\Users\Usuario\Desktop\archivo.xlsx"
'
End Sub
Renombrar archivos

Para renombrar archivos usamos la instrucción Name.

Sub RenombrarArchivo()
'Renombramos archivo
Name "C:\Users\Usuario\Desktop\archivo.xlsx" As "C:\Users\Usuario\Desktop\archivo2.xlsx"
'
End Sub
Mover archivos

En este artículo vimos cómo mover archivos de carpeta, también usando la instrucción Name.

Sub MoverArchivo()
'Movemos archivo a la carpeta Nuevo
Name "C:\Users\Usuario\Desktop\archivo.xlsx" As "C:\Users\Usuario\Desktop\Nuevo\archivo.xlsx"
'
End Sub
La macros que realice

Despues de analizar el código que les acabo de compartir realice la siguiente macros:

Sub CopiaSeguridad()

Dim Libro As Workbook            'Es el libro actual
Dim HojaC As Worksheet         'Es la hoja de conexión

Dim TXT_Origen As String       ' aqui guardare el origen de mi base de datos
Dim TXT_Destino As String     ' aqui guardare el destino de mi base de datos

Set Libro = ActiveWorkbook
Set HojaC = Sheets("Conexion")

TXT_Origen = HojaC .Range("A6")  'En la hoja conexion en la celda A6 tengo la dirección de mi Base de datos

FechaTMP = Date    'Capturo la fecha de hoy

DiaAct = Right("00" & Day(FechaTMP), 2)                 'Capturo el dia de hoy
MesAct = Right("00" & Month(FechaTMP), 2)            'Capturo el mes de la fecha de hoy
AnioAct = Year(FechaTMP)                                         'Capturo el año de la fecha de hoy

ABC = "BD_" & AnioAct & "_" & MesAct & "_" & DiaAct   'Genero el nuevo nombre. Ejemplo: BD_2016_03_10

TXT_Destino = Application.GetSaveAsFilename(ABC, , , "Seleccione la carpeta")    'Selecciono una carpeta
TXT_Destino = TXT_Destino & "mdb"                      ' Ejemplo: C:\Mis Documentos\BD_2016_03_10.mdb

FileCopy TXT_Origen, TXT_Destino

MsgBox "Se genero el backup satisfactoriamente"

End Sub

Espero que les sirva: