Εάν η διαδικασία VBA πρέπει να ζητήσει από τον χρήστη ένα όνομα αρχείου, μπορείτε να χρησιμοποιήσετε τη συνάρτηση InputBox και να αφήσετε τον χρήστη του Excel να κάνει κάποια πληκτρολόγηση. Ωστόσο, ένα πλαίσιο εισαγωγής δεν είναι το καλύτερο εργαλείο για αυτήν τη δουλειά, επειδή οι περισσότεροι χρήστες δυσκολεύονται να θυμηθούν διαδρομές, ανάστροφες κάθετες, ονόματα αρχείων και επεκτάσεις αρχείων. Με άλλα λόγια, είναι πάρα πολύ εύκολο να μπερδευτείτε όταν πληκτρολογείτε ένα όνομα αρχείου.
Για καλύτερη λύση σε αυτό το πρόβλημα, χρησιμοποιήστε τη μέθοδο GetOpenFilename του αντικειμένου Εφαρμογή, η οποία διασφαλίζει ότι ο κώδικάς σας λαμβάνει ένα έγκυρο όνομα αρχείου, συμπεριλαμβανομένης της πλήρους διαδρομής του. Η μέθοδος GetOpenFilename εμφανίζει το γνωστό πλαίσιο διαλόγου Άνοιγμα (ένα νεκρό κουδούνισμα για το πλαίσιο διαλόγου Excel εμφανίζεται όταν επιλέγετε Αρχείο → Άνοιγμα → Αναζήτηση).
Η μέθοδος GetOpenFilename δεν ανοίγει πραγματικά το καθορισμένο αρχείο. Αυτή η μέθοδος απλώς επιστρέφει το όνομα αρχείου που έχει επιλέξει ο χρήστης ως συμβολοσειρά. Στη συνέχεια, μπορείτε να γράψετε κώδικα για να κάνετε ό,τι θέλετε με το όνομα του αρχείου.
Η σύνταξη για τη μέθοδο GetOpenFilename
Η επίσημη σύνταξη της μεθόδου GetOpenFilename είναι η εξής:
αντικείμενο.GetOpenFilename ([fileFilter], [filterIndex],
[τίτλος], [buttonText], [multiSelect])
Η μέθοδος GetOpenFilename λαμβάνει τα προαιρετικά ορίσματα παρακάτω.
Διαφωνία |
Τι κάνει |
FileFilter |
Καθορίζει τους τύπους αρχείων που εμφανίζονται στο παράθυρο διαλόγου
(για παράδειγμα, *.TXT). Μπορείτε να καθορίσετε πολλά φίλτρα για
να επιλέξει ο χρήστης . |
FilterIndex |
Καθορίζει ποιο από τα αρχεία φιλτράρει το πλαίσιο διαλόγου που εμφανίζεται από
προεπιλογή. |
Τίτλος |
Καθορίζει τη λεζάντα για τη
γραμμή τίτλου του πλαισίου διαλόγου . |
ButtonText |
Αγνοήθηκε (χρησιμοποιείται μόνο για την έκδοση Macintosh του Excel). |
MultiSelect |
Εάν είναι True, ο χρήστης μπορεί να επιλέξει πολλά αρχεία. |
Ένα παράδειγμα GetOpenFilename
Το όρισμα fileFilter καθορίζει τι εμφανίζεται στην αναπτυσσόμενη λίστα Files of Type του πλαισίου διαλόγου. Αυτό το όρισμα αποτελείται από ζεύγη συμβολοσειρών φίλτρου αρχείου που ακολουθούνται από την προδιαγραφή φίλτρου αρχείου μπαλαντέρ, με κόμματα που χωρίζουν κάθε τμήμα και ζεύγος. Εάν παραλειφθεί, αυτό το όρισμα είναι προεπιλεγμένο ως εξής:
Ολα τα αρχεία (*.*), *.*
Σημειώστε ότι αυτή η συμβολοσειρά αποτελείται από δύο μέρη, που χωρίζονται με κόμμα:
Ολα τα αρχεία (*.*)
και
*.*
Το πρώτο μέρος αυτής της συμβολοσειράς είναι το κείμενο που εμφανίζεται στην αναπτυσσόμενη λίστα Files of Type. Το δεύτερο μέρος καθορίζει ποια αρχεία εμφανίζει το πλαίσιο διαλόγου. Για παράδειγμα, *.* σημαίνει όλα τα αρχεία.
Ο κώδικας στο ακόλουθο παράδειγμα ανοίγει ένα παράθυρο διαλόγου που ζητά από το χρήστη ένα όνομα αρχείου. Η διαδικασία ορίζει πέντε φίλτρα αρχείων. Σημειώστε ότι η ακολουθία συνέχισης γραμμής VBA χρησιμοποιείται για τη ρύθμιση της μεταβλητής Φίλτρο. Κάνοντας αυτό βοηθά στην απλοποίηση αυτού του μάλλον περίπλοκου επιχειρήματος.
Sub GetImportFileName ()
Dim Finfo As String
Dim FilterIdex As Long
Dim Title As String
Dim FileName As Variant
Ρύθμιση λίστας φίλτρων αρχείων
FIinfo = "Αρχεία κειμένου (*.txt),*.txt," & _
"Lotus Files (*.prn),*.prn," & _
"Αρχεία διαχωρισμένα με κόμματα (*.csv),*.csv," & _
"Αρχεία ASCII (*.asc),*.asc," & _
"Ολα τα αρχεία (*.*),*.*"
' Εμφάνιση *.* από προεπιλογή
FilterIndex = 5
Ορίστε τη λεζάντα του πλαισίου διαλόγου
Τίτλος = "Επιλέξτε ένα αρχείο για εισαγωγή"
Λάβετε το όνομα αρχείου
FileName = Application.GetOpenFilename (FInfo, _
FilterIndex, Τίτλος)
Χειριστείτε τις πληροφορίες επιστροφής από το πλαίσιο διαλόγου
Αν Όνομα Αρχείου = Λάθος Τότε
MsgBox "Δεν επιλέχθηκε κανένα αρχείο."
Αλλού
MsgBox "Επιλέξατε" & Όνομα αρχείου
Τέλος εαν
End Sub
Εδώ είναι το παράθυρο διαλόγου που εμφανίζει το Excel όταν εκτελείτε αυτήν τη διαδικασία. Η εμφάνιση μπορεί να διαφέρει, ανάλογα με την έκδοση των Windows που χρησιμοποιείτε και τις επιλογές εμφάνισης που έχετε ορίσει.
Η μέθοδος GetOpen Filename εμφανίζει ένα προσαρμόσιμο παράθυρο διαλόγου και επιστρέφει τη διαδρομή και το όνομα του επιλεγμένου αρχείου. Δεν ανοίγει το αρχείο.
Σε μια πραγματική εφαρμογή, θα κάνατε κάτι πιο ουσιαστικό με το όνομα αρχείου. Για παράδειγμα, μπορεί να θέλετε να το ανοίξετε χρησιμοποιώντας μια δήλωση όπως αυτή:
Βιβλία εργασίας. Ανοίξτε το Όνομα αρχείου
Σημειώστε ότι η μεταβλητή FileName δηλώνεται ως τύπος δεδομένων Variant. Εάν ο χρήστης κάνει κλικ στο Cancel, αυτή η μεταβλητή περιέχει μια Boolean τιμή (False). Διαφορετικά, το FileName είναι μια συμβολοσειρά. Επομένως, η χρήση ενός τύπου δεδομένων Variant χειρίζεται και τις δύο δυνατότητες.