Listar archivos y carpetas de forma recursiva con Excel VBA
Fecha de publicación:
Actualizado:
Artículos técnicos > Listar archivos y carpetas de forma recursiva con Excel VBA
Estado y uso seguro en 2026
Conclusión: Visite recursivamente cada carpeta, emita los archivos que necesita y vuelva a pasar cada carpeta secundaria al mismo procedimiento. Agregue manejo de errores explícito y una política para uniones, enlaces simbólicos, carpetas ocultas y rutas de acceso denegado.
Qué aprenderás
- Cómo FileSystemObject expone carpetas, subcarpetas, archivos, nombres y rutas.
- Cómo la recursividad construye un árbol completo y por qué los árboles profundos o cíclicos necesitan salvaguardias.
- Cómo escribir resultados en una hoja de cálculo sin operaciones lentas celda por celda a gran escala.
Para quién es: usuarios de Excel que realizan un inventario de un árbol de directorios controlado de Windows.
Situación en 2026: La muestra refleja la prueba local original del autor. Valide los permisos y el comportamiento de los enlaces en una copia de su estructura de directorios y considere PowerShell o una herramienta de inventario dedicada para árboles muy grandes o sensibles a la seguridad.
Nota de seguridad: Los comandos y ejemplos de configuración del artículo original no se han vuelto a ejecutar en un entorno de producción actual. Verifique las versiones compatibles, las copias de seguridad, los controles de acceso y los pasos de reversión en un entorno de prueba independiente antes de aplicarlos.
Fuentes primarias oficiales
Resumen.
Este artículo muestra cómo enumerar archivos y carpetas de forma recursiva con VBA y cubre estas tareas:
- Quiero obtener una lista de todos los archivos o carpetas bajo una carpeta con sus rutas completas.
- Desea realizar el procesamiento en un bucle para archivos o carpetas bajo una carpeta.
Índice de contenidos
1. Método de programación
A continuación se ofrecen ejemplos de referencia de programación.
El ejemplo define una Function que puede copiarse tal como aparece y llamarse desde un procedimiento Sub.
'Parameter Examples
'## filePath C:\Users\user\Desktop\test\
'## kind false:folder, true:file
'## list
Function getFolderOrFile(filePath As String, kind As Boolean, list As Collection) As Collection
'delete\
Dim filePathEnd As String
filePathEnd = Right(filePath, 1)
If filePathEnd = "\" Then
filePath = Left(filePath, Len(filePath) - 1)
End If
'Folder existence check
Dim result As String
result = Dir(filePath, vbDirectory)
If result = "" Then
MsgBox "File does not exist!"
Exit Function
End If
If kind Then
Dim buf As String
buf = Dir(filePath & "\*.*")
Do While buf <> ""
list.Add filePath & "\" & buf
buf = Dir()
Loop
Else
list.Add filePath
End If
Dim folder As Object
With CreateObject("Scripting.FileSystemObject")
For Each folder In .GetFolder(filePath).SubFolders
getFolderOrFile folder.Path, kind, list
Next folder
End With
End Function
Para utilizarlo, pase lo siguiente como argumentos.
- filePath: directorio. Ejemplo.)C:\Users\user\Desktop\test
- kind: Pasar verdadero, falso. Si es True, devuelve una lista de archivos. Si es falso, devuelve una lista de carpetas.
- list: La colección se utiliza para almacenar los resultados. A continuación se ofrece un ejemplo de aplicación.
A continuación se muestra un ejemplo de implementación de una llamada a una función real.
Sub test()
Dim list As Collection
Set list = New Collection
getFolderOrFile "C:\Users\user\Desktop\test", False, list
Dim item As Variant
For Each item In list
'------TODO------
ThisWorkbook.Worksheets(1).Cells(1, 1).Value = item
Next
End Sub
Al llamar a getFolderOrFile se almacenará una lista de archivos o una lista de carpetas en la lista. El ejemplo de implementación es False, por lo que la lista de carpetas se almacena.
Describa el proceso que desea realizar en la sección "TODO" de la sentencia For. ITEM puede ser tratada como una variable String.
La fuente de referencia es el proceso de establecer la lista adquirida en A1 en Excel. (El proceso sobrescribe repetidamente la misma celda.)
2. Descripción del código.
Aquí terminan las instrucciones de uso del sistema, seguidas de una explicación del código.
Los detalles se pueden ver en el código, pero el punto clave es la llamada posterior a getFolderOrFile en el método getFolderOrFile.
En el proceso de búsqueda de carpetas, el proceso se repite llamando al proceso de búsqueda de carpetas, que es un mecanismo de búsqueda de todas las carpetas.
Al llamar a su propio método, llama repetidamente a su propio método mientras se encuentre la carpeta, buscando en todas las carpetas.
3. resumen
Si necesita ayuda sobre cómo obtener una lista de archivos y una lista de carpetas, incluidas las subcarpetas, utilizando VBA (macros de Excel), consulte esta sección.