VBA Select Case Statement

Στο VBA, το Επιλέξτε Δήλωση περίπτωσης είναι μια εναλλακτική λύση στο Αν-Στη συνέχεια δήλωση, επιτρέποντάς σας να ελέγξετε εάν πληρούνται οι προϋποθέσεις, εκτελώντας συγκεκριμένο κωδικό για κάθε συνθήκη. Η Επιλογή δήλωσης είναι προτιμότερη από τη δήλωση Εάν υπάρχει πολλαπλές προϋποθέσεις για επεξεργασία.

Επιλέξτε Παράδειγμα περίπτωσης

Αυτό το παράδειγμα ζητά από το χρήστη ένα YesNoCancel MessageBox και δοκιμάζει ποια επιλογή επέλεξε ο χρήστης:

1234567891011121314 Sub Select_Case_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Επιλέξτε Case nResultΠερίπτωση vb ΝαιMsgBox "Ναι"Περίπτωση vbNoMsgBox "Όχι"Περίπτωση vbΑκύρωσηMsgBox "Ακύρωση"Τέλος ΕπιλογήΤέλος υπο

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

12345678910111213 Sub If_Yes_No_Cancel ()Dim nResult As VbMsgBoxResultnResult = MsgBox ("…", vbYesNoCancel)Αν nResult = vbΝαι ΤότεMsgBox "Ναι"ElseIf nResult = vb Όχι ΤότεMsgBox "Όχι"ElseIf nResult = vbΑκύρωση ΤότεMsgBox "Ακύρωση"Τέλος εανΤέλος υπο

Σύνταξη Δήλωσης Περίπτωσης

Η σύνταξη Select Case Statement έχει ως εξής:

12345678910 Επιλέξτε Περίπτωση [Δοκιμή έκφρασης]Περίπτωση [Συνθήκη 1][Ενέργεια εάν ισχύει η συνθήκη 1]Υπόθεση [Συνθήκη 2][Ενέργεια εάν ισχύει η συνθήκη 2]Περίπτωση [Συνθήκη ν][Ενέργεια εάν η συνθήκη n είναι αληθής]Case Else[Ενέργεια εάν καμία δεν είναι αληθινή]Τέλος Επιλογή

Οπου:

[Δοκιμή έκφρασης] - Είναι η αξία για αξιολόγηση. Συνήθως αυτή είναι μια μεταβλητή.

[Ενέργεια εάν η συνθήκη n είναι αληθής] - Απλώς ο κώδικας θα εκτελεστεί εάν πληρείται η προϋπόθεση (ακριβώς όπως με μια δήλωση If)

[Συνθήκη ν] - Είναι η προϋπόθεση για δοκιμή. Υπάρχουν πολλοί διαφορετικοί τρόποι ελέγχου των συνθηκών. Θα τα συζητήσουμε παρακάτω.

Η δήλωση υπόθεσης θα εκτελέσει τον κωδικό για την ΠΡΩΤΗ συνθήκη που διαπιστώνεται ότι είναι ΑΛΗΘΙΝΟΣ. Εάν δεν πληρούται καμία προϋπόθεση, τότε δεν θα εκτελεστεί κωδικός, εκτός εάν προστεθεί η ρήτρα Αλλού.

Επιλέξτε Κριτήρια περίπτωσης

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

Ακριβής αντιστοίχιση - αριθμοί

Μπορείτε εύκολα να δοκιμάσετε για μια ακριβή αντιστοίχιση με μια δήλωση περίπτωσης:

1 Υπόθεση 10

ή προσθέστε κόμματα για να ελέγξετε για ακριβείς αντιστοιχίσεις με πολλαπλούς αριθμούς:

1 Υπόθεση 20, 30, 40
1234567891011121314 Sub ExactMatch_Numbers ()Dim n ως ακέραιοςn = CInt (InputBox ("…"))Επιλέξτε Περίπτωση nΥπόθεση 10Αν το n είναι 10, τότεΥπόθεση 20, 30, 40'Αν το n είναι 20/30/40 ΤότεCase Else'Αν το n δεν είναι 10/20/30/40 ΤότεΤέλος ΕπιλογήΤέλος υπο

Εύρος

Μπορείτε να δοκιμάσετε εάν ένας αριθμός εμπίπτει σε ένα εύρος όπως:

1 Υπόθεση 55 έως 74

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

12345678910111213141516171819202122 Sub Calc_Grade ()Dim Score ως ακέραιοςDim LetterGrade As StringΒαθμολογία = InputBox ("Εισαγωγή βαθμολογίας μαθητή")Επιλέξτε Βαθμολογία περίπτωσηςΥπόθεση 90 έως 100LetterGrade = "A"Υπόθεση 80 έως 90LetterGrade = "B"Υπόθεση 70 έως 80LetterGrade = "C"Υπόθεση 60 έως 70LetterGrade = "D"Case ElseLetterGrade = "F"Τέλος ΕπιλογήMsgBox "The Grade's Grade is:" & LetterGradeΤέλος υπο

Μπορείτε επίσης να δοκιμάσετε εύρη με το Case Is

Επιλέξτε Case Is

1234 Η υπόθεση είναι <55'Μην κάνεις τίποταΥπόθεση <= 74MsgBox "In Range"

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

Αυτή η διαδικασία θα υπολογίσει τον βαθμό ενός μαθητή χρησιμοποιώντας το Case Is αντί για Case To.

12345678910111213141516171819202122 Sub Select_Case_Is_Grade ()Dim Score ως ακέραιοςDim LetterGrade As StringΒαθμολογία = InputBox ("Εισαγωγή βαθμολογίας μαθητή")Επιλέξτε Βαθμολογία περίπτωσηςΥπόθεση Is> = 90LetterGrade = "A"Υπόθεση Is> = 80LetterGrade = "B"Υπόθεση Is> = 70LetterGrade = "C"Υπόθεση Is> = 60LetterGrade = "D"Case ElseLetterGrade = "F"Τέλος ΕπιλογήMsgBox "The Grade's Grade is:" & LetterGradeΤέλος υπο

Case Else

Μπορείτε να προσθέσετε το "Case Else" στο τέλος της δήλωσης περίπτωσης για να κάνετε κάτι εάν δεν πληρούνται οι προϋποθέσεις:

1 Case Else

Δείτε το τέλος του προηγούμενου παραδείγματος κώδικα για να δείτε πώς μπορεί να χρησιμοποιηθεί το Case Else.

Επιλέξτε Περίπτωση - Τελεστής κειμένου και παρόμοιας μορφής

Μέχρι στιγμής τα παραδείγματα Select Case έχουν λειτουργήσει μόνο με αριθμούς. Μπορείτε επίσης να χρησιμοποιήσετε δηλώσεις Select Case με κείμενο.

Ακριβής αντιστοίχιση - Κείμενο

Μπορείτε να δοκιμάσετε εάν η έκφραση ταιριάζει με μια ακριβή φράση όπως αυτή:

1 Θήκη "Παντζάρια"

Or χρησιμοποιήστε κόμματα για να ελέγξετε εάν η έκφραση ταιριάζει ακριβώς με περισσότερες από μία φράσεις:

1 Θήκη "Μήλο", "Μπανάνα", "Πορτοκαλί"

Το συνδυάζουμε μοιάζει με:

12345678910 Sub ExactMatch_Food ()Επιλέξτε Περιοχή Περίπτωσης ("a1"). ΤιμήΘήκη "Παντζάρια"MsgBox "Λαχανικό"Θήκη "Μήλο", "Μπανάνα", "Πορτοκαλί"MsgBox "Φρούτα"Τέλος ΕπιλογήΤέλος υπο

ΚΕΦΑΛΑΙΑ και πεζα

Από προεπιλογή, VBA είναι Case SensitiveΤο Αυτό σημαίνει ότι η VBA θεωρεί το "Κείμενο" διαφορετικό από το "κείμενο". Για να απενεργοποιήσετε την ευαισθησία πεζών-κεφαλαίων, προσθέστε την επιλογή Σύγκριση κειμένου στο επάνω μέρος της μονάδας σας:

1 Επιλογή Σύγκριση κειμένου

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

123456789101112 Επιλογή Σύγκριση κειμένουSub ExactMatch_Food ()Επιλέξτε Περιοχή Περίπτωσης ("a1"). ΤιμήΘήκη "Παντζάρια"MsgBox "Λαχανικό"Θήκη "Μήλο", "Μπανάνα", "Πορτοκαλί"MsgBox "Φρούτα"Τέλος ΕπιλογήΤέλος υπο

Case Like

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

Περίπτωση - Μια αποτυχημένη δοκιμή

Ο ακόλουθος κώδικας δείχνει ότι ο τελεστής Like δεν λειτουργεί με Select Case:

1234567891011 Sub Select_Case_Like_DoesnotWork ()Αμυδρή λέξη ως συμβολοσειράword = "COCOA"Επιλέξτε ΠερίπτωσηΠερίπτωση λέξης2 Όπως "*C*C*"MsgBox "Καλό"Case ElseMsgBox "Δεν είναι καλό"Τέλος ΕπιλογήΤέλος υπο

Case Like - The Correct Way

Ωστόσο, μπορούμε να προσθέσουμε στην TRUE έκφραση για να λειτουργήσει η Επιλεγμένη δήλωση με τον τελεστή Like

1234567891011 Sub Select_Case_Like_CorrectWay ()Αμυδρή λέξη ως συμβολοσειράword = "COCOA"Επιλέξτε Case TrueΠερίπτωση όπως "*C*C*"MsgBox "Καλό"Case ElseMsgBox "Δεν είναι καλό"Τέλος ΕπιλογήΤέλος υπο

Θήκη - Κολόν

Όταν χρησιμοποιείτε μια δήλωση περίπτωσης, μπορείτε να προσθέσετε όσες γραμμές κώδικα θέλετε να εκτελούνται με κάθε συνθήκη. Ωστόσο, εάν χρειάζεται μόνο να εκτελέσετε μία γραμμή κώδικα. Μπορείτε να χρησιμοποιήσετε ένα Colon (:) για να γράψετε τα πάντα στην ίδια γραμμή.

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

1234567891011121314151617 Sub Calc_Grade_colon ()Dim Score ως ακέραιοςDim LetterGrade As StringΒαθμολογία = InputBox ("Εισαγωγή βαθμολογίας μαθητή")Επιλέξτε Βαθμολογία περίπτωσηςΠερίπτωση 90 έως 100: LetterGrade = "A"Περίπτωση 80 έως 90: LetterGrade = "B"Υπόθεση 70 έως 80: LetterGrade = "C"Περίπτωση 60 έως 70: LetterGrade = "D"Περίπτωση: LetterGrade = "F"Τέλος ΕπιλογήMsgBox "The Grade's Grade is:" & LetterGradeΤέλος υπο

Επιλογή περίπτωσης - Και / ή - Πολλαπλές συνθήκες

Μπορείτε να χρησιμοποιήσετε το χειριστή And / to για να δοκιμάσετε επιπλέον κριτήρια μαζί με την επιλογή περίπτωσης.

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

123456789101112131415161718 Sub NestedSelectCase ()Dim sex As StringDim age As Integerφύλο = "αρσενικό" ή θηλυκόηλικία = 15Επιλέξτε Περίπτωση ηλικίαςΗ υπόθεση είναι <20 Και το σεξ = "αρσενικό"Msgbox "Αρσενικό κάτω των 20 ετών"Η υπόθεση είναι <20 Και το σεξ = "θηλυκό"Msgbox "Γυναίκα κάτω των 20 ετών"Η υπόθεση είναι> = 20 Και το σεξ = "αρσενικό"Msgbox "Αρσενικό άνω των 20 ετών"Η υπόθεση είναι> = 20 Και το σεξ = "θηλυκό"Msgbox "Γυναίκα άνω των 20 ετών"Τέλος ΕπιλογήΤέλος υπο

Ένθετες Καταστάσεις Περιπτώσεων

Ακριβώς όπως το If Δηλώσεις, μπορείτε να τοποθετήσετε τις Καταστάσεις Περίπτωσης μεταξύ τους:

123456789101112131415161718192021222324 Sub NestedSelectCase ()Dim sex As StringDim age As Integerφύλο = "αρσενικό" ή θηλυκόηλικία = 15Επιλέξτε Περίπτωση ηλικίαςΗ υπόθεση είναι <20Επιλέξτε υπόθεση φύλουΠερίπτωση "αρσενικό"MsgBox "Αρσενικό κάτω των 20 ετών"Περίπτωση "θηλυκό"MsgBox "Γυναίκα κάτω των 20 ετών"Τέλος ΕπιλογήΗ υπόθεση είναι> = 20 Και το σεξ = "θηλυκό"Επιλέξτε υπόθεση φύλουΠερίπτωση "αρσενικό"MsgBox "Αρσενικό άνω των 20"Περίπτωση "θηλυκό"MsgBox "Γυναίκα άνω των 20"Τέλος ΕπιλογήΤέλος ΕπιλογήΤέλος υπο

Δήλωση περίπτωσης έναντι της Δήλωσης

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

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

12345 Αν Όνομα = "Προϋπολογισμός" Name Όνομα = "Πρόβλεψη" Name Όνομα = "Ακολουθία12" _ _Όνομα = "Flex" Name Όνομα = "OtherRatios" Name Όνομα = "Σύγκριση" _ _Όνομα = "BudReview" Name Όνομα = "P & L_Review" Name Όνομα = "Άλλο" Τότε'Κάνε κάτιΤέλος εαν

Ακολουθεί ο ίδιος κώδικας με τη χρήση επιλογής δήλωσης:

12345 Επιλέξτε Όνομα περίπτωσηςΥπόθεση "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Σύγκριση", "BudReview", "P & L_Review", "Other"'Κάνε κάτιΤέλος Επιλογή

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

VBA Select Case Παραδείγματα

Παράδειγμα 1. Δήλωση περίπτωσης Συνάρτηση καθορισμένη από το χρήστη (UDF)

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

12345678910111213141516 Λειτουργία GetGrade (Βαθμολογία ως ακέραιος) Ως συμβολοσειράΕπιλέξτε Βαθμολογία περίπτωσηςΥπόθεση 90 έως 100GetGrade = "Α"Υπόθεση 80 έως 90GetGrade = "Β"Υπόθεση 70 έως 80GetGrade = "C"Υπόθεση 60 έως 70GetGrade = "D"Case ElseGetGrade = "F"Τέλος ΕπιλογήΛειτουργία Τέλους

Τώρα μπορούμε να χρησιμοποιήσουμε τη λειτουργία GetGrade στο φύλλο εργασίας του Excel για να υπολογίσουμε γρήγορα τους βαθμούς των μαθητών:

Παράδειγμα 2. Όνομα φύλλου δοκιμής / Δήλωση περίπτωσης βρόχου

Αυτός ο κώδικας θα βολέψει όλα τα φύλλα εργασίας σε ένα βιβλίο εργασίας, UnProtecting φύλλα που πληρούν ορισμένα κριτήρια:

123456789101112 Sub Case_UnProtectSheet ()Dim ws Ως φύλλο εργασίαςΓια κάθε ws σε φύλλα εργασίαςΕπιλέξτε Περίπτωση ws.Name 'Λίστα όλων των φύλλων με ΑναλογίεςΥπόθεση "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _"Σύγκριση", "BudReview", "P & L_Review", "Other"ws.ΑπροστάτευτοςΤέλος ΕπιλογήΕπόμενο wsΤέλος υπο

Παράδειγμα 3. Επιλέξτε Περίπτωση - Τιμή κελιού

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

12345678910111213141516 Sub TestCellValue ()Dim cell As RangeΟρισμός κελιού = Εύρος ("C1")Επιλέξτε Cell cell.ValueΥπόθεση 90 έως 100cell.Offset (0, 1) = "A"Υπόθεση 80 έως 90cell.Offset (0, 1) = "B"Υπόθεση 70 έως 80cell.Offset (0, 1) = "C"Υπόθεση 60 έως 80cell.Offset (0, 1) = "D"Τέλος ΕπιλογήΤέλος υπο

Παράδειγμα 4. Επιλέξτε Περίπτωση - Ημερομηνίες

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

123456789101112131415161718 Sub TestDate ()MsgBox GetQuarter (CDate ("7/20/2019"))Τέλος υποΛειτουργία GetQuarter (dt Ως ημερομηνία) Ως ακέραιοςDim sht Ως φύλλο εργασίαςΕπιλέξτε Περίπτωση dtCase CDate ("01/01/2019") To CDate ("03/31/2019")GetQuarter = 1Case CDate ("04/01/2019") To CDate ("06/30/2019")GetQuarter = 2Case CDate ("07/01/2019") To CDate ("09/30/2019")GetQuarter = 3Case CDate ("10/01/2019") To CDate ("31/12/2019")GetQuarter = 4Τέλος ΕπιλογήΛειτουργία Τέλους

Επειδή είναι συνάρτηση, μπορείτε να το χρησιμοποιήσετε ως συνάρτηση στο Excel:

Πρώην. 5 Ελέγξτε αν ο αριθμός είναι μονός ή ζυγός

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

123456789101112 Sub CheckOddEven ()Dim n ως ακέραιοςn = InputBox ("Εισαγάγετε έναν αριθμό")Επιλέξτε Περίπτωση n Mod 2Περίπτωση 0MsgBox "Ο αριθμός είναι ζυγός."Περίπτωση 1MsgBox "Ο αριθμός είναι περιττός."Τέλος ΕπιλογήΤέλος υπο

Πρώην. 6 Δοκιμάστε αν η ημερομηνία είναι την εβδομάδα ή το Σαββατοκύριακο

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

123456789101112131415161718192021 Sub CheckWeekDay ()Dim dt Ως ημερομηνίαdt = CDate ("1/1/2020")Επιλέξτε Case Weekday (dt)Υπόθεση vbΔευτέραMsgBox "Είναι Δευτέρα"Υπόθεση vb ΤρίτηMsgBox "Είναι Τρίτη"Υπόθεση vb ΤετάρτηMsgBox "Είναι Τετάρτη"Υπόθεση vb ΠέμπτηMsgBox "Είναι Πέμπτη"Υπόθεση vbFridayMsgBox "Είναι Παρασκευή"Υπόθεση vbΣάββατοMsgBox "Είναι Σάββατο"Υπόθεση vbSundayMsgBox "Είναι Κυριακή"Τέλος ΕπιλογήΤέλος υπο
123456789101112 Sub CheckWeekend ()Dim dt Ως ημερομηνίαdt = CDate ("1/1/2020")Επιλέξτε Case Weekday (dt)Υπόθεση vbΣάββατο, vbSundayMsgBox "Είναι Σαββατοκύριακο"Case ElseMsgBox "Δεν είναι Σαββατοκύριακο"Τέλος ΕπιλογήΤέλος υπο

VBA Select Case in Access

Όλα τα παραπάνω παραδείγματα λειτουργούν ακριβώς το ίδιο στην Access VBA όπως στο Excel VBA.

123456789101112131415161718192021 Sub TestCellValue ()Dim dbs ως βάση δεδομένωνDim rst ως RecordSetΟρίστε dbs = CurrentDBΡύθμιση rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Με πρώτη.MoveFirst.ΕπεξεργασίαSelect Case rst.Fields ("Πόλη")Υπόθεση "Austin".γρ. πεδία ("TelCode") = "512"Υπόθεση "Σικάγο".γρ. πεδία ("TelCode") = "312"Υπόθεση "New YorK".γρ. πεδία ("TelCode") = "1212"Θήκη "San Fransisco".γρ. πεδία ("TelCode") = "415"Τέλος Επιλογή.ΕκσυγχρονίζωΤέλος μεΤέλος Sus

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

wave wave wave wave wave