Cómo obtener una lista de archivos, incluyendo subcarpetas, y una lista de carpetas utilizando VBA (macro de Excel).


Fecha de publicación:12 de julio de 2022.



INFOMARTION > Cómo obtener una lista de archivos, incluyendo subcarpetas, y una lista de carpetas utilizando VBA (macro de Excel).

Resumen.

Me gustaría describir cómo obtener una lista de archivos y una lista de carpetas, incluyendo subcarpetas, utilizando VBA (macro de Excel). El artículo está dirigido a personas que quieran programar las siguientes 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
  2. Descripción del código.
  3. resumen

1. Método de programación

A continuación se ofrecen ejemplos de referencia de programación.

Como está creado en Function, me gustaría que se copiara tal cual y que las llamadas a los métodos se hicieran desde 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.

Gracias por mirar hasta el final.