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


Ημερομηνία δημοσίευσης:12 Ιουλίου 2022.



INFOMARTION > Πώς να λάβετε μια λίστα αρχείων, συμπεριλαμβανομένων των υποφακέλων, και μια λίστα φακέλων χρησιμοποιώντας VBA (μακροεντολή Excel).

Επισκόπηση.

Θα ήθελα να περιγράψω πώς να λάβω μια λίστα αρχείων και μια λίστα φακέλων, συμπεριλαμβανομένων των υποφακέλων, χρησιμοποιώντας 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), ανατρέξτε σε αυτήν την ενότητα.

Σας ευχαριστούμε που παρακολουθήσατε μέχρι το τέλος.