Αυτόματο φίλτρο Excel VBA: Ένας πλήρης οδηγός με παραδείγματα

Πολλές λειτουργίες του Excel είναι επίσης διαθέσιμες για χρήση στο VBA - και το Αυτόματο φίλτρο Η μέθοδος είναι μια τέτοια λειτουργία.

Εάν έχετε ένα σύνολο δεδομένων και θέλετε να το φιλτράρετε χρησιμοποιώντας ένα κριτήριο, μπορείτε εύκολα να το κάνετε χρησιμοποιώντας την επιλογή Φίλτρο στην κορδέλα Δεδομένων.

Και αν θέλετε μια πιο προηγμένη έκδοση, υπάρχει ένα προηγμένο φίλτρο και στο Excel.

Τότε γιατί να χρησιμοποιήσετε ακόμη και το αυτόματο φίλτρο σε VBA;

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

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

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

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

Σε ένα τέτοιο σενάριο, η χρήση του VBA Autofilter μπορεί να επιταχύνει τα πράγματα και να εξοικονομήσει χρόνο.

Σημείωση: Θα καλύψω αυτό το παράδειγμα (σχετικά με το φιλτράρισμα δεδομένων με βάση μια αναπτυσσόμενη επιλογή και την αντιγραφή σε ένα νέο φύλλο) αργότερα σε αυτό το σεμινάριο.

Σύνταξη αυτόματου φίλτρου Excel VBA

Εκφραση. Αυτόματο φίλτρο (_Field_, _Criteria1_, _Operator_, _Criteria2_, _VisibleDropDown_)
  • Εκφραση: Αυτό είναι το εύρος στο οποίο θέλετε να εφαρμόσετε το αυτόματο φίλτρο.
  • Πεδίο: [Προαιρετικό επιχείρημα] Αυτός είναι ο αριθμός στήλης που θέλετε να φιλτράρετε. Αυτό υπολογίζεται από τα αριστερά στο σύνολο δεδομένων. Έτσι, εάν θέλετε να φιλτράρετε δεδομένα με βάση τη δεύτερη στήλη, αυτή η τιμή θα είναι 2.
  • Κριτήρια 1: [Προαιρετικό επιχείρημα] Αυτά είναι τα κριτήρια βάσει των οποίων θέλετε να φιλτράρετε το σύνολο δεδομένων.
  • Χειριστής: [Προαιρετικό επιχείρημα] Σε περίπτωση που χρησιμοποιείτε επίσης κριτήρια 2, μπορείτε να συνδυάσετε αυτά τα δύο κριτήρια με βάση τον Διαχειριστή. Οι ακόλουθοι χειριστές είναι διαθέσιμοι για χρήση: xlAnd, xlOr, xlBottom10Items, xlTop10Items, xlBottom10Percent, xlTop10Percent, xlFilterCellColor, xlFilterDynamic, xlFilterFontColor, xlFilterIcon, xlFilterValues
  • Κριτήρια2: [Προαιρετικό επιχείρημα] Αυτό είναι το δεύτερο κριτήριο με το οποίο μπορείτε να φιλτράρετε το σύνολο δεδομένων.
  • VisibleDropDown: [Προαιρετικό επιχείρημα] Μπορείτε να καθορίσετε εάν θέλετε το αναπτυσσόμενο εικονίδιο φίλτρου να εμφανίζεται στις φιλτραρισμένες στήλες ή όχι. Αυτό το όρισμα μπορεί να είναι ΑΛΗΘΙΝΟ ή ΛΑΘΟΣ.

Εκτός από την Έκφραση, όλα τα άλλα ορίσματα είναι προαιρετικά.

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

Sub FilterRows () Φύλλα εργασίας ("Filter Data"). Range ("A1"). AutoFilter End Sub

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

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

Σε περίπτωση που έχετε φιλτραρισμένα δεδομένα, θα αφαιρέσετε τα φίλτρα και θα εμφανιστεί το πλήρες σύνολο δεδομένων.

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

Παράδειγμα: Φιλτράρισμα δεδομένων με βάση μια συνθήκη κειμένου

Ας υποθέσουμε ότι έχετε ένα σύνολο δεδομένων όπως φαίνεται παρακάτω και θέλετε να το φιλτράρετε με βάση τη στήλη "Στοιχείο".

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

Sub FilterRows () Φύλλα εργασίας ("Sheet1"). Range ("A1"). AutoFilter Field: = 2, Criteria1: = "Printer" End Sub

Ο παραπάνω κώδικας αναφέρεται στο Sheet1 και μέσα σε αυτό, αναφέρεται στο A1 (το οποίο είναι ένα κελί στο σύνολο δεδομένων).

Σημειώστε ότι εδώ έχουμε χρησιμοποιήσει το πεδίο: = 2, καθώς η στήλη στοιχείου είναι η δεύτερη στήλη στο σύνολο δεδομένων μας από αριστερά.

Τώρα αν σκέφτεστε - γιατί πρέπει να το κάνω αυτό χρησιμοποιώντας έναν κωδικό VBA. Αυτό μπορεί εύκολα να γίνει χρησιμοποιώντας ενσωματωμένη λειτουργικότητα φίλτρου.

Εχεις δίκιο!

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

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

Αλλά πριν σας τα δείξω, επιτρέψτε μου πρώτα να καλύψω μερικά παραδείγματα για να σας δείξω τι μπορεί να κάνει όλη η μέθοδος Αυτόματου Φιλτραρίσματος.

Κάντε κλικ ΕΔΩ για λήψη του παραδείγματος αρχείου και συνέχεια.

Παράδειγμα: Πολλαπλά κριτήρια (AND/OR) στην ίδια στήλη

Ας υποθέσουμε ότι έχω το ίδιο σύνολο δεδομένων και αυτή τη φορά θέλω να φιλτράρω όλες τις εγγραφές όπου το στοιχείο είναι είτε «Εκτυπωτής» είτε «Προβολέας».

Ο παρακάτω κώδικας θα το έκανε αυτό:

Sub FilterRowsOR () Φύλλα εργασίας ("Φύλλο1"). Εύρος ("A1"). Πεδίο AutoFilter: = 2, Criteria1: = "Printer", Operator: = xlOr, Criteria2: = "Projector" End Sub

Σημειώστε ότι εδώ έχω χρησιμοποιήσει το xlOR χειριστής.

Αυτό λέει στην VBA να χρησιμοποιήσει και τα δύο κριτήρια και να φιλτράρει τα δεδομένα εάν πληρούται οποιοδήποτε από τα δύο κριτήρια.

Ομοίως, μπορείτε επίσης να χρησιμοποιήσετε τα κριτήρια AND.

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

Sub FilterRowsAND () Φύλλα εργασίας ("Φύλλο1"). Εύρος ("A1"). Πεδίο αυτόματου φίλτρου: = 4, Κριτήρια1: = "> 10", _ Τελεστής: = xlAnd, Κριτήρια2: = "<20" Τέλος υπο

Παράδειγμα: Πολλαπλά κριτήρια με διαφορετικές στήλες

Ας υποθέσουμε ότι έχετε το ακόλουθο σύνολο δεδομένων.

Με το Αυτόματο φίλτρο, μπορείτε να φιλτράρετε πολλές στήλες ταυτόχρονα.

Για παράδειγμα, εάν θέλετε να φιλτράρετε όλες τις εγγραφές όπου το στοιχείο είναι «Εκτυπωτής» και ο αντιπρόσωπος πωλήσεων είναι «Σήμανση», μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα:

Sub FilterRows () With Worksheets ("Sheet1"). Range ("A1") .AutoFilter field: = 2, Criteria1: = "Printer" .AutoFilter field: = 3, Criteria1: = "Mark" End With End Sub

Παράδειγμα: Φιλτράρετε τις κορυφαίες 10 εγγραφές χρησιμοποιώντας τη μέθοδο αυτόματου φιλτραρίσματος

Ας υποθέσουμε ότι έχετε το παρακάτω σύνολο δεδομένων.

Παρακάτω είναι ο κώδικας που θα σας δώσει τις κορυφαίες 10 εγγραφές (με βάση τη στήλη ποσότητας):

Sub FilterRowsTop10 () ActiveSheet.Range ("A1"). AutoFilter Field: = 4, Criteria1: = "10", Operator: = xlTop10Items End Sub

Στον παραπάνω κώδικα, έχω χρησιμοποιήσει το ActiveSheet. Εάν θέλετε, μπορείτε να χρησιμοποιήσετε το όνομα του φύλλου.

Σημειώστε ότι σε αυτό το παράδειγμα, εάν θέλετε να αποκτήσετε τα κορυφαία 5 στοιχεία, απλώς αλλάξτε τον αριθμό Κριτήρια 1: = "10" από 10 έως 5.

Έτσι, για τα 5 κορυφαία στοιχεία, ο κωδικός θα ήταν:

Sub FilterRowsTop5 () ActiveSheet.Range ("A1"). AutoFilter Field: = 4, Criteria1: = "5", Operator: = xlTop10Items End Sub

Μπορεί να φαίνεται περίεργο, αλλά ανεξάρτητα από το πόσα κορυφαία στοιχεία θέλετε, η τιμή Χειριστή παραμένει πάντα xlTop10Είδη.

Ομοίως, ο παρακάτω κώδικας θα σας δώσει τα 10 κάτω στοιχεία:

Sub FilterRowsBottom10 () ActiveSheet.Range ("A1"). AutoFilter Field: = 4, Criteria1: = "10", Operator: = xlBottom10Items End Sub

Και αν θέλετε τα 5 κάτω στοιχεία, αλλάξτε τον αριθμό Κριτήρια 1: = "10" από 10 έως 5.

Παράδειγμα: Φιλτράρετε το 10 τοις εκατό χρησιμοποιώντας τη μέθοδο αυτόματου φιλτραρίσματος

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

Παρακάτω είναι ο κώδικας που θα σας δώσει τις κορυφαίες εγγραφές 10 τοις εκατό (με βάση τη στήλη ποσότητας):

Sub FilterRowsTop10 () ActiveSheet.Range ("A1"). AutoFilter Field: = 4, Criteria1: = "10", Operator: = xlTop10Percent End End

Στο σύνολο δεδομένων μας, δεδομένου ότι έχουμε 20 εγγραφές, θα επιστρέψει τις 2 πρώτες εγγραφές (που είναι το 10% των συνολικών εγγραφών).

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

Ας υποθέσουμε ότι έχετε ένα σύνολο δεδομένων όπως φαίνεται παρακάτω:

Εάν θέλετε να φιλτράρετε όλες τις γραμμές όπου το όνομα του στοιχείου περιέχει τη λέξη "Πίνακας", μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα:

Sub FilterRowsWildcard () Φύλλα εργασίας ("Sheet1"). Range ("A1"). AutoFilter Field: = 2, Criteria1: = "*Board*" End Sub

Στον παραπάνω κώδικα, έχω χρησιμοποιήσει τον χαρακτήρα μπαλαντέρ * (αστερίσκο) πριν και μετά τη λέξη «Πίνακας» (που είναι τα κριτήρια).

Ένας αστερίσκος μπορεί να αντιπροσωπεύει οποιονδήποτε αριθμό χαρακτήρων. Έτσι, αυτό θα φιλτράρει κάθε στοιχείο που έχει τη λέξη «σανίδα» μέσα.

Παράδειγμα: Αντιγραφή φιλτραρισμένων σειρών σε νέο φύλλο

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

Αντιγράφει τις φιλτραρισμένες σειρές, προσθέτει ένα νέο φύλλο εργασίας και στη συνέχεια επικολλά αυτές τις αντιγραμμένες σειρές στο νέο φύλλο.

Sub CopyFilteredRows () Dim rng As Range Dim ws As Worksheet If Worksheets ("Sheet1"). AutoFilterMode = False Στη συνέχεια MsgBox "Δεν υπάρχουν φιλτραρισμένες σειρές" Exit Sub End If Set rng = Worksheets ("Sheet1"). AutoFilter.Range Set ws = Φύλλα εργασίας.Προσθήκη rng.Επίπεδο αντιγραφής ("A1") Τέλος υπο

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

Εάν δεν υπάρχουν φιλτραρισμένες σειρές, θα εμφανιστεί ένα πλαίσιο μηνύματος που θα το δηλώνει αυτό.

Και αν υπάρχουν φιλτραρισμένες γραμμές, θα τις αντιγράψει, θα εισαγάγει ένα νέο φύλλο εργασίας και θα επικολλήσει αυτές τις γραμμές σε αυτό το πρόσφατα εισαγόμενο φύλλο εργασίας.

Παράδειγμα: Φιλτράρετε δεδομένα με βάση την τιμή κελιού

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

Κάτι όπως φαίνεται παρακάτω:

Κάντε κλικ ΕΔΩ για λήψη του παραδείγματος αρχείου και συνέχεια.

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

Παρακάτω είναι ο κώδικας που θα το κάνει αυτό:

Private Sub Worksheet_Change (ByVal Target As Range) If Target.Address = "$ B $ 2" Then If Range ("B2") = "All" Then Range ("A5"). AutoFilter Else Range ("A5"). AutoFilter Field : = 2, Criteria1: = Range ("B2") End If End If End Sub

Αυτός είναι ένας κώδικας συμβάντος φύλλου εργασίας, ο οποίος εκτελείται μόνο όταν υπάρχει αλλαγή στο φύλλο εργασίας και το κελί στόχος είναι το Β2 (όπου έχουμε το αναπτυσσόμενο μενού).

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

Αυτός ο κωδικός ΔΕΝ τοποθετείται σε μια ενότητα.

Αντ 'αυτού, πρέπει να τοποθετηθεί στο πίσω μέρος του φύλλου εργασίας που περιέχει αυτά τα δεδομένα.

Ακολουθούν τα βήματα για να τοποθετήσετε αυτόν τον κώδικα στο παράθυρο κωδικού φύλλου εργασίας:

  1. Ανοίξτε το πρόγραμμα επεξεργασίας VB (συντόμευση πληκτρολογίου - ALT + F11).
  2. Στο παράθυρο Project Explorer, κάντε διπλό κλικ στο όνομα του φύλλου εργασίας στο οποίο θέλετε αυτήν τη λειτουργία φιλτραρίσματος.
  3. Στο παράθυρο κωδικού φύλλου εργασίας, αντιγράψτε και επικολλήστε τον παραπάνω κώδικα.
  4. Κλείστε το πρόγραμμα επεξεργασίας VB.

Τώρα όταν χρησιμοποιείτε την αναπτυσσόμενη λίστα, θα φιλτράρει αυτόματα τα δεδομένα.

Αυτός είναι ένας κώδικας συμβάντος φύλλου εργασίας, ο οποίος εκτελείται μόνο όταν υπάρχει αλλαγή στο φύλλο εργασίας και το κελί στόχος είναι το Β2 (όπου έχουμε το αναπτυσσόμενο μενού).

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

Ενεργοποιήστε/απενεργοποιήστε το Αυτόματο φίλτρο Excel χρησιμοποιώντας VBA

Κατά την εφαρμογή Αυτόματου φίλτρου σε μια σειρά κελιών, ενδέχεται να υπάρχουν ήδη ορισμένα φίλτρα.

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

Sub TurnOFFAutoFilter () Φύλλα εργασίας ("Sheet1"). AutoFilterMode = False End Sub

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

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

Sub TurnOFFAutoFilter () If Worksheets ("Sheet1"). Range ("A1"). AutoFilter Then Worksheets ("Sheet1"). Range ("A1"). AutoFilter End If End Sub

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

Εάν τα φίλτρα έχουν ήδη εφαρμοστεί, το αφαιρεί, αλλιώς δεν κάνει τίποτα.

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

Sub TurnOnAutoFilter () If Not Worksheets ("Sheet1"). Range ("A4"). AutoFilter Then Worksheets ("Sheet1"). Range ("A4"). AutoFilter End If End Sub

Ελέγξτε εάν το Αυτόματο φίλτρο έχει ήδη εφαρμοστεί

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

Sub CheckforFilters () If ActiveSheet.AutoFilterMode = True Τότε MsgBox "Υπάρχουν ήδη φίλτρα στη θέση τους" Else MsgBox "Δεν υπάρχουν φίλτρα" Τέλος αν τέλος

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

Εμφάνιση όλων των δεδομένων

Εάν έχετε εφαρμόσει φίλτρα στο σύνολο δεδομένων και θέλετε να εμφανίσετε όλα τα δεδομένα, χρησιμοποιήστε τον παρακάτω κώδικα:

Sub ShowAllData () If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData End Sub

Ο παραπάνω κώδικας ελέγχει αν το FilterMode είναι TRUE ή FALSE.

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

Λάβετε υπόψη ότι αυτό δεν αφαιρεί τα φίλτρα. Τα εικονίδια φίλτρου είναι ακόμα διαθέσιμα για χρήση.

Χρήση αυτόματου φίλτρου σε προστατευμένα φύλλα

Από προεπιλογή, όταν προστατεύετε ένα φύλλο, τα φίλτρα δεν θα λειτουργούν.

Σε περίπτωση που έχετε ήδη τοποθετήσει φίλτρα, μπορείτε να ενεργοποιήσετε το Αυτόματο φίλτρο για να βεβαιωθείτε ότι λειτουργεί ακόμη και σε προστατευμένα φύλλα.

Για να το κάνετε αυτό, ελέγξτε την επιλογή Χρήση αυτόματου φίλτρου προστατεύοντας το φύλλο.

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

Δεδομένου ότι το φύλλο είναι προστατευμένο, δεν θα επιτρέψει σε καμία μακροεντολή να εκτελεστεί και να κάνει αλλαγές στο Αυτόματο φίλτρο.

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

Αυτό μπορεί να είναι χρήσιμο όταν έχετε δημιουργήσει ένα δυναμικό φίλτρο (κάτι που κάλυψα στο παράδειγμα - «Φιλτράρετε δεδομένα με βάση την τιμή κελιού»).

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

Private Sub Workbook_Open () With Worksheets ("Sheet1") .EnableAutoFilter = True .Protect Password: = "password", Contents: = True, UserInterfaceOnly: = True End With End Sub

Αυτός ο κωδικός πρέπει να τοποθετηθεί στο παράθυρο κωδικού ThisWorkbook.

Ακολουθούν τα βήματα για να τοποθετήσετε τον κώδικα στο παράθυρο κωδικού ThisWorkbook:

  1. Ανοίξτε το πρόγραμμα επεξεργασίας VB (συντόμευση πληκτρολογίου - ALT + F11).
  2. Στο παράθυρο Project Explorer, κάντε διπλό κλικ στο αντικείμενο ThisWorkbook.
  3. Στο παράθυρο κώδικα που ανοίγει, αντιγράψτε και επικολλήστε τον παραπάνω κώδικα.

Μόλις ανοίξετε το βιβλίο εργασίας και ενεργοποιήσετε τις μακροεντολές, θα εκτελεστεί αυτόματα η μακροεντολή και θα προστατεύσει το Sheet1.

Ωστόσο, πριν το κάνει αυτό, θα καθορίσει το «EnableAutoFilter = True», πράγμα που σημαίνει ότι τα φίλτρα θα λειτουργούσαν και στο προστατευμένο φύλλο.

Επίσης, ορίζει το όρισμα «UserInterfaceOnly» σε «True». Αυτό σημαίνει ότι ενώ το φύλλο εργασίας προστατεύεται, ο κώδικας μακροεντολών VBA θα συνεχίσει να λειτουργεί.

Μπορεί επίσης να σας αρέσουν τα ακόλουθα μαθήματα VBA:

  • Βρόχοι Excel VBA.
  • Φιλτράρετε κελιά με έντονη μορφοποίηση γραμματοσειράς.
  • Εγγραφή μακροεντολής.
  • Ταξινόμηση δεδομένων χρησιμοποιώντας VBA.
  • Ταξινόμηση καρτελών φύλλου εργασίας στο Excel.

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave