Λίστα αρχείων και φακέλων αναδρομικά με Excel VBA


Δημοσιεύτηκε:

Ενημερώθηκε:


Άρθρα › Λίστα αρχείων και φακέλων αναδρομικά με Excel VBA

Κατάσταση το 2026 και ασφαλής χρήση

Συμπέρασμα: Επισκεφτείτε επαναλαμβανόμενα κάθε φάκελο, εκπέμψτε τα αρχεία που χρειάζεστε και επαναφέρετε κάθε θυγατρικό φάκελο στην ίδια διαδικασία. Προσθέστε ρητό χειρισμό σφαλμάτων και μια πολιτική για διασταυρώσεις, συμβολικούς συνδέσμους, κρυφούς φακέλους και διαδρομές με απαγόρευση πρόσβασης.

Τι θα μάθετε

  • Πώς το FileSystemObject εκθέτει φακέλους, υποφακέλους, αρχεία, ονόματα και διαδρομές.
  • Πώς η αναδρομή δημιουργεί ένα πλήρες δέντρο και γιατί τα βαθιά ή κυκλικά δέντρα χρειάζονται διασφαλίσεις.
  • Πώς να γράψετε αποτελέσματα σε ένα φύλλο εργασίας χωρίς αργές λειτουργίες κελιού προς κελί σε μεγάλη κλίμακα.

Σε ποιους απευθύνεται: Οι χρήστες του Excel που καταγράφουν ένα ελεγχόμενο δέντρο καταλόγου των Windows.

Ισχύει το 2026: Το δείγμα αντικατοπτρίζει την αρχική τοπική δοκιμή του συγγραφέα. Επικυρώστε τα δικαιώματα και τη συμπεριφορά σύνδεσης σε ένα αντίγραφο της δομής του καταλόγου σας και εξετάστε το PowerShell ή ένα αποκλειστικό εργαλείο αποθέματος για πολύ μεγάλα δέντρα ή δέντρα ευαίσθητα στην ασφάλεια.

Σημείωση ασφαλείας: Οι εντολές και τα παραδείγματα ρυθμίσεων του αρχικού άρθρου δεν έχουν εκτελεστεί ξανά σε σύγχρονο περιβάλλον παραγωγής. Πριν από την εφαρμογή, ελέγξτε τις υποστηριζόμενες εκδόσεις, δημιουργήστε αντίγραφα ασφαλείας και προετοιμάστε σχέδιο επαναφοράς σε ξεχωριστό περιβάλλον δοκιμών.

Επίσημες πηγές

Επισκόπηση

Στη συνέχεια περιγράφεται πώς να λάβω μια λίστα αρχείων και μια λίστα φακέλων, συμπεριλαμβανομένων των υποφακέλων, χρησιμοποιώντας VBA (μακροεντολή του Excel). Το άρθρο απευθύνεται σε άτομα που θέλουν να προγραμματίσουν τις ακόλουθες εργασίες

  • Θέλω να λάβω μια λίστα όλων των αρχείων ή φακέλων κάτω από ένα φάκελο με τις πλήρεις διαδρομές τους.
  • Θέλετε να εκτελέσετε επεξεργασία σε βρόχο για αρχεία ή φακέλους κάτω από ένα φάκελο.

Περιεχόμενα

  1. Μέθοδος προγραμματισμού
  2. Κωδικός Περιγραφή.
  3. Σύνοψη

1. Μέθοδος προγραμματισμού

Παραδείγματα αναφοράς του προγραμματισμού παρατίθενται παρακάτω.

Καθώς δημιουργείται στη Function, θα ήθελα να την αντιγράψω ως έχει και οι κλήσεις μεθόδων να γίνονται από την 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

Για να το χρησιμοποιήσετε, δώστε τα ακόλουθα ως ορίσματα.

  • filePath···κατάλογο. Παράδειγμα).C:\Users\user\Desktop\test
  • kind···Περάστε true, false. Εάν είναι True, επιστρέφει μια λίστα αρχείων. Εάν είναι false, επιστρέφει μια λίστα φακέλων.
  • list···Η συλλογή χρησιμοποιείται για την αποθήκευση των αποτελεσμάτων. Ένα παράδειγμα εφαρμογής δίνεται παρακάτω.

Ένα παράδειγμα υλοποίησης μιας πραγματικής κλήσης συνάρτησης παρουσιάζεται παρακάτω.

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

Η κλήση του getFolderOrFile θα αποθηκεύσει μια λίστα αρχείων ή μια λίστα φακέλων στη λίστα. Το παράδειγμα υλοποίησης είναι False, οπότε η λίστα των φακέλων αποθηκεύεται.

Περιγράψτε τη διαδικασία που θέλετε να κάνετε στο τμήμα "TODO" της εντολής For. ITEM μπορεί να αντιμετωπιστεί ως μεταβλητή String.

Η πηγή αναφοράς είναι η διαδικασία ορισμού της αποκτηθείσας λίστας στο A1 στο Excel. (Η διαδικασία αντικαθιστά επανειλημμένα το ίδιο κελί).

2. Κωδικός Περιγραφή.

Εδώ τελειώνουν οι οδηγίες χρήσης του συστήματος και ακολουθεί η επεξήγηση του κώδικα.

Οι λεπτομέρειες φαίνονται στον κώδικα, αλλά το σημείο κλειδί είναι η περαιτέρω κλήση της μεθόδου getFolderOrFile στη μέθοδο getFolderOrFile.

Κατά τη διαδικασία αναζήτησης φακέλων, η διαδικασία επαναλαμβάνεται περαιτέρω με την κλήση της διαδικασίας αναζήτησης φακέλων, η οποία είναι ένας μηχανισμός αναζήτησης όλων των φακέλων.

Με την κλήση της δικής της μεθόδου, καλεί επανειλημμένα τη δική της μέθοδο όσο βρίσκεται ο φάκελος, αναζητώντας όλους τους φακέλους.

3. περίληψη

Εάν χρειάζεστε βοήθεια σχετικά με τον τρόπο λήψης μιας λίστας αρχείων και μιας λίστας φακέλων, συμπεριλαμβανομένων των υποφακέλων, χρησιμοποιώντας VBA (μακροεντολές του Excel), ανατρέξτε σε αυτήν την ενότητα.

Αυτά είναι τα βασικά βήματα και οι περιορισμοί που πρέπει να ληφθούν υπόψη.