Λειτουργία VBA DIR - Μια εύκολη εξήγηση με παραδείγματα

Το VBA έχει μερικές χρήσιμες λειτουργίες που μπορούν να ανεβάσουν τον αυτοματισμό σας στο Excel στο επόμενο επίπεδο.

Μια τέτοια λειτουργία είναι η Λειτουργία VBA DIR.

Ενώ από μόνο του, μπορεί να φαίνεται σαν μια απλή λειτουργία που κάνει ένα συγκεκριμένο πράγμα.

Αλλά όταν το συνδυάζετε με κάποια άλλα χρήσιμα στοιχεία της γλώσσας κωδικοποίησης VBA, μπορείτε να δημιουργήσετε ισχυρά πράγματα (καλύπτονται στα παραδείγματα αργότερα σε αυτό το σεμινάριο).

Τι κάνει η λειτουργία VBA Dir;

Χρησιμοποιήστε τη λειτουργία VBA DIR όταν θέλετε να λάβετε το όνομα του αρχείου ή ενός φακέλου, χρησιμοποιώντας το όνομα της διαδρομής τους.

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

Τι γίνεται αν θέλω να λάβω τα ονόματα όλων των αρχείων Excel στο φάκελο (ή όλα τα αρχεία - είτε πρόκειται για αρχείο Excel είτε όχι);

Μπορείτε να το κάνετε και αυτό!

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

Διευθυντής επιστρέφει το πρώτο όνομα αρχείου που ταιριάζει με το όνομα διαδρομής. Για να λάβετε τυχόν πρόσθετα ονόματα αρχείων που ταιριάζουν με το όνομα διαδρομής, καλέστε Διευθυντής πάλι χωρίς επιχειρήματα. Όταν δεν ταιριάζουν άλλα ονόματα αρχείων, Διευθυντής επιστρέφει μια συμβολοσειρά μηδενικού μήκους (""). Καλύπτεται στο Παράδειγμα 3 και 4 αργότερα σε αυτό το σεμινάριο.

Σύνταξη της λειτουργίας VBA DIR

Dir [(όνομα διαδρομής [, χαρακτηριστικά]]]
  • όνομα διαδρομής: Αυτό είναι ένα προαιρετικό επιχείρημα. Αυτό μπορεί να είναι το όνομα του αρχείου, το όνομα του φακέλου ή το όνομα του καταλόγου. Εάν το όνομα διαδρομής δεν βρεθεί, η συνάρτηση VBA DIR επιστρέφει μια συμβολοσειρά μηδενικού μήκους ("")
  • γνωρίσματα: Αυτό είναι ένα προαιρετικό επιχείρημα. Μπορείτε να χρησιμοποιήσετε αυτό το όρισμα για να καθορίσετε ορισμένα χαρακτηριστικά και η συνάρτηση DIR θα επιστρέψει τα ονόματα αρχείων με βάση αυτά τα χαρακτηριστικά. Για παράδειγμα, εάν θέλετε μια λίστα με όλα τα κρυφά αρχεία ή αρχεία μόνο για ανάγνωση (μαζί με αρχεία χωρίς χαρακτηριστικά), πρέπει να το καθορίσετε σε αυτό το όρισμα.

Χαρακτηριστικά διαθέσιμα για χρήση στη λειτουργία VBA DIR (μπορείτε να χρησιμοποιήσετε ένα ή περισσότερα από αυτά):

Συνεχής αξία Περιγραφή
vbΚανονικό 0 (Προεπιλογή) Καθορίζει αρχεία χωρίς χαρακτηριστικά.
vbReadOnly 1 Καθορίζει αρχεία μόνο για ανάγνωση εκτός από αρχεία χωρίς χαρακτηριστικά.
vbΚρυμμένο 2 Προσδιορίζει κρυφά αρχεία εκτός από αρχεία χωρίς χαρακτηριστικά.
VbSystem 4 Καθορίζει αρχεία συστήματος εκτός από αρχεία χωρίς χαρακτηριστικά. Δεν διατίθεται στο Macintosh.
vbΤόμος 8 Καθορίζει την ετικέτα έντασης. εάν καθοριστεί οποιοδήποτε άλλο χαρακτηριστικό, το vbVolume αγνοείται. Δεν διατίθεται στο Macintosh.
vbDirectory 16 Καθορίζει καταλόγους ή φακέλους εκτός από αρχεία χωρίς χαρακτηριστικά.
vbAlias 64 Το καθορισμένο όνομα αρχείου είναι ψευδώνυμο. Διατίθεται μόνο στο Macintosh.

Χρήση χαρακτήρων μπαλαντέρ με λειτουργία DIR

Εάν εργάζεστε με Windows, μπορείτε επίσης να χρησιμοποιήσετε τους χαρακτήρες μπαλαντέρ στη λειτουργία DIR.

Σημειώστε ότι δεν μπορείτε να τα χρησιμοποιήσετε όταν εργάζεστε με VBA στο Macintosh.

Η χρήση μπαλαντέρ μπορεί να είναι χρήσιμη όταν:

  • Θέλετε να λάβετε τα ονόματα αρχείων ενός συγκεκριμένου τύπου αρχείου (όπως .XLSX ή .PPTX)
  • Όταν έχετε ένα συγκεκριμένο επίθημα/πρόθεμα στα ονόματα αρχείων και θέλετε να λάβετε τα ονόματα αυτών των αρχείων/φακέλων/καταλόγων. Για παράδειγμα, εάν θέλετε τα ονόματα όλων των αρχείων με το πρόθεμα 2021-2022, μπορείτε να το κάνετε χρησιμοποιώντας χαρακτήρες μπαλαντέρ.

Υπάρχουν τρεις χαρακτήρες μπαλαντέρ στο Excel:

  1. * (αστερίσκος) - Αντιπροσωπεύει οποιονδήποτε αριθμό χαρακτήρων. Για παράδειγμα, 2019* θα σας έδινε τα ονόματα όλων των αρχείων με το πρόθεμα 2021-2022.
  2. ; (ερωτηματικό) - Αντιπροσωπεύει έναν μόνο χαρακτήρα. Για παράδειγμα, 2021-2022; θα σας έδινε τα ονόματα όλων των αρχείων που ξεκινούν με 2021-2022 και έχουν έναν ακόμη χαρακτήρα στο όνομα (όπως 2021-2022A, 2021-2022B, 2021-2022C και ούτω καθεξής)

Σημείωση: Υπάρχει ένας ακόμη χαρακτήρας μπαλαντέρ - tilde (). Δεδομένου ότι δεν χρησιμοποιείται πολύ, έχω παραλείψει την εξήγησή του. Μπορείτε να διαβάσετε περισσότερα σχετικά εάν ενδιαφέρεστε.

Λειτουργία VBA DIR - Παραδείγματα

Τώρα ας βουτήξουμε και θα δούμε μερικά παραδείγματα χρήσης της λειτουργίας VBA DIR.

Παράδειγμα 1 - Λήψη του ονόματος αρχείου από τη διαδρομή του

Όταν έχετε τη διαδρομή ενός αρχείου, μπορείτε να χρησιμοποιήσετε τη συνάρτηση DIR για να λάβετε το όνομα του αρχείου από αυτό.

Για παράδειγμα, ο παρακάτω κώδικας επιστρέφει το όνομα του αρχείου και το εμφανίζει σε ένα πλαίσιο μηνυμάτων.

Sub GetFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End End

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

Και τι συμβαίνει όταν το αρχείο δεν υπάρχει;

Σε αυτή την περίπτωση, η συνάρτηση DIR θα επιστρέψει μια κενή συμβολοσειρά.

Ο παρακάτω κώδικας χρησιμοποιεί μια δήλωση If then Else για να ελέγξει εάν το αρχείο υπάρχει ή όχι. Εάν το αρχείο δεν υπάρχει, εμφανίζει ένα πλαίσιο μηνυμάτων με κείμενο "Το αρχείο δεν υπάρχει", αλλιώς εμφανίζει το όνομα του αρχείου.

Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") If FileName "" then MsgBox FileName Else MsgBox "File Don't Exist" End If End Υπο

Παράδειγμα 2 - Ελέγξτε εάν ένας κατάλογος υπάρχει ή όχι (και δημιουργήστε εάν δεν υπάρχει)

Ο παρακάτω κώδικας ελέγχει εάν ο φάκελος "Test" υπάρχει ή όχι.

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

Sub CheckDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & "exist" Else MsgBox "The directory δεν υπάρχει "End If End Sub

Μπορείτε να βελτιώσετε περαιτέρω αυτόν τον κώδικα για να ελέγξετε εάν ο φάκελος υπάρχει ή όχι, και εάν δεν υπάρχει, τότε μπορείτε να χρησιμοποιήσετε το VBA για να δημιουργήσετε αυτόν τον φάκελο.

Παρακάτω είναι ο κώδικας που χρησιμοποιεί το Λειτουργία MkDir για να δημιουργήσετε έναν φάκελο σε περίπτωση που δεν υπάρχει.

Sub CreateDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) If CheckDir "" then MsgBox CheckDir & "folder υπάρχει" Else MkDir PathName MsgBox "Δημιουργήθηκε ένας φάκελος με το όνομα" & CheckDir End If End Sub

Παράδειγμα 3 - Λάβετε τα ονόματα όλων των αρχείων και φακέλων σε έναν κατάλογο

Εάν θέλετε να λάβετε μια λίστα με όλα τα ονόματα αρχείων και φακέλων σε έναν κατάλογο, μπορείτε να χρησιμοποιήσετε τη λειτουργία DIR.

Ο παρακάτω κώδικας παραθέτει όλα τα αρχεία και τα ονόματα φακέλων στο φάκελο Δοκιμή (ο οποίος βρίσκεται στην ακόλουθη διαδρομή - C: \ Users \ sumit \ Desktop \ Test \).

Χρησιμοποιώ το Debug.Print για να εμφανίσω τα ονόματα στο άμεσο παράθυρο. Μπορείτε επίσης να το χρησιμοποιήσετε για να παραθέσετε τα ονόματα σε ένα πλαίσιο μηνυμάτων ή σε μια στήλη στο Excel.

Sub GetAllFile & FolderNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \", vbDirectory) Do while FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

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

Παράδειγμα 4 - Λάβετε τα ονόματα όλων των αρχείων σε ένα φάκελο

Μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα για να λάβετε τα ονόματα όλων των αρχείων σε ένα φάκελο/κατάλογο (και όχι τα ονόματα των υποφακέλων).

Sub GetAllFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \") Do while FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

Αυτός ο κωδικός είναι ακριβώς όπως ο κώδικας που χρησιμοποιείται στο Παράδειγμα 3, με μια μικρή διαφορά.

Σε αυτόν τον κωδικό, δεν έχω καθορίσει vbDirectory στη λειτουργία DIR. Όταν καθορίσετε το vbDirectory, θα σας δώσει τα ονόματα όλων των αρχείων καθώς και φακέλους.

Όταν δεν καθορίζετε το vbDirectory, η λειτουργία DIR θα σας δώσει μόνο τα ονόματα των αρχείων.

Σημείωση: Εάν θέλετε να λάβετε τα ονόματα όλων των αρχείων στον κύριο φάκελο και τους υποφακέλους, δεν μπορείτε να χρησιμοποιήσετε τη λειτουργία DIR (καθώς δεν είναι αναδρομική). Για να το κάνετε αυτό, μπορείτε είτε να χρησιμοποιήσετε το Power Query (δεν απαιτείται κωδικοποίηση) είτε να χρησιμοποιήσετε το αντικείμενο συστήματος αρχείων σε VBA (με επαναφορά).

Παράδειγμα 5 - Λάβετε τα ονόματα όλων των υποφακέλων εντός ενός φακέλου

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

Χρησιμοποιεί το Λειτουργία GetAtr στο VBA, το οποίο μας επιτρέπει να ελέγξουμε αν το όνομα που επιστρέφεται από τη συνάρτηση DIR είναι το όνομα ενός αρχείου ή ενός φακέλου/καταλόγου.

Sub GetSubFolderNames () Dim FileName As String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Do while FileName "If GetAttr (PathName & FileName) = vbDirectory Στη συνέχεια Debug.Print NameName File End If FileName = Dir () Loop End Sub

Και πάλι, χρησιμοποιώ το Debug.Print για να λάβω τα ονόματα στο άμεσο παράθυρο. Μπορείτε να τα λάβετε σε ένα πλαίσιο μηνυμάτων ή στο Excel (τροποποιώντας ανάλογα τον κώδικα).

Παράδειγμα 6 - Λήψη του πρώτου αρχείου Excel από έναν φάκελο

Με τη λειτουργία DIR, μπορείτε να καθορίσετε την επέκταση αρχείου ή οποιοδήποτε επίθημα/πρόθεμα που θέλετε στο όνομα αρχείου που επιστρέφεται.

Ο παρακάτω κώδικας εμφανίζει το όνομα του πρώτου αρχείου Excel στο φάκελο Δοκιμή.

Sub GetFirstExcelFileName () Dim FileName As String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName & "*.xls*") MsgBox FileName End End

Σημειώστε ότι έχω χρησιμοποιήσει * .xls * (αστερίσκο και στις δύο πλευρές). Αυτό θα διασφαλίσει ότι έχουν ελεγχθεί όλες οι εκδόσεις των αρχείων Excel (.xls, xlsx, .xlsm, .xlsb).

Παράδειγμα 7 - Λάβετε ονόματα όλων των αρχείων Excel σε ένα φάκελο

Χρησιμοποιήστε τον παρακάτω κώδικα για να λάβετε τα ονόματα όλων των αρχείων Excel στο φάκελο Δοκιμή.

Sub GetAllFileNames () Dim FolderName As String Dim File Name As String FolderName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (FolderName & "*.xls*") Do while FileName "" Debug.Print NameName FileName = Dir () Loop End Sub

Ενώ η συνάρτηση DIR επιστρέφει το όνομα μόνο του πρώτου αρχείου Excel, αφού το καλούμε ξανά στον βρόχο, περνάει από όλα τα αρχεία και μας δίνει τα ονόματα όλων των αρχείων Excel.

Ελπίζω να βρήκατε χρήσιμο αυτό το σεμινάριο και τα παραδείγματα.

Πείτε μου τις σκέψεις σας στην ενότητα σχολίων.

wave wave wave wave wave