Uno de los usos mas comunes que le damos a las macros es el de repetir una operación un determinado numero de veces. El ejemplo que exponemos a continuación nos muestra como manejar diferentes archivos almacenados en el disco.
Lo primero que hacemos es dar las especificaciones que deben de cumplir los archivos que queremos manejar, en este caso de texto.
Como nota importante, al iniciar el procedimiento y al no saber que cantidad de archivos nos puede dar la búsqueda, utilizamos la instrucción ReDim para redimensionar la matriz preservando (Preserve) los datos.
Sub ProcesoMatriz()
Dim ArchivoSpec As String
Dim i As Integer
Dim NombreArchivo As String
Dim ListaArchivos() As String
Dim ArchivosEncontrados As Integer
ArchivoSpec = ThisWorkbook.Path & "\" & "*.txt"
NombreArchivo = Dir(ArchivoSpec)
If NombreArchivo <> "" Then
ArchivosEncontrados = 1
ReDim Preserve ListaArchivos(1 To ArchivosEncontrados)
ListaArchivos(ArchivosEncontrados) = NombreArchivo
Else
MsgBox "No se encontraron archivos que coinciden con " & ArchivoSpec
Exit Sub
End If
Do
NombreArchivo = Dir
If NombreArchivo = "" Then Exit Do
ArchivosEncontrados = ArchivosEncontrados + 1
ReDim Preserve ListaArchivos(1 To ArchivosEncontrados)
ListaArchivos(ArchivosEncontrados) = NombreArchivo & "*"
Loop
For i = 1 To ArchivosEncontrados
Call ProcesaArchivo(ListaArchivos(i))
Next i
End Sub
La función Dir nos devuelve el nombre de un archivo, directorio o carpeta que coincide con el patrón o atributo de archivo especificado.
En este caso, importamos el archivo e introducimos una serie de formulas de resumen que describen los datos del archivo.
Los archivos que cumplen la especificación dada se almacenan en la Matriz ListaArchivos, el procedimiento utiliza el bucle For – Next para procesarlos. Dentro del bucle llamamos al procedimiento ProcesarArchivo.
El procedimiento ProcesarArchivo importa el archivo y luego inserta las cinco formulas.
Sub ProcesaArchivo(NombreArchivo As String)
Workbooks.OpenText Filename:=NombreArchivo
Range("D1").Value = "A"
Range("D2").Value = "B"
Range("D3").Value = "C"
Range("E1:E3").Formula = "=COUNTIF(A:A,D1)"
Range("F1:F3").Formula = "=SUMAIF(A:A,D1,B:B)"
End Sub
El método Workbooks.OpenText Carga y redistribuye un archivo de texto en forma de libro nuevo con una sola hoja que contiene los datos redistribuidos del archivo de texto.
Cualquier duda al respecto de lo comentado en el post no dudéis en exponerlo.