Το VBA υποστηρίζει έναν άλλο τύπο βρόχου στο Excel 2016: επαναφορά σε κάθε αντικείμενο σε μια συλλογή αντικειμένων. Μια συλλογή, όπως ίσως γνωρίζετε, αποτελείται από έναν αριθμό αντικειμένων του ίδιου τύπου. Για παράδειγμα, το Excel έχει μια συλλογή από όλα τα ανοιχτά βιβλία εργασίας (η συλλογή Βιβλία εργασίας) και κάθε βιβλίο εργασίας έχει μια συλλογή από φύλλα εργασίας (η συλλογή Φύλλα εργασίας).
Όταν χρειάζεται να κάνετε κύκλο σε κάθε αντικείμενο σε μια συλλογή, χρησιμοποιήστε τη δομή Για κάθε-Επόμενο. Το ακόλουθο παράδειγμα κάνει κύκλους σε κάθε φύλλο εργασίας στο ενεργό βιβλίο εργασίας και διαγράφει το φύλλο εργασίας εάν είναι κενό:
Sub DeleteEmptySheets()
Dim WkSht ως φύλλο εργασίας
Application.DisplayAlerts = False
Για κάθε WkSht Στο ActiveWorkbook.Worksheets
Αν WorksheetFunction.CountA(WkSht.Cells) = 0 Τότε
WkSht.Διαγραφή
Τέλος εαν
Επόμενο WkSht
Application.DisplayAlerts = True
End Sub
Σε αυτό το παράδειγμα, η μεταβλητή WkSht είναι μια μεταβλητή αντικειμένου που αντιπροσωπεύει κάθε φύλλο εργασίας στο βιβλίο εργασίας. Τίποτα δεν είναι ιδιαίτερο σχετικά με το όνομα της μεταβλητής WkSht. μπορείτε να χρησιμοποιήσετε οποιοδήποτε όνομα μεταβλητής θέλετε.
Ο κώδικας περιστρέφεται σε κάθε φύλλο εργασίας και προσδιορίζει ένα κενό φύλλο μετρώντας τα μη κενά κελιά. Εάν αυτή η μέτρηση είναι μηδέν, το φύλλο είναι κενό και διαγράφεται. Παρατηρήστε ότι η ρύθμιση DisplayAlerts είναι απενεργοποιημένη ενώ ο βρόχος κάνει τη δουλειά του. Χωρίς αυτήν τη δήλωση, το Excel εμφανίζει μια προειδοποίηση κάθε φορά που ένα φύλλο πρόκειται να διαγραφεί.
Εάν όλα τα φύλλα εργασίας στο βιβλίο εργασίας είναι άδεια, εμφανίζεται ένα σφάλμα όταν το Excel επιχειρεί να διαγράψει το μοναδικό φύλλο. Κανονικά, θα γράφατε κώδικα για να χειριστείτε αυτήν την κατάσταση.
Εδώ είναι ένα άλλο παράδειγμα For Every-Next. Αυτή η διαδικασία χρησιμοποιεί έναν βρόχο για την απόκρυψη όλων των φύλλων εργασίας στο ενεργό βιβλίο εργασίας εκτός από το ενεργό φύλλο.
Sub HideSheets()
Dim Sht As φύλλο εργασίας
For Every Sht In ActiveWorkbook.Worksheets
Αν Sht.Name <> ActiveSheet.Name Τότε
Sht.Visible = xlSheetHidden
Τέλος εαν
Επόμενος Στ
End Sub
Η διαδικασία HideSheets ελέγχει το όνομα του φύλλου. Εάν δεν είναι το ίδιο με το όνομα του ενεργού φύλλου, το φύλλο είναι κρυφό. Σημειώστε ότι η ιδιότητα Visible δεν είναι Boolean. Αυτή η ιδιότητα μπορεί στην πραγματικότητα να λάβει οποιαδήποτε από τις τρεις τιμές και το Excel παρέχει τρεις ενσωματωμένες σταθερές. Εάν είστε περίεργοι για την τρίτη πιθανότητα (xlVeryHidden), ελέγξτε το σύστημα Βοήθειας.
Ό,τι αποκρύπτεται πρέπει τελικά να μην κρυφτεί, οπότε ακολουθεί μια μακροεντολή που αποκρύπτει όλα τα φύλλα εργασίας στο ενεργό βιβλίο εργασίας:
Sub UnhideSheets()
Dim Sht As φύλλο εργασίας
For Every Sht In ActiveWorkbook.Worksheets
Sht.Visible = xlSheetVisible
Επόμενος Στ
End Sub
Δεν αποτελεί έκπληξη το γεγονός ότι μπορείτε να δημιουργήσετε ένθετους βρόχους For Every-Next. Η διαδικασία CountBold πραγματοποιεί βρόχους σε κάθε κελί της χρησιμοποιούμενης περιοχής σε κάθε φύλλο εργασίας σε κάθε ανοιχτό βιβλίο εργασίας και εμφανίζει μια μέτρηση του αριθμού των κελιών που έχουν μορφοποιηθεί με έντονη γραφή:
Sub CountBold()
Dim WBook ως βιβλίο εργασίας
Dim Wsheet ως φύλλο εργασίας
Dim Cell As Range
Dim Cnt As Long
Για κάθε WBook σε βιβλία εργασίας
Για κάθε φύλλο εργασίας στο WBook.Worksheets
Για κάθε κελί στο WSheet.UsedRange
Αν Cell.Font.Bold = True Τότε Cnt = Cnt + 1
Επόμενο κελί
Επόμενο WSheet
Επόμενο WBook
MsgBox Cnt & "Βρέθηκαν έντονα κελιά"
End Sub