Βρόχοι σε VBA

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

Οι βρόχοι VBA περιλαμβάνουν:

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

Για Loop Operator στη Visual Basic

Η δομή του τελεστή βρόχου Η στη Visual Basic μπορεί να οργανωθεί σε μία από τις δύο μορφές: ως βρόχος Για… Επόμενο ή ως βρόχος Για κάθε.

Κύκλος «Για… Επόμενο»

Κύκλος Για… Επόμενο χρησιμοποιεί μια μεταβλητή που παίρνει διαδοχικά τιμές από ένα δεδομένο εύρος. Με κάθε αλλαγή της τιμής της μεταβλητής εκτελούνται οι ενέργειες που περικλείονται στο σώμα του κύκλου. Αυτό είναι εύκολο να γίνει κατανοητό από ένα απλό παράδειγμα:

Για i = 1 έως 10 Σύνολο = Σύνολο + iArray(i) Επόμενο i

Σε αυτόν τον απλό βρόχο Για… Επόμενο χρησιμοποιείται μεταβλητή i, το οποίο παίρνει διαδοχικά τις τιμές 1, 2, 3, … 10, και για καθεμία από αυτές τις τιμές, εκτελείται ο κώδικας VBA μέσα στον βρόχο. Έτσι, αυτός ο βρόχος αθροίζει τα στοιχεία του πίνακα. iArray σε μεταβλητή Σύνολο.

Στο παραπάνω παράδειγμα, η αύξηση του βρόχου δεν καθορίζεται, επομένως για να αυξηθεί η μεταβλητή i από 1 έως 10, η προεπιλογή είναι μια αύξηση 1… Ωστόσο, σε ορισμένες περιπτώσεις είναι απαραίτητο να χρησιμοποιηθούν διαφορετικές τιμές αύξησης για τον βρόχο. Αυτό μπορεί να γίνει χρησιμοποιώντας τη λέξη-κλειδί Βήμαόπως φαίνεται στο παρακάτω απλό παράδειγμα.

Για d = 0 έως 10 Βήμα 0.1 dΣύνολο = dΣύνολο + d Επόμενο d

Εφόσον στο παραπάνω παράδειγμα, το βήμα αύξησης ορίζεται ίσο με 0.1, μετά η μεταβλητή dΣύνολο για κάθε επανάληψη του κύκλου παίρνει τις τιμές 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Για να προσδιορίσετε το βήμα βρόχου στο VBA, μπορείτε να χρησιμοποιήσετε μια αρνητική τιμή, για παράδειγμα, όπως αυτή:

Για i = 10 Προς 1 Βήμα -1 iArray(i) = i Επόμενο i

Εδώ είναι η προσαύξηση -1, άρα η μεταβλητή i με κάθε επανάληψη του κύκλου παίρνει τις τιμές 10, 9, 8,… 1.

Βρόχος «Για τον καθένα»

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

Dim wsheet ως φύλλο εργασίας για κάθε wsheet σε φύλλα εργασίας MsgBox "Найден лист: " & wSheet.Name Επόμενο wSheet

Δήλωση διακοπής βρόχου "Έξοδος για"

Χειριστής Έξοδος για χρησιμοποιείται για τη διακοπή του κύκλου. Μόλις αυτή η δήλωση συναντηθεί στον κώδικα, το πρόγραμμα τερματίζει την εκτέλεση του βρόχου και προχωρά στην εκτέλεση των εντολών που βρίσκονται στον κώδικα αμέσως μετά από αυτόν τον βρόχο. Αυτό μπορεί να χρησιμοποιηθεί, για παράδειγμα, για την αναζήτηση μιας συγκεκριμένης τιμής σε έναν πίνακα. Για να γίνει αυτό, χρησιμοποιώντας ένα βρόχο, σαρώνεται κάθε στοιχείο του πίνακα. Μόλις βρεθεί το απαιτούμενο στοιχείο, δεν χρειάζεται να κοιτάξετε τα υπόλοιπα - ο κύκλος διακόπτεται.

Εφαρμογή χειριστή Έξοδος για αποδεικνύεται στο ακόλουθο παράδειγμα. Εδώ ο βρόχος επαναλαμβάνει περισσότερες από 100 καταχωρήσεις πίνακα και συγκρίνει την καθεμία με την τιμή της μεταβλητής dVal… Εάν βρεθεί αντιστοιχία, τότε ο βρόχος τερματίζεται:

Για i = 1 έως 100 Αν dValues(i) = dVal Τότε IndexVal = i Έξοδος για Τέλος Αν Επόμενο i

Ο βρόχος Do while στη Visual Basic

Κύκλος Κάντε ενώ εκτελεί ένα μπλοκ κώδικα εφόσον πληρούται η καθορισμένη συνθήκη. Το παρακάτω είναι ένα παράδειγμα διαδικασίας Σε, στο οποίο χρησιμοποιώντας τον βρόχο Κάντε ενώ Οι αριθμοί Fibonacci που δεν υπερβαίνουν το 1000 εμφανίζονται διαδοχικά:

'Η δευτερεύουσα διαδικασία εξάγει αριθμούς Fibonacci που δεν υπερβαίνουν το 1000 Sub Fibonacci() Dim i As Integer' μετρητής για να υποδείξει τη θέση του στοιχείου στην ακολουθία Dim iFib As Integer 'αποθηκεύει την τρέχουσα τιμή της ακολουθίας Dim iFib_Next As Integer' αποθηκεύει την επόμενη τιμή της ακολουθίας Dim iStep As Integer 'αποθηκεύει το μέγεθος της επόμενης αύξησης' αρχικοποιεί τις μεταβλητές i και iFib_Next i = 1 iFib_Next = 0 'Ο βρόχος Do while θα εκτελείται έως ότου η τιμή του 'τρέχοντος αριθμού Fibonacci είναι μεγαλύτερη από 1000 Do while iFib_Next < 1000 If i = 1 Στη συνέχεια, «ειδική περίπτωση για το πρώτο στοιχείο iStep = 1 iFib = 0 Αλλιώς «αποθηκεύστε το μέγεθος της επόμενης αύξησης πριν αντικαταστήσετε «την τρέχουσα τιμή της ακολουθίας iStep = iFib iFib = iFib_Next End If «εκτυπώστε τον τρέχοντα αριθμό Fibonacci στη στήλη A του το ενεργό φύλλο εργασίας 'στη σειρά με ευρετήριο i Cells(i , 1).Τιμή = iFib 'υπολογίστε τον επόμενο αριθμό Fibonacci και αυξήστε τον δείκτη θέσης του στοιχείου κατά 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Στο συγκεκριμένο παράδειγμα, η συνθήκη iFib_Next < 1000 ελέγχεται στην αρχή του βρόχου. Επομένως, εάν η πρώτη τιμή iFib_Next Εάν υπήρχαν περισσότερα από 1000, τότε ο βρόχος δεν θα εκτελούνταν ποτέ.

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

Σχηματικά ένας τέτοιος κύκλος Κάντε ενώ με την προϋπόθεση που θα ελεγχθεί στο τέλος θα μοιάζει με αυτό:

Κάντε ... Loop while iFib_Next < 1000

Τίτλος «Do Μέχρι» στη Visual Basic

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

iRow = 1 Do Μέχρι IsEmpty(Cells(iRow, 1)) 'Η τιμή του τρέχοντος κελιού αποθηκεύεται στον πίνακα dCellValues ​​· dCellValues(iRow) = Cells(iRow, 1).Τιμή iRow = iRow + 1 Loop

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

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

Κάντε ... Βρόχο μέχρι να είναι κενό (Κελιά(iRow, 1))

Αφήστε μια απάντηση