En ocasiones me han preguntado si se podía saber todos los archivos que hay en una carpeta y poder listarlos… pues claro que se puede contesté rápidamente. Todo lo que necesitas es una macro de VBA muy sencilla para obtener estos nombres de archivo. La idea es copiar nombres de archivos de una carpeta a Excel, así de sencillo, en una columna tener todo el listado.
Código para copiar nombres de archivos de una carpeta a Excel
El código de VBA lo he escrito basándome en pedacitos que he ido encontrando en la web… es decir, ya mucho escrito pero había que ponerlo a nuestro gusto y añadirle las explicaciones pertinentes. El código se basa en estos sencillos pasos:
- Seleccionar gráficamente con un pop-up la carpeta de la que se quieren copiar nombres de archivos de una carpeta a excel
- Comprobar que la carpeta no está vacía
- Hacer un bucle comprobando que el archivo no es vacío e ir poniéndolo en la celda correspondiente
El código del que estamos hablando es el siguiente:
Option Explicit Sub Obtener_nombres() Dim fila As Long Dim Ruta_elegida, Nombre_archivo, Ruta_inicial Ruta_inicial = "C:\" '<<< Donde comienzo a mirar With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Selecciona una carpeta" .InitialFileName = Ruta_inicial .Show If .SelectedItems.Count <> 0 Then 'Compruebo que se ha seleccionado una carpeta Ruta_elegida = .SelectedItems(1) & "\" 'Ruta que he elegido Nombre_archivo = Dir(Ruta_elegida) 'primer archivo de la carpeta Do While Nombre_archivo <> "" Cells(7, 1).Offset(fila) = Nombre_archivo fila = fila + 1 Nombre_archivo = Dir 'siguiente archivo Loop End If End With End Sub
Explicación
Como ya hemos explicado previamente, el código es muy sencillo, pero necesita de algunas explicaciones para poder entenderlo bien.
El siguiente pedacito de código es el que nos permite personalizar el pop-up de selección de carpeta en VBA:
Application.FileDialog(msoFileDialogFolderPicker) .Title = "Selecciona una carpeta" .InitialFileName = Ruta_inicial .Show
Una vez hecho esto compruebo que se ha seleccionado alguna carpeta con esta comprobación:
If .SelectedItems.Count <> 0 Then 'Compruebo que se ha seleccionado una carpeta
Finalmente voy recorriendo todos los archivos de la carpeta comprobando que no sean vacíos y pegándolos en su correspondiente celda (una más abajo que la anterior):
Do While Nombre_archivo <> "" Cells(7, 1).Offset(fila) = Nombre_archivo fila = fila + 1 Nombre_archivo = Dir 'siguiente archivo Loop
Descargable
Para poder esto desde tú casa tienes dos opciones, o copiar el código y hacerlo tú mismo o utilizar este archivo que os dejo para que podáis descargarlo: Extraer nombres de archivo de una carpeta