Sei sulla pagina 1di 4

Macro para listar archivos de carpetas y subcarpetas

En un artculo pasado creamos una macro para listar los archivos de una
carpeta y colocar sus nombres en las celdas de una columna de Excel. Sin
embargo es posible mejorar dicha macro para incluir todos los archivos
contenidos en las subcarpetas y eso ser precisamente lo que haremos en esta
ocasin.

Archivos de carpeta y subcarpetas

Como ejemplo utilizaremos una estructura de archivos como la siguiente:

He colocado la carpeta principal directamente en la unidad C: de mi equipo de


manera que la ruta para dicha carpeta ser C:\Carpeta.

La carpeta principal contiene 5 archivos y 2 subcarpetas. Cada una de las


subcarpetas contiene 5 archivos a la vez por lo que en total tenemos 15
archivos entre la carpeta principal y las subcarpetas. Nuestro objetivo ser
crear una macro para listar todos los archivos tanto de la carpeta principal
como de sus subcarpetas.

El objeto FileSystemObject

El objeto FilsSystemObject es de gran utilidad para tener acceso al sistema de


archivos de cualquier equipo. Este objeto nos permite manipular archivos,
carpetas, sus rutas de acceso e inclusive podemos obtener informacin del
sistema de archivos. Para crear este tipo de objeto en VBA utilizamos la
siguiente instruccin:

Set fs = CreateObject("Scripting.FileSystemObject")

Con esta instruccin habremos creado un objeto FileSystemObject el cual


podremos acceder a travs de la variable fs. A lo largo del cdigo de nuestra
macro utilizar algunos mtodos del objeto FileSystemObject y para cada uno
dar una breve explicacin que te permita comprender su funcionamiento.

Macro para listar archivos de carpetas y subcarpetas

A continuacin se encuentra el cdigo de la macro que crea un listado de los


archivos contenidos en la carpeta y subcarpetas.

1 Sub Mostrar_Archivos(ruta)
2
3 'Seccin 1: Declaracin de variables y objetos
4 Dim fs, carpeta, archivo, subcarpeta As Object
5 Set fs = CreateObject("Scripting.FileSystemObject")
6
7 'Seccin 2: Ajustes necesarios a ruta
8 If ruta = "" Then
9 Exit Sub
10 ElseIf Right(ruta, 1) <> "" Then
11 ruta = ruta & ""
12 End If
13
14 'Seccin 3: Objeto Folder de la ruta indicada
15 On Error GoTo ErrHandler
16 Set carpeta = fs.GetFolder(ruta)
17
18 'Seccin 4: Obtener archivos del objeto Folder
19 For Each archivo In carpeta.Files
20 ActiveCell.Value = ruta & archivo.Name
21 ActiveCell.Offset(1, 0).Select
22 Next
23
24 'Seccin 5: Obtener subcarpetas del objeto Folder
25 For Each subcarpeta In carpeta.SubFolders
26 Mostrar_Archivos (subcarpeta)
27 Next
28
29 'Seccin 6: Auto-ajustar columnas y salir
30 ActiveCell.EntireColumn.AutoFit
31 Exit Sub
32
33 ErrHandler:
34 ActiveCell.Value = "Ruta inexistente"
35
36 End Sub

En la seccin 1 de cdigo observars la declaracin de las variables utilizadas


en la macro as como la creacin del objeto FilsSystemObject y su asignacin a
la variable fs. La seccin 2 analiza el parmetro ruta de la subrutina para saber
si dicha cadena de texto est vaca y en tal caso salir del procedimiento. De lo
contrario se revisa que dicha ruta termine con una diagonal invertida y de no
ser as se hace una concatenacin de dicho carcter.

El objetivo del cdigo de la seccin 3 es el de crear un objeto de


tipo Folder que nos permita analizar el contenido de la carpeta. Esto se logra
utilizando el mtodo GetFolder del objeto FileSystemObject y el resultado es
guardado en la variable carpeta. Es con el uso del mtodo GetFolder que
podemos obtener un error en VBA en caso de que la ruta indicada sea invlida
por lo que he agregado la instruccin On Error GoTo para que en caso de
obtener un error, la macro ejecute el cdigo de la etiqueta ErrHandler que se
encuentra al final del cdigo y que imprimir el mensaje Ruta inexistente.

En la seccin 4 utilizamos la instruccin For Each para recorrer todos los


archivos devueltos por el mtodo Files y que estn contenidos en la carpeta
principal. Para cada archivo encontrado se concatena su ruta y su nombre y se
asigna al valor de la celda activa. Posteriormente activamos la celda inferior a
la celda activa de manera que la seleccin quede lista para el siguiente archivo.

La seccin 5 obtiene las subcarpetas con el mtodo SubFolders y para cada


una de ellas se vuelve a ejecutar la macro Mostrar_Archivos lo cual ocasionar
que se repita todo el proceso hasta imprimir todos los archivos contenidos en
cada una de ellas.

Finalmente la seccin 6 se encarga de auto ajustar el ancho de la columna de


la celda activa de manera que se puedan visualizar correctamente todos los
nombres de archivos. Finalmente se ejecuta la instruccin Exit Sub para salir
del procedimiento.

Probando la macro

Para probar esta macro agregar un botn ActiveX a la hoja y colocar el


siguiente cdigo en su evento Click:

Utilizamos la funcin InputBox para permitir al usuario que ingrese la ruta de la


carpeta de la cual se desean mostrar los archivos.

Para iniciar la prueba debo seleccionar la celda donde deseo que se listen los
archivos ya que la macro comenzar a insertar los nombres a partir de la celda
activa. Posteriormente hago clic en el botn y se mostrar el cuadro de dilogo
solicitando la ruta de la carpeta.
Ingreso la ruta de la carpeta que contiene los archivos y al hacer clic en el
botn Aceptar se ejecutar la macro y obtendremos el siguiente resultado.

Si comparas el contenido de las celdas de la columna A con los archivos


mostrados en la imagen al inicio de este artculo podrs comprobar que se han
listado todos los archivos de la carpeta principal y de sus subcarpetas.

A continuacin dejo el vnculo de descarga que contiene el libro de trabajo con


la macro recin creada. Adems encontrars la carpeta de ejemplo con los
archivos y subcarpetas de manera que puedas realizar las pruebas por ti
mismo.

Potrebbero piacerti anche