Cum să obțineți o listă de fișiere, inclusiv subfoldere, și o listă de foldere utilizând VBA (macro Excel).


Data publicării:12 iulie 2022.



INFOMARTION > Cum să obțineți o listă de fișiere, inclusiv subfoldere, și o listă de foldere utilizând VBA (macro Excel).

Prezentare generală.

Aș dori să descriu cum să obțin o listă de fișiere și o listă de foldere, inclusiv subfoldere, utilizând VBA (macro Excel). Articolul este destinat persoanelor care doresc să programeze următoarele sarcini

  • Doresc să obțin o listă a tuturor fișierelor sau folderelor din cadrul unui dosar cu căile lor complete.
  • Doriți să efectuați procesarea într-o buclă pentru fișierele sau folderele din cadrul unui dosar.

Cuprins

  1. Metoda de programare
  2. Cod Descriere.
  3. rezumat

1. Metoda de programare

Exemple de programare de referință sunt prezentate mai jos.

Având în vedere că este creat în Function, aș dori să fie copiat așa cum este și apelurile de metode să fie făcute din 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

Pentru a o utiliza, treceți următoarele ca argumente.

  • filePath・・・director. Exemplu.)C:\Users\user\Desktop\test
  • kind・・・Treceți true, false. Dacă este adevărat, se returnează o listă de fișiere. Dacă este falsă, se returnează o listă de dosare.
  • list・・・Colecția este utilizată pentru a stoca rezultatele. Mai jos este prezentat un exemplu de implementare.

Mai jos este prezentat un exemplu de implementare a unui apel de funcție 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

Apelul getFolderOrFile va stoca o listă de fișiere sau o listă de dosare în listă. Exemplul de implementare este False, astfel încât lista de dosare este stocată.

Descrieți procesul pe care doriți să îl efectuați în secțiunea "TODO" din declarația For. ITEM poate fi tratată ca o variabilă de tip String.

Sursa de referință este procesul de setare a listei achiziționate la A1 în Excel. (Procesul suprascrie în mod repetat aceeași celulă.)

2. Cod Descriere.

Aici se încheie instrucțiunile de utilizare a sistemului, urmate de o explicație a codului.

Detaliile pot fi văzute în cod, dar punctul cheie este apelul ulterior la getFolderOrFile în metoda getFolderOrFile.

În procesul de căutare a dosarelor, procesul se repetă în continuare prin apelarea procesului de căutare a dosarelor, care este un mecanism de căutare a tuturor dosarelor.

Prin apelarea propriei metode, aceasta își apelează în mod repetat propria metodă atât timp cât dosarul este găsit, căutând toate dosarele.

3. rezumat

Dacă aveți nevoie de ajutor cu privire la modul de obținere a unei liste de fișiere și a unei liste de foldere, inclusiv subfoldere, utilizând VBA (macro-uri Excel), consultați această secțiune.

Vă mulțumim că ne-ați urmărit până la sfârșit.