Consejo: Otros idiomas son traducidos por Google. Puedes visitar el English versión de este enlace.
Iniciar sesión
x
or
x
x
Suscríbete
x

or

¿Cómo hacer una lista de todos los archivos en la carpeta y subcarpetas en una hoja de trabajo?

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

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

Enumere todos los nombres de archivo en la carpeta y subcarpeta de forma rápida y sencilla con Kutools for Excel


Enumere todos los archivos de una carpeta, incluidas las subcarpetas, en una hoja de trabajo:

Kutools for Excel's Lista de nombre de archivo función, puede enumerar rápidamente todos los nombres de archivo de una carpeta, incluidas las subcarpetas, en una nueva hoja de trabajo. ¡Haz clic para descargar y probar gratis Kutools for Excel ahora!

doc list files en la subcarpeta de carpeta 9

Kutools for Excel: con más de 200 útiles complementos de Excel, de prueba sin límite en días 60. Descargar y prueba gratis ahora!



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

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

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

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

Código VBA: enumere todos los nombres de archivo en la carpeta y subcarpeta

Sub MainList()
'Updateby20150706
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 cuadro de diálogo emergente, seleccione MainList nombre de macro, y luego haga clic corrida botón, ver captura de pantalla:

doc list files en la subcarpeta de carpeta 1

5. Y en la Buscar ventana, seleccione la carpeta en la que desea enumerar todos los nombres de archivo, incluidas las subcarpetas, ver captura de pantalla:

doc list files en la subcarpeta de carpeta 2

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

doc list files en la subcarpeta de carpeta 3
 1
doc list files en la subcarpeta de carpeta 4

Con el código anterior, puede simplemente enumerar los nombres de los archivos; a veces, debe enumerar otros atributos, como el tamaño del archivo, el tipo de archivo, la hora creada, la carpeta que contiene y demás. Kutools for Excel contiene una función útil - Lista de nombre de archivoCon 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 útiles complementos de Excel, de prueba sin límite en días 60.

Después de instalar Kutools for ExcelPor favor, haz los siguientes pasos:

1. Hacer clic Empresa > Import / Export > Lista de nombre de archivo, mira la captura de pantalla:

doc list files en la subcarpeta de carpeta 5 5

doc list files en la subcarpeta de carpeta 6 6

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

A: Haga clic doc list files en la subcarpeta de carpeta 7para elegir la carpeta en la que desea listar los nombres de archivo;

B: Especifique el tipo de archivo que desea enumerar del Tipo de archivos sección;

C: Seleccione una unidad de tamaño de archivo que desee visualizar desde Unidad de tamaño de archivo .

Nota: Para enumerar los nombres de archivo de la subcarpeta, compruebe Incluir archivos en subdirectorios, si revisas Crear hipervínculos opción, creará hipervínculos para cada nombre de archivo y carpeta.

Descargar y prueba gratis ahora!

3. Luego haga clic OK botón, 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 list files en la subcarpeta de carpeta 8

Haga clic para obtener más información sobre esta utilidad de Lista de nombres de archivo.

Descargue y pruebe de forma gratuita Kutools for Excel Now!


Kutools for Excel: con más de 200 útiles complementos de Excel, de prueba sin límite en días 60. Descargar y prueba gratis ahora!


  • Super Formula Bar (edite fácilmente varias líneas de texto y fórmula); Diseño de lectura (lee y edita fácilmente un gran número de celdas); Pegar en rango filtrado...
  • Combinar celdas / filas / columnas y mantener datos; Contenido de celdas divididas; Combinar filas duplicadas y suma / promedio... Prevenir células 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 Celdas múltiples sin cambiar la referencia de fórmula; Crear referencias automáticamente a múltiples hojas; Insertar viñetas, Casillas de verificación y más ...
  • Fórmulas favoritas e insertadas rápidamente, Gamas, cuadros y cuadros; Cifrar celdas con contraseña Crear una lista de correo y enviar correos electrónicos ...
  • Extracto del texto, Agregar texto, Eliminar por posición, Eliminar espacio; Crear e imprimir subtotales de paginación; Convertir entre contenido de celdas y comentarios...
  • Súper filtro (guardar y aplicar esquemas de filtro a otras hojas); Clasificación avanzada por mes / semana / día, frecuencia y más; Filtro especial por negrita, cursiva ...
  • Combinar libros de trabajo y hojas de trabajo; Combinar tablas basadas en columnas clave; Dividir datos en varias hojas; Conversión por lotes xls, xlsx y PDF...
  • Funciona con Office 2007-2019 y 365, y es compatible con todos los idiomas. Es fácil de implementar en su empresa. Funciones completas de prueba gratuita de 60-day.
pestaña kte 201905
  • Habilitar la edición y lectura con pestañas en Word, Excel, PowerPoint, Editor, Acceso, Visio y Proyecto.
  • Abra y cree varios documentos en nuevas pestañas de la misma ventana, en lugar de en nuevas ventanas.
  • ¡Aumenta tu productividad en un 50% y reduce cientos de clics del mouse por ti todos los días!
fondo officetab
Say something here...
symbols left.
You are guest ( Sign Up? )
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    JDay · 1 months ago
    Really new to VBA. how do i use the above code but have the file path built into it so i don't have to search for it every time?
  • To post as a guest, your comment is unpublished.
    James · 5 months ago
    My VBA is saying that the variable folder is not defined. Anyone know why this is?
  • To post as a guest, your comment is unpublished.
    Chris K · 10 months ago
    What was the purpose of the parameter ByVal xIsSubfolders As Boolean?
  • To post as a guest, your comment is unpublished.
    Leandro Barbosa · 10 months ago
    Extremamente elegante este código!
  • To post as a guest, your comment is unpublished.
    jumpjack · 1 years ago
    Sub "GetFileOwner()" in code above is not used.
    • To post as a guest, your comment is unpublished.
      skyyang · 1 years ago
      Hello, jumpjack,
      The above code works well in my Excel, which Excel version do you use?
  • To post as a guest, your comment is unpublished.
    Brett · 1 years ago
    Thankyou for this code it has helped me with a request a work, I am now able to import these results into Access for further transformation.Appreciate it.
  • To post as a guest, your comment is unpublished.
    David · 1 years ago
    This helped me to convert my code to get the recursive call, but I wonder about the way you use objects. I prefer to define my objects as what they are, be they workbooks, worksheets or file system objects. (dim wbDest as excel.workbook, dim wsDest as excel.worksheet for example. This way I never have to worry about what the active sheet is.

    I also wondered about the use of .show - if.show <>-1, and can't help feeling that it would be easier for people to understand if instead you used if.show = false.

    And in terms of writing to the destination, I felt that using cells and formula seemed to be a long way round

    So in my code I have, for example,
    wsDest.Range("B" & CurRow) = fil.name
    (CurRow = Current Row)

    I'm not criticising, just wondering if you do it like this for any reason other than personal preference. - Always willing to learn


    But apart from that thanks for the help
  • To post as a guest, your comment is unpublished.
    Ana · 1 years ago
    Thank you so much for the useful article!
    How can I automatically update the list and spot the changes?
  • To post as a guest, your comment is unpublished.
    Ankit · 1 years ago
    Not sure.. but does it consider long folders. i wrote a similar code and it fails where the folder/file path exceeds 256 characters ? Thoughts please ?
  • To post as a guest, your comment is unpublished.
    Nir · 1 years ago
    great!!! love it, thanks
  • To post as a guest, your comment is unpublished.
    SATISH · 1 years ago
    HOWTO MAKE THIS QUERY WORK TO GET THE FILENAMES LISTED FROM B2 cell instead of A2 ?
    • To post as a guest, your comment is unpublished.
      skyyang · 1 years ago
      Hi, Satish,
      The following code can help you to put the filenames to any cell you selected, please try it:

      Sub MainList()
      On Error Resume Next
      Set xRg = Application.InputBox("Please select a cell to put the filenames:", "KuTools For Excel", Selection.Address, , , , , 8)
      If xRg Is Nothing Then Exit Sub
      Set xRg = xRg(1)
      Set Folder = Application.FileDialog(msoFileDialogFolderPicker)
      If Folder.Show <> -1 Then Exit Sub
      xDir = Folder.SelectedItems(1)
      Call ListFilesInFolder(xRg, xDir, True)
      End Sub
      Sub ListFilesInFolder(ByVal xRg As Range, 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 = 1
      For Each xFile In xFolder.Files
      xRg.Formula = xFile.Name
      Set xRg = xRg.Offset(rowIndex)
      rowIndex = 1
      Next xFile
      If xIsSubfolders Then
      For Each xSubFolder In xFolder.SubFolders
      ListFilesInFolder xRg, xSubFolder.Path, True
      Next xSubFolder
      End If
      Set xFile = Nothing
      Set xFolder = Nothing
      Set xFileSystemObject = Nothing
      End Sub
  • To post as a guest, your comment is unpublished.
    Anilkumar · 2 years ago
    dear,

    Thanks for this wonderful utility.....!!!


    anilkumar
  • To post as a guest, your comment is unpublished.
    Adrian Badea · 2 years ago
    Good article

    Thanks :D