Τι είναι το FileSystemObject (FSO) και πώς να το χρησιμοποιήσετε στο VBA Excel;

Πίνακας περιεχομένων:

Anonim

Το FileSystemObject χρησιμοποιείται για εργασία με φακέλους και αρχεία που είναι συνδεδεμένα με το σύστημα. Μπορούμε να το χρησιμοποιήσουμε για πρόσβαση σε αρχεία, φακέλους, μονάδες δίσκου και ροές κειμένου. Μπορεί όχι μόνο να έχει πρόσβαση σε αρχεία, φακέλους και αρχεία κειμένου, αλλά μπορεί επίσης να δημιουργήσει. Αυτές οι λειτουργίες δεν περιορίζονται στον σκληρό δίσκο του συστήματος αλλά σε οποιαδήποτε συσκευή συνδεδεμένη στο αρχείο. Αυτό σημαίνει ότι μπορείτε να έχετε πρόσβαση σε μονάδες γραφίδας, δίσκους cd ή ουσιαστικά συνδεδεμένες μονάδες δικτύου.

Αυτές είναι οι λειτουργίες που μπορούμε να κάνουμε χρησιμοποιώντας το FileSystemObject σε VBA:

Για δημιουργία, άνοιγμα, ανάγνωση, εγγραφή και διαγραφή αρχείων κειμένου.

Για προσθήκη, τροποποίηση και διαγραφή φακέλων.

Για επανάληψη αρχείων και φακέλων.

Για αντιγραφή και μετακίνηση αρχείων ή φακέλων σε άλλα μέρη.

Για έλεγχο αν υπάρχει αρχείο ή φάκελος στη θέση του ή όχι

Πώς να αποκτήσετε πρόσβαση στο FileSystemObject σε VBA;

Το αντικείμενο του συστήματος αρχείων είναι μέρος της Βιβλιοθήκης εκτελέσεων δέσμης ενεργειών της Microsoft. Για πρόσβαση σε ένα FileSystemObject πρέπει να συνδέσουμε ή να προσθέσουμε μια αναφορά στο Microsoft Scripting Runtime Library ή Scrrun.dll.

Σημείωση: Το FileSystemObject δεν υποστηρίζει τη λειτουργία δυαδικών αρχείων επειδή το Scrrun.dll υποστηρίζει τη δημιουργία και χειρισμό αρχείων χρησιμοποιώντας το αντικείμενο TextStream.

Υπάρχουν δύο μέθοδοι για τη δημιουργία του FileSystemObject στο VBA:

1: Δημιουργία αντικειμένου FSO χρησιμοποιώντας τη μέθοδο CreateObject:

Χρησιμοποιώντας αυτήν τη μέθοδο δηλώνουμε πρώτα έναν τύπο μεταβλητού αντικειμένου. Στη συνέχεια, ορίστε την αναφορά του αντικειμένου FSO σε αυτήν τη μεταβλητή χρησιμοποιώντας το CreateObject:

Sub LearnFso () 'Δημιουργία της μεταβλητής αντικειμένου Dim fso As Object' Δημιουργία του FileSystemObject χρησιμοποιώντας Δημιουργία μεθόδου αντικειμένου Σετ fso = CreateObject ("Scripting.FileSystemObject") Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR" ) Τέλος υπο 

Αυτή η μέθοδος είναι δυναμική και μεταβιβάσιμη. Σημαίνει, εάν μοιράζεστε τον κώδικα σε άλλα συστήματα, αυτός ο κώδικας θα λειτουργήσει τέλεια. Δεν έχει σημασία ποια έκδοση της Microsoft Scripting έκδοσης έκδοσης έχετε.

Το μόνο μειονέκτημα είναι ότι δεν θα μπορείτε να δείτε το intellisense που παρέχει η VBA. Θα πρέπει να βασιστείτε στις γνώσεις σας για να χρησιμοποιήσετε όλες τις ιδιότητες και τις μεθόδους του FileSystemObject.

2: Δημιουργία αντικειμένου FSO με προσθήκη αναφοράς στη δέσμη ενεργειών της Microsoft Runtime

Μπορείτε να δημιουργήσετε απευθείας ένα FileSystemObject σε VBA χρησιμοποιώντας τη νέα λέξη -κλειδί. Για αυτό θα πρέπει να προσθέσετε μια αναφορά στο πιο πρόσφατο Microsoft Scripting Runtime στο σύστημά σας.

Για να προσθέσετε την αναφορά, μεταβείτε στην επιλογή αναφορές στο μενού εργαλείων. Εδώ, βρείτε το dll του Microsoft Scripting Runtime. Ελέγξτε το και κάντε κλικ στο OK.

Τώρα είστε έτοιμοι να δημιουργήσετε και να χρησιμοποιήσετε το αντικείμενο FSO.

Sub LearnFso () Dim fso as new FileSystemObject Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR") End Sub 

Ή

Sub LearnFso () Dim fso as FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR") End Sub 

Και τα δύο θα λειτουργήσουν καλά.

Ένα σημαντικό πλεονέκτημα αυτής της μεθόδου είναι ότι θα μπορείτε να δείτε τη νοημοσύνη του VBA. Το VBA θα σας δείξει όλες τις ιδιότητες και τις μεθόδους του αντικειμένου fso. Θα δείξει επίσης τι είδους μεταβλητές θα δεχτεί και τι είδους αξία θα επιστρέψει.

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

Σημειώστε ότι το FSO δεν είναι λέξη -κλειδί. Μπορείτε να το χρησιμοποιήσετε ως όνομα μεταβλητής. Είναι απλώς μια σύμβαση για να ονομάσετε το αρχείο αρχείων ως αντικείμενο ως fso. Αυτός είναι ο λόγος για τον οποίο ορισμένοι συγχέουν ότι είναι λέξη -κλειδί.

Και οι δύο μέθοδοι δημιουργίας αντικειμένων FSO έχουν τα πλεονεκτήματα και τα μειονεκτήματά τους που ανέφερα ενώ τα εξηγούσα. Χρησιμοποιήστε το σύμφωνα με τις ανάγκες σας. Σε αυτό το άρθρο, θα χρησιμοποιήσω τη δεύτερη μέθοδο δημιουργίας FileSystemObject.

Τώρα που γνωρίζουμε πώς να δημιουργήσουμε ένα FileSystemObject στο VBA, ας χρησιμοποιήσουμε αυτήν τη γνώση για να κάνουμε κάποιες σημαντικές εργασίες. Εννοώ ας πάμε στα παραδείγματα.

Παράδειγμα 1: Λάβετε όλο τον υποφάκελο σε έναν καθορισμένο φάκελο

Το πρώτο παράδειγμα που θα δούμε είναι να λάβουμε τα ονόματα των υποφακέλων από έναν συγκεκριμένο φάκελο.

Sub LearnFso () "decaring μεταβλητές που θα χρειαστούμε Dim fso As FileSystemObject 'Variable for the FileSystemObject Dim fdr As Folder' Variable for the base folder Dim subfdr As Folder 'Variable for the sub folders Dim fdrpath As String' to storage path of base φάκελος 'Intializing the objects fdrpath = "D: \ Downloads"' Δήλωση του φακέλου Set fso = New FileSystemObject 'Δημιουργία του αντικειμένου fso Set fdr = fso.GetFolder (fdrpath)' Δημιουργία του αντικειμένου φακέλου του συγκεκριμένου φακέλου 'βρόχο για να λάβετε όλα τα όνομα υποφακέλων σε Για κάθε υποφάσμα σε fdr.SubFolders Debug.Print subfdr.Name Επόμενο subfdr Τέλος υπο 

Όταν εκτελείτε τον παραπάνω κώδικα, αυτό παίρνετε.

Ναι! Αυτός είναι ο φάκελος λήψης μου. Μην συγκεντρώνεσαι σε αυτό.

Πώς λειτούργησε αυτό;

Ας καταλάβουμε βήμα προς βήμα:

1: Προσδιορισμός μεταβλητών που θα χρειαστούμε

Dim fso Ως μεταβλητή FileSystemObject 'για το FileSystemObject

Dim fdr As Folder 'Variable για τον βασικό φάκελο

Dim subfdr Ως φάκελος 'Μεταβλητή για τους δευτερεύοντες φακέλους

Αρχικά δηλώσαμε όλη τη μεταβλητή που θα χρειαστούμε σε αυτό το παράδειγμα. Η πρώτη μεταβλητή είναι φυσικά η fso ως αντικείμενο συστήματος αρχείου. Οι δύο μεταβλητές fdr και subfdr είναι τύπου φακέλου. Θα χρησιμοποιήσουμε το αντικείμενο fso για να δημιουργήσουμε ένα αντικείμενο τύπου αρχείου αντί να δημιουργήσουμε απευθείας. ο fdrpath Η μεταβλητή is use χρησιμοποιείται για να κρατήσει τη διαδρομή του βασικού φακέλου από τον οποίο θέλουμε να πάρουμε όλους τους υποφακέλους.

2: Εισαγωγή των αντικειμένων

fdrpath = "D: \ Λήψεις" «Δήλωση του φακέλου

Ρύθμιση fso = Νέο FileSystemObject 'Δημιουργία του αντικειμένου fso

Ρύθμιση fdr = fso.GetFolder (fdrpath) 'Δημιουργία του αντικειμένου φακέλου του δεδομένου φακέλου

Σε αυτό το βήμα αρχικοποιήσαμε όλα τα αντικείμενα που είχαμε δηλώσει εκτός από το subfdr. Σημειώστε ότι έχουμε αρχικοποιήσει τη μεταβλητή αρχείου fdr χρησιμοποιώντας τη μέθοδο getFolder των αντικειμένων fso.

Η μέθοδος GetFolder () του FileSystemObject παίρνει τη διαδρομή ενός φακέλου ή καταλόγου ως συμβολοσειρά και επιστρέφει αντικείμενο τύπου αρχείου.

3: βρόχος για να λάβετε όλα τα ονόματα των υποφακέλων στο αντικείμενο φακέλου

Για κάθε subfdr Σε fdr.SubFolders

Debug.Print subfdr.Name

Επόμενο subfdr

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

Χρησιμοποιούμε την ιδιότητα name για να λάβουμε τα ονόματα κάθε υποφακέλου. Και γίνεται.

Παράδειγμα 2: Λήψη όλων των διαδρομών αρχείου σε έναν φάκελο και υποφάκελοι

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

Sub LearnFso () Dim fso As FileSystemObject Dim fdr As Folder 'Μεταβλητή για τον βασικό φάκελο Dim subfdr As Folder' Μεταβλητή για τους υποφακέλους Dim fdrpath As String 'για αποθήκευση διαδρομής του βασικού φακέλου Dim fl As File' για αποθήκευση αντικειμένου αρχείου fdrpath = "D: \ downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder (fdrpath) 'loop για να λάβετε όλα τα ονόματα των υποφακέλων στο Για κάθε subfdr Σε fdr.SubFolders For Every fl In subfdr.Files' για βρόχο σε κάθε αρχείο Debug.Print fl.Path 'getting name file Next fl Next subfdr' to get the files of main folder For Every fl In fdr.Files Debug.Print fl.Path Next fl End Sub 

Η μέθοδος Folder.Files () είναι η μέθοδος που επιστρέφει τα αρχεία σε έναν υποφάκελο. Η μέθοδος File.Path () επιστρέφει την πλήρη διεύθυνση του αρχείου.

Ο καθένας μας έχει έναν εσωτερικό βρόχο για να επαναλαμβάνει όλα τα αρχεία στον υποφάκελο του κύριου φακέλου και του.

Για να λάβουμε τα αρχεία του κύριου φακέλου χρησιμοποιούμε άλλο βρόχο.

Παράδειγμα 3: Αποθηκεύστε τα ονόματα αρχείων σε ένα αρχείο CSV.

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

Sub LearnFso () Dim fso As FileSystemObject Dim fdr As Folder 'Variable for the base folder Dim subfdr As Folder' Variable for the sub folders Dim fdrpath As String 'to save path of base folder Dim fl As File' to save file object Dim fileList Ως TextStream 'A object textstream fdrpath = "D: \ downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder (fdrpath) Set fileList = fso.CreateTextFile (fdrpath & "\ File List in This Folder.csv", True, False) "βρόχος για να λάβετε όλα τα ονόματα των υποφακέλων στο Για κάθε subfdr Σε fdr.SubFolders For Every fl In subfdr.Files" για να περιτυλίξετε σε κάθε αρχείο fileList.Write fl.Path & "," Next fl Next subfdr "για να λάβετε αρχεία του κύριου φακέλου Για κάθε fl Σε fdr.Files fileList.Write fl.Path & "," Next fl fileList.Close End Sub 

Εδώ, έχουμε δηλώσει ένα νέο αντικείμενο τύπου FileStream με όνομα fileList

Αρχικοποιήσαμε τη μεταβλητή της λίστας αρχείων με ένα αντικείμενο ροής αρχείων χρησιμοποιώντας την παρακάτω γραμμή.

Ορισμός fileList = fso.CreateTextFile (fdrpath & "\ File List in This Folder.csv", True, False)

Χρησιμοποιούμε τη μέθοδο CreateTextFile του FSO για να δημιουργήσουμε ένα αντικείμενο FileStream. Δημιουργεί ένα αρχείο κειμένου. Αυτή η μέθοδος δέχεται το όνομα ενός αρχείου με μια πλήρη διαδρομή. Η πρώτη μεταβλητή το κάνει. Χρησιμοποιούμε την επέκταση .csv για να δημιουργήσουμε ένα αρχείο csv. Η δεύτερη μεταβλητή χρησιμοποιείται για να επιτρέψει την αντικατάσταση. Το τρίτο όρισμα είναι False για να δηλώσει ότι δεν είναι δυαδικό αρχείο.

Στους βρόχους, αντικαθιστούμε το debug.print με filelist.Write μέθοδο για να γράψουμε κάθε διαδρομή αρχείου στο αρχείο που δημιουργήθηκε.

Λοιπόν, ναι, έτσι μπορείτε να χρησιμοποιήσετε το FileSystemObject. Το FSO μπορεί να χρησιμοποιηθεί για πολλά ακόμη πράγματα, τα οποία θα συζητήσουμε στα επόμενα άρθρα. Εάν έχετε αμφιβολίες σχετικά με αυτό το άρθρο σχετικά με το ερώτημα FSO, ρωτήστε με στην παρακάτω ενότητα σχολίων.

Ξεκινώντας με το Excel VBA UserForms| Θα εξηγήσω πώς να δημιουργήσετε μια φόρμα στο excel, πώς να χρησιμοποιήσετε την εργαλειοθήκη VBA, πώς να χειριστείτε τις εισόδους των χρηστών και τέλος πώς να αποθηκεύσετε τις εισόδους των χρηστών. Θα εξετάσουμε αυτά τα θέματα χρησιμοποιώντας ένα παράδειγμα και βήμα προς βήμα οδηγό.

Μεταβλητές VBA στο Excel| Το VBA σημαίνει Visual Basic for Applications. Είναι μια γλώσσα προγραμματισμού από τη Microsoft. Χρησιμοποιείται με εφαρμογές του Microsoft Office, όπως MSExcel, MS-Word και MS-Access, ενώ οι μεταβλητές VBA είναι συγκεκριμένες λέξεις-κλειδιά.

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

Επιχειρήματα ByRef και ByVal | Όταν ένα όρισμα μεταβιβάζεται ως όρισμα ByRef σε διαφορετικό υποσύστημα ή συνάρτηση, αποστέλλεται η αναφορά της πραγματικής μεταβλητής. Τυχόν αλλαγές που γίνονται στο αντίγραφο της μεταβλητής, θα αντικατοπτρίζονται στο αρχικό όρισμα.

Διαγράψτε φύλλα χωρίς προτροπές επιβεβαίωσης χρησιμοποιώντας VBA στο Microsoft Excel | Δεδομένου ότι διαγράφετε φύλλα χρησιμοποιώντας VBA, γνωρίζετε τι κάνετε. Θα θέλατε να πείτε στο Excel να μην εμφανίζει αυτήν την προειδοποίηση και να διαγράψει το καταραμένο φύλλο.

Προσθήκη και αποθήκευση νέου βιβλίου εργασίας χρησιμοποιώντας το VBA στο Microsoft Excel 2016| Σε αυτόν τον κώδικα, δημιουργήσαμε πρώτα μια αναφορά σε ένα αντικείμενο βιβλίου εργασίας. Και στη συνέχεια το αρχικοποιήσαμε με ένα νέο αντικείμενο βιβλίου εργασίας. Το πλεονέκτημα αυτής της προσέγγισης είναι ότι μπορείτε να κάνετε εύκολα λειτουργίες σε αυτό το νέο βιβλίο εργασίας. Όπως αποθήκευση, κλείσιμο, διαγραφή κλπ

Εμφάνιση μηνύματος στη γραμμή κατάστασης του Excel VBA| Η γραμμή κατάστασης στο excel μπορεί να χρησιμοποιηθεί ως οθόνη κώδικα. Όταν ο κώδικας VBA είναι μεγάλος και εκτελείτε πολλές εργασίες χρησιμοποιώντας το VBA, συχνά απενεργοποιείτε την ενημέρωση της οθόνης, έτσι ώστε να μην βλέπετε αυτήν την οθόνη να τρεμοπαίζει.

Απενεργοποιήστε τα μηνύματα προειδοποίησης χρησιμοποιώντας το VBA στο Microsoft Excel 2016| Αυτός ο κώδικας όχι μόνο απενεργοποιεί τις ειδοποιήσεις VBA αλλά επίσης αυξάνει την αποδοτικότητα χρόνου του κώδικα. Ας δούμε πώς.

Δημοφιλή άρθρα:

50 συντομεύσεις Excel για να αυξήσετε την παραγωγικότητά σας | Γίνετε πιο γρήγοροι στην εργασία σας. Αυτές οι 50 συντομεύσεις θα σας κάνουν να εργάζεστε ακόμη πιο γρήγορα στο Excel.

Η συνάρτηση VLOOKUP στο Excel | Αυτή είναι μια από τις πιο δημοφιλείς και δημοφιλείς λειτουργίες του excel που χρησιμοποιείται για την αναζήτηση τιμών από διαφορετικά εύρη και φύλλα.

COUNTIF στο Excel 2016 | Μετρήστε τιμές με συνθήκες χρησιμοποιώντας αυτήν την εκπληκτική συνάρτηση. Δεν χρειάζεται να φιλτράρετε τα δεδομένα σας για να μετρήσετε συγκεκριμένες τιμές. Η λειτουργία Countif είναι απαραίτητη για την προετοιμασία του ταμπλό σας.

Πώς να χρησιμοποιήσετε τη συνάρτηση SUMIF στο Excel | Αυτή είναι μια άλλη βασική λειτουργία του ταμπλό. Αυτό σας βοηθά να συνοψίσετε τιμές υπό συγκεκριμένες συνθήκες.