Η δομή Select Case είναι μια χρήσιμη δομή VBA για αποφάσεις που αφορούν τρεις ή περισσότερες επιλογές στο Excel 2016 (αν και λειτουργεί επίσης με δύο επιλογές, παρέχοντας μια εναλλακτική στη δομή If-Then-Else).
Ένα παράδειγμα επιλογής περίπτωσης
Το ακόλουθο παράδειγμα δείχνει πώς να χρησιμοποιήσετε τη δομή Select Case:
Sub ShowDiscount3()
Ασθενής ποσότητα όσο διαρκεί
Ασθενής έκπτωση ως διπλή
Quantity = InputBox ("Εισαγάγετε την ποσότητα: ")
Επιλέξτε Case Quantity
Περίπτωση 0 έως 24
Έκπτωση = 0,1
Περίπτωση 25 έως 49
Έκπτωση = 0,15
Περίπτωση 50 έως 74
Έκπτωση = 0,2
Περίπτωση είναι >= 75
Έκπτωση = 0,25
Τέλος Επιλογή
MsgBox "Discount: " & Discount
End Sub
Σε αυτό το παράδειγμα, η μεταβλητή Quantity αξιολογείται. Ο τακτικός έλεγχος για τέσσερις διαφορετικές περιπτώσεις (0–24, 25–49, 50–74 και 75 ή μεγαλύτερες).
Οποιοσδήποτε αριθμός εντολών μπορεί να ακολουθήσει κάθε δήλωση Case, και όλες εκτελούνται εάν η υπόθεση είναι αληθής. Εάν χρησιμοποιείτε μόνο μία πρόταση, όπως σε αυτό το παράδειγμα, μπορείτε να βάλετε τη δήλωση στην ίδια γραμμή με τη λέξη-κλειδί Case, πριν από την άνω και κάτω τελεία — τον χαρακτήρα διαχωρισμού εντολών VBA. Αυτό κάνει τον κώδικα πιο συμπαγή και λίγο πιο σαφή. Δείτε πώς φαίνεται η ρουτίνα σε αυτήν τη μορφή:
Sub ShowDiscount4 ()
Ασθενής ποσότητα όσο διαρκεί
Ασθενής έκπτωση ως διπλή
Quantity = InputBox ("Εισαγάγετε την ποσότητα: ")
Επιλέξτε Case Quantity
Περίπτωση 0 έως 24: Έκπτωση = 0,1
Περίπτωση 25 έως 49: Έκπτωση = 0,15
Περίπτωση 50 έως 74: Έκπτωση = 0,2
Περίπτωση είναι >= 75: Έκπτωση = 0,25
Τέλος Επιλογή
MsgBox "Discount: " & Discount
End Sub
Όταν η VBA εκτελεί μια δομή Select Case, η δομή τερματίζεται μόλις η VBA βρει μια αληθινή περίπτωση και εκτελέσει τις εντολές για αυτήν την περίπτωση.
Ένα ένθετο παράδειγμα Select Case
Όπως αποδεικνύεται στο ακόλουθο παράδειγμα, μπορείτε να ενσωματώσετε δομές Select Case. Αυτή η ρουτίνα εξετάζει το ενεργό κελί και εμφανίζει ένα μήνυμα που περιγράφει τα περιεχόμενα του κελιού. Σημειώστε ότι η διαδικασία έχει τρεις δομές Select Case και η καθεμία έχει τη δική της πρόταση End Select:
Sub CheckCell()
Dim Msg As String
Επιλέξτε Case IsEmpty (ActiveCell)
Υπόθεση Αλήθεια
Msg = "είναι κενό."
Άλλη περίπτωση
Επιλέξτε Case ActiveCell.HasFormula
Υπόθεση Αλήθεια
Msg = "έχει τύπο"
Άλλη περίπτωση
Επιλέξτε υπόθεση IsNumeric (ActiveCell)
Υπόθεση Αλήθεια
Msg = "έχει αριθμό"
Άλλη περίπτωση
Msg = "έχει κείμενο"
Τέλος Επιλογή
Τέλος Επιλογή
Τέλος Επιλογή
MsgBox "Cell" & ActiveCell.Address & " " & Msg
End Sub
Η λογική πάει κάπως έτσι:
Μάθετε εάν το κελί είναι κενό.
Εάν δεν είναι κενό, δείτε αν περιέχει τύπο.
Εάν δεν υπάρχει τύπος, μάθετε αν περιέχει αριθμητική τιμή ή κείμενο.
Όταν τελειώνει η ρουτίνα, η μεταβλητή Msg περιέχει μια συμβολοσειρά που περιγράφει τα περιεχόμενα του κελιού. Η συνάρτηση MsgBox εμφανίζει αυτό το μήνυμα.
Ένα μήνυμα που εμφανίζεται με τη διαδικασία CheckCell.
Μπορείτε να ενσωματώσετε δομές Select Case τόσο βαθιά όσο χρειάζεται, αλλά βεβαιωθείτε ότι κάθε πρόταση Select Case έχει μια αντίστοιχη πρόταση End Select.
Εάν εξακολουθείτε να μην είστε πεπεισμένοι ότι αξίζει τον κόπο η εσοχή κώδικα, η προηγούμενη καταχώριση χρησιμεύει ως καλό παράδειγμα. Οι εσοχές πραγματικά για να κάνουν ξεκάθαρα τα επίπεδα φωλιάς. Ρίξτε μια ματιά στην ίδια διαδικασία χωρίς καμία εσοχή:
Sub CheckCell()
Dim Msg As String
Επιλέξτε Case IsEmpty (ActiveCell)
Υπόθεση Αλήθεια
Msg = "είναι κενό."
Άλλη περίπτωση
Επιλέξτε Case ActiveCell.HasFormula
Υπόθεση Αλήθεια
Msg = "έχει τύπο"
Άλλη περίπτωση
Επιλέξτε υπόθεση IsNumeric (ActiveCell)
Υπόθεση Αλήθεια
Msg = "έχει αριθμό"
Άλλη περίπτωση
Msg = "έχει κείμενο"
Τέλος Επιλογή
Τέλος Επιλογή
Τέλος Επιλογή
MsgBox "Cell" & ActiveCell.Address & " " & Msg
End Sub
Αρκετά ακατανόητο, ε;