Note: The other languages of the website are Google-translated. Back to English

¿Cómo enumerar todos los archivos en carpetas y subcarpetas en una hoja de trabajo?

¿Alguna vez ha intentado enumerar todos los nombres de archivo de una carpeta en una hoja de trabajo, incluidos los archivos ubicados dentro de sus subcarpetas? De hecho, no existe una forma directa de que enumeremos los nombres de archivo de una carpeta y su subcarpeta en Excel, sin embargo, hoy, presentaré algunos trucos rápidos para resolver este trabajo.

Enumere todos los nombres de archivo en la carpeta y subcarpeta con código VBA

Enumere todos los nombres de archivo en carpetas y subcarpetas de forma rápida y sencilla con Kutools para Excel


Normalmente, Excel no tiene una función incorporada para hacer frente a esta tarea, pero puede aplicar el siguiente código VBA para completar este problema.

1. Active una nueva hoja de trabajo que enumerará los nombres de archivo.

2. Mantenga pulsado el ALT + F11 claves en Excel, y abre el Microsoft Visual Basic para aplicaciones ventana.

3. Hacer clic recuadro > Móduloy pegue el siguiente código en el Ventana de módulo.

Código VBA: enumere todos los nombres de archivo en carpetas y subcarpetas

Sub MainList()
'Updateby Extendoffice
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject As Object
Dim xFolder As Object
Dim xSubFolder As Object
Dim xFile As Object
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
For Each xFile In xFolder.Files
  Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
  rowIndex = rowIndex + 1
Next xFile
If xIsSubfolders Then
  For Each xSubFolder In xFolder.SubFolders
    ListFilesInFolder xSubFolder.Path, True
  Next xSubFolder
End If
Set xFile = Nothing
Set xFolder = Nothing
Set xFileSystemObject = Nothing
End Sub
Function GetFileOwner(ByVal xPath As String, ByVal xName As String)
Dim xFolder As Object
Dim xFolderItem As Object
Dim xShell As Object
xName = StrConv(xName, vbUnicode)
xPath = StrConv(xPath, vbUnicode)
Set xShell = CreateObject("Shell.Application")
Set xFolder = xShell.Namespace(StrConv(xPath, vbFromUnicode))
If Not xFolder Is Nothing Then
  Set xFolderItem = xFolder.ParseName(StrConv(xName, vbFromUnicode))
End If
If Not xFolderItem Is Nothing Then
  GetFileOwner = xFolder.GetDetailsOf(xFolderItem, 8)
Else
  GetFileOwner = ""
End If
Set xShell = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
End Function

4. Después de pegar el código en el módulo, presione F5 clave para ejecutar este código, y una Macros aparece el cuadro de diálogo, seleccione el Lista principal nombre de macro y luego haga clic en Ejecutar botón, ver captura de pantalla:

doc lista de archivos en la carpeta subcarpeta 1

5. Y en la Búsqueda de ventana, seleccione la carpeta en la que desea enumerar todos los nombres de archivo, incluidas las subcarpetas, vea la captura de pantalla:

doc lista de archivos en la carpeta subcarpeta 2

6. Después de especificar la carpeta, haga clic en OK , y todos los nombres de archivo en la carpeta y sus subcarpetas se han incluido en la hoja de trabajo actual de la celda A2, vea las capturas de pantalla:

doc lista de archivos en la carpeta subcarpeta 3
1
doc lista de archivos en la carpeta subcarpeta 4

Con el código anterior, puede simplemente enumerar los nombres de archivo, a veces, necesita enumerar otros atributos, como el tamaño del archivo, el tipo de archivo, la hora de creación, la carpeta que contiene, etc. Kutools for Excel contiene una función útil - Lista de nombre de archivo, con esta función, puede enumerar rápidamente todos o tipos específicos de nombres de archivo en una carpeta y sus subcarpetas.

Kutools for Excel : con más de 300 prácticos complementos de Excel, prueba gratuita y sin límite en 30 días.

Después de instalar Kutools for Excel, siga los siguientes pasos:

1. Hacer clic Empresa > Importación y exportación > Lista de nombre de archivo, ver captura de pantalla:

2. En la Lista de nombre de archivo cuadro de diálogo, realice las siguientes operaciones:

A: Haga clic doc lista de archivos en la carpeta subcarpeta 7botón para elegir la carpeta en la que desea enumerar los nombres de archivo;

B: Especifique el tipo de archivo que desea incluir en la lista Tipo de archivos sección;

C: Seleccione una unidad de tamaño de archivo que desee mostrar de la Unidad de tamaño de archivo .

Nota:: Para enumerar los nombres de archivo de la subcarpeta, marque Incluir archivos en subdirectorios, también puede consultar el Incluir archivos y carpetas ocultos como necesites. Si miras Crea hipervínculos opción, creará hipervínculos para cada nombre de archivo y carpeta.

¡Descarga y prueba gratis ahora!

3. Luego haga clic OK , todos los archivos contenidos en la carpeta seleccionada y sus subcarpetas se han mostrado con los siguientes atributos en una nueva hoja de trabajo. Ver captura de pantalla:

doc lista de archivos en la carpeta subcarpeta 8

Haga clic para conocer más detalles sobre esta utilidad Lista de nombres de archivo.

¡Descargue y pruebe Kutools para Excel ahora!


Kutools for Excel: con más de 300 prácticos complementos de Excel, prueba gratuita y sin límite en 30 días. ¡Descarga y prueba gratis ahora!

Las mejores herramientas de productividad de oficina

Kutools para Excel resuelve la mayoría de sus problemas y aumenta su productividad en un 80%

  • Reutilizar: Inserte rápidamente fórmulas complejas, gráficos y cualquier cosa que hayas usado antes; Cifrar celdas con contraseña; Crear lista de distribución y enviar correos electrónicos ...
  • Barra de súper fórmula (edite fácilmente varias líneas de texto y fórmulas); Diseño de lectura (leer y editar fácilmente un gran número de celdas); Pegar en rango filtrado...
  • Combinar celdas / filas / columnas sin perder datos; Contenido de celdas divididas; Combinar filas / columnas duplicadas... Prevenir celdas duplicadas; Comparar rangos...
  • Seleccione Duplicado o Único Filas; Seleccionar filas en blanco (todas las celdas están vacías); Super Find y Fuzzy Find en muchos libros de trabajo; Selección aleatoria ...
  • Copia exacta Varias celdas sin cambiar la referencia de la fórmula; Crear referencias automáticamente a varias hojas; Insertar viñetas, Casillas de verificación y más ...
  • Extraer texto, Agregar texto, Eliminar por posición, Quitar espacio; Crear e imprimir subtotales de paginación; Convertir entre contenido de celdas y comentarios...
  • Súper filtro (guardar y aplicar esquemas de filtros a otras hojas); Orden avanzado por mes / semana / día, frecuencia y más; Filtro especial en negrita, cursiva ...
  • Combinar libros y hojas de trabajo; Combinar tablas basadas en columnas clave; Dividir datos en varias hojas; Conversión por lotes de xls, xlsx y PDF...
  • Más de 300 potentes funciones. Compatible con Office/Excel 2007-2021 y 365. Compatible con todos los idiomas. Fácil implementación en su empresa u organización. Funciones completas Prueba gratuita de 30 días. Garantía de devolución de dinero de 60 días.
pestaña kte 201905

Office Tab lleva la interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil

  • Habilite la edición y lectura con pestañas en Word, Excel, PowerPoint, Publisher, Access, Visio y Project.
  • Abra y cree varios documentos en nuevas pestañas de la misma ventana, en lugar de en nuevas ventanas.
  • ¡Aumenta su productividad en un 50% y reduce cientos de clics del mouse todos los días!
officetab parte inferior
Comentarios (20)
Aún no hay calificaciones. ¡Sé el primero en calificar!
Este comentario fue minimizado por el moderador en el sitio
Buen articulo gracias :D
Este comentario fue minimizado por el moderador en el sitio
querido, Gracias por esta maravillosa utilidad .....!!! Anil Kumar
Este comentario fue minimizado por el moderador en el sitio
¿CÓMO HACER QUE ESTA CONSULTA FUNCIONE PARA OBTENER LOS NOMBRES DE ARCHIVO DE LA Célula B2 en lugar de A2?
Este comentario fue minimizado por el moderador en el sitio
Hola Satish,
El siguiente código puede ayudarlo a poner los nombres de archivo en cualquier celda que haya seleccionado, inténtelo:

Sub lista principal ()
On Error Resume Next
Establezca xRg = Application.InputBox ("Seleccione una celda para poner los nombres de archivo:", "KuTools para Excel", Selection.Address, , , , , 8)
Si xRg no es nada, salga de Sub
Establecer xRg = xRg(1)
Establecer carpeta = Application.FileDialog(msoFileDialogFolderPicker)
Si Carpeta.Mostrar <> -1 Entonces Salir Sub
xDir = Carpeta.ElementosSeleccionados(1)
Llamar a ListFilesInFolder (xRg, xDir, True)
End Sub
Sub ListFilesInFolder (ByVal xRg como rango, ByVal xFolderName como cadena, ByVal xIsSubfolders como booleano)
Dim xFileSystemObject como objeto
Dim xFolder como objeto
Dim xSubFolder como objeto
Dim xFile como objeto
Dim rowIndex As Long
Establecer xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Establecer xFolder = xFileSystemObject.GetFolder(xFolderName)
índice de fila = 1
Para cada xFile en xFolder.Files
xRg.Fórmula = xArchivo.Nombre
Establecer xRg = xRg.Offset(rowIndex)
índice de fila = 1
Siguiente archivo x
Si xEsSubcarpetas Entonces
Para cada xSubFolder en xFolder.SubFolders
ListFilesInFolder xRg, xSubFolder.Path, True
Siguiente xSubcarpeta
Si terminar
Establecer xFile = Nada
Establecer xFolder = Nada
Establecer xFileSystemObject = Nada
End Sub
Este comentario fue minimizado por el moderador en el sitio
¡¡¡estupendo!!! me encanta, gracias
Este comentario fue minimizado por el moderador en el sitio
No estoy seguro... pero ¿considera carpetas largas? Escribí un código similar y falla cuando la ruta de la carpeta/archivo supera los 256 caracteres. ¿Pensamientos por favor?
Este comentario fue minimizado por el moderador en el sitio
¡Muchas gracias por el útil artículo!
¿Cómo puedo actualizar automáticamente la lista y detectar los cambios?
Este comentario fue minimizado por el moderador en el sitio
Esto me ayudó a convertir mi código para obtener la llamada recursiva, pero me pregunto cómo usas los objetos. Prefiero definir mis objetos como lo que son, ya sean libros de trabajo, hojas de trabajo u objetos del sistema de archivos. (dim wbDest como excel.workbook, dim wsDest como excel.worksheet por ejemplo. De esta manera, nunca tendré que preocuparme por cuál es la hoja activa.

También me preguntaba sobre el uso de .show - if.show <>-1, y no puedo evitar sentir que sería más fácil de entender para las personas si en su lugar usaras if.show = false.

Y en términos de escribir en el destino, sentí que usar celdas y fórmulas parecía ser un largo camino.

Así que en mi código tengo, por ejemplo,
wsDest.Range("B" & CurRow) = fil.name
(CurRow = Fila actual)

No estoy criticando, solo me pregunto si lo haces así por alguna razón que no sea preferencia personal. - Siempre dispuesto a aprender.


Pero aparte de eso gracias por la ayuda
Este comentario fue minimizado por el moderador en el sitio
Gracias por este código, me ha ayudado con una solicitud de trabajo, ahora puedo importar estos resultados a Access para una mayor transformación. Lo agradezco.
Este comentario fue minimizado por el moderador en el sitio
Sub "GetFileOwner()" en el código anterior no se usa.
Este comentario fue minimizado por el moderador en el sitio
Hola jumpjack,
El código anterior funciona bien en mi Excel, ¿qué versión de Excel usas?
Este comentario fue minimizado por el moderador en el sitio
¡Extremadamente elegante este código!
Este comentario fue minimizado por el moderador en el sitio
¿Cuál era el propósito del parámetro ByVal xIsSubfolders As Boolean?
Este comentario fue minimizado por el moderador en el sitio
Mi VBA dice que la carpeta de variables no está definida. ¿Alguien sabe por qué es esto?
Este comentario fue minimizado por el moderador en el sitio
Realmente nuevo en VBA. ¿Cómo uso el código anterior pero tengo la ruta del archivo incorporada para no tener que buscarlo cada vez?
Este comentario fue minimizado por el moderador en el sitio
Oye, si solo tengo que extraer una extensión de la lista completa, ¿dónde debo hacer cambios?
Este comentario fue minimizado por el moderador en el sitio
¿Funciona en MAC también?
Este comentario fue minimizado por el moderador en el sitio
Modifiqué su código para que se recicle y vuelva a ejecutar el cuadro de diálogo de la carpeta continuamente hasta que presione Cancelar. Desafortunadamente, genera algunos errores.1. Si las subcarpetas se involucran en una carpeta seleccionada, la siguiente carpeta seleccionada queda fuera del orden numérico.2. Si las subcarpetas se involucran en una carpeta seleccionada, el botón Cancelar debe repetirse y repetirse dependiendo de cuántas carpetas haya agregado.
Código:
Sub lista principal ()
'Actualizar por Extendoffice
Establecer carpeta = Application.FileDialog(msoFileDialogFolderPicker)
Si carpeta.Mostrar <> -1 Luego Salir de Sub
xDir = carpeta.Elementos seleccionados(1)
Llamar a ListFilesInFolder(xDir, True)
End SubSub ListFilesInFolder(ByVal xFolderName como cadena, ByVal xIsSubfolders como booleano)
Dim xFileSystemObject como objeto
Dim xFolder como objeto
Dim xSubFolder como objeto
Dim xFile como objeto
Dim rowIndex As Long
Establecer xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Establecer xFolder = xFileSystemObject.GetFolder(xFolderName)
índicefila = Aplicación.HojaActiva.Rango("A65536").End(xlUp).Row + 1
Para cada xFile en xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
índice_fila = índice_fila + 1
Siguiente archivo x
Si xEsSubcarpetas Entonces
Para cada xSubFolder en xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, Verdadero
Siguiente xSubcarpeta
Si terminar
Establecer xFile = Nada
Establecer xFolder = Nada
Establecer xFileSystemObject = Nada
End Sub

alguna idea?
Este comentario fue minimizado por el moderador en el sitio
Lo siento... te di el código incorrecto (abajo), aquí está el código que modifiqué...
Código:
Sub lista principal ()
On Error Resume Next
Dim xFileSystemObject como objeto
Dim xFolder como objeto
Dim xSubFolder como objeto
Dim xFile como objeto
Dim rowIndex As Long
Dim respuesta como variante
respuesta = falso
Con Application.FileDialog (msoFileDialogFolderPicker)
.Title = "Seleccionar una carpeta"
.AllowMultiSelect = False
Establecer carpeta = Application.FileDialog(msoFileDialogFolderPicker)
Si carpeta.Mostrar = -1 Entonces
xDir = carpeta.Elementos seleccionados(1)
otro
Exit Sub
Si terminar
End With

Llamar a ListFilesInFolder(xDir, True)
End Sub

Sub ListFilesInFolder (ByVal xFolderName como cadena, ByVal xIsSubfolders como booleano)
Establecer xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Establecer xFolder = xFileSystemObject.GetFolder(xFolderName)
índicefila = Aplicación.HojaActiva.Rango("A65536").End(xlUp).Row + 1

' Agregue un espacio y luego el nombre de la carpeta a la hoja de trabajo
índice_fila = índice_fila + 1
Con Application.ActiveSheet.Cells(rowIndex, 1)
.Valor = xCarpeta.Nombre
.Fuente.Tamaño = 12
.Font.FontStyle = "Negrita cursiva"
End With
índice_fila = índice_fila + 1

Para cada xFile en xFolder.Files
Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
índice_fila = índice_fila + 1
Siguiente archivo x
Si xEsSubcarpetas Entonces
Para cada xSubFolder en xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, Verdadero
Siguiente xSubcarpeta
índice_fila = índice_fila + 1
Si terminar

Establecer xFile = Nada
Establecer xFolder = Nada
Establecer xFileSystemObject = Nada

Lista principal de llamadas
End Sub


Este comentario fue minimizado por el moderador en el sitio
Buen trabajo, exactamente lo que estaba tratando de crear. Pero esto es 1000% mejor.
No hay comentarios publicados aquí todavía
Deje sus comentarios
Publicar como invitado
×
Califica esta publicación:
0   Personajes
Ubicaciones sugeridas

Seguinos

Copyright © 2009 - www.extendoffice.com. | Reservados todos los derechos. Energizado por ExtendOffice, | Mapa del Sitio
Microsoft y el logotipo de Office son marcas comerciales o marcas comerciales registradas de Microsoft Corporation en los Estados Unidos y / o en otros países.
Protegido por Sectigo SSL