Recorrer los archivos de una carpeta con Dir

Realizar algún proceso en los archivos de una carpeta

El siguiente código muestra cómo se pueden procesar los archivos de una carpeta. FileSpec es el filtro que puede adaptar para recuperar sólo los archivos cuyo nombre siga un determinado patrón, por ejemplo *.xslx para obtener todos los archivos de Excel con extensión xslx.

Si miras el código verás que sólo la primera vez Dir tiene el argumento FileSpec. Esta primera llamada devuelve el primer fichero. Las siguientes llamadas, dentro del bucle, recuperan nombres de fichero adicionales, hasta que se devuelve una cadena vacía, lo que significa que no hay más ficheros que procesar.

Nota: Una forma alternativa de inspeccionar la carpeta es usando el Objeto del Sistema de Archivos, que es flexible. Las ventajas de usar Dir son 1. es nativo en VBA por lo que no tiene que hacer referencia a la biblioteca FSO, 2. Dir es rápido.


Dim strFileName As String
'TODO: Specify path and file spec
Dim strFolder As String: strFolder = "C:\temp\"
Dim strFileSpec As String: strFileSpec = strFolder & "*.*"
strFileName = Dir(strFileSpec)
Do While Len(strFileName) > 0
    'TODO: replace Debug.Print by the process you want to do on the file
    'Dim strFilePath As String: strFilePath = strFolder & strFileName
    Debug.Print strFileName
    strFileName = Dir
Loop

Crear una matriz de nombres de archivo para una carpeta determinada

En el código siguiente, los nombres de los ficheros se almacenan en una matriz. Esto permite separar la actividad específica de procesar de la actividad de encontrar los archivos a procesar usando Dir.


Dim strFileName As String
'TODO: Specify path and file spec
Dim strFolder As String: strFolder = "C:\temp\"
Dim strFileSpec As String: strFileSpec = strFolder & "*.*"
Dim FileList() As String
Dim intFoundFiles As Integer
strFileName = Dir(strFileSpec)
Do While Len(strFileName) > 0
    ReDim Preserve FileList(intFoundFiles)
    FileList(intFoundFiles) = strFileName
    intFoundFiles = intFoundFiles + 1
    strFileName = Dir
Loop

La siguiente imagen muestra la parte del menú Código VBA (descargar) que le permite insertar el fragmento de código que necesita.

bucle a través de archivos utilizando dir