Πίνακας περιεχομένων:
Βίντεο: macros και VB Script στο Excel. 2025
If-Then είναι η πιο σημαντική δομή ελέγχου της VBA. Θα χρησιμοποιήσετε πιθανώς αυτή την εντολή σε καθημερινή βάση. Χρησιμοποιήστε τη δομή If-Then όταν θέλετε να εκτελείτε μία ή περισσότερες δηλώσεις υπό όρους. Η προαιρετική ρήτρα Else, αν περιλαμβάνεται, σας επιτρέπει να εκτελέσετε μία ή περισσότερες δηλώσεις εάν η προϋπόθεση που δοκιμάζετε είναι true όχι . Εδώ είναι μια απλή διαδικασία CheckUser, recoded για να χρησιμοποιήσετε τη δομή If-Then-Else:
Sub CheckUser2 () UserName = InputBox ("Εισάγετε το όνομά σας") Εάν UserName = "Satya Nadella" Στη συνέχεια MsgBox ("Καλώς ορίσατε Satya …" "Συγνώμη. Μόνο η Satya Nadella μπορεί να τρέξει αυτό. "End If End End
If-Then παραδείγματα
Η ακόλουθη ρουτίνα δείχνει τη δομή If-Then χωρίς την προαιρετική ρήτρα Else:
Sub GreetMe () Εάν Time <0. 5 τότε MsgBox" Good Morning "End Sub
Η διαδικασία GreetMe χρησιμοποιεί τη λειτουργία χρόνου της VBA για να πάρει το χρόνο του συστήματος. Εάν ο τρέχων χρόνος είναι μικρότερος από. 5, η ρουτίνα εμφανίζει ένα φιλικό χαιρετισμό. Αν ο Χρόνος είναι μεγαλύτερος ή ίσος με. 5, η ρουτίνα τελειώνει και τίποτα δεν συμβαίνει.
Για να εμφανίσετε διαφορετικό χαιρετισμό εάν το Χρόνος είναι μεγαλύτερο ή ίσο με. 5, μπορείτε να προσθέσετε μια άλλη παράμετρο If-Then μετά την πρώτη:
Sub GreetMe2 () Εάν η ώρα = 0. 5 Στη συνέχεια MsgBox "Good Afternoon" End Sub
Σημειώστε ότι> = (μεγαλύτερο ή ίσο) χρησιμοποιείται για τη δεύτερη πρόταση If-Then. Αυτό εξασφαλίζει την κάλυψη ολόκληρης της ημέρας. Αν χρησιμοποιήθηκε> (μεγαλύτερο από), δεν θα εμφανιστεί μήνυμα αν αυτή η διαδικασία εκτελέστηκε ακριβώς στις 12:00 το μεσημέρι. Αυτό είναι πολύ απίθανο, αλλά με ένα σημαντικό πρόγραμμα όπως αυτό, δεν θέλετε να πάρετε οποιεσδήποτε πιθανότητες.
Ένα παράδειγμα If-Then-Else
Μια άλλη προσέγγιση στο προηγούμενο πρόβλημα χρησιμοποιεί την ρήτρα Else. Εδώ είναι η ίδια ρουτίνα που ανακατασκευάστηκε για να χρησιμοποιήσει τη δομή If-Then-Else:
Sub GreetMe3 () Αν Χρόνος <0. 5 τότε MsgBox "Good Morning" Else _ MsgBox "Good Afternoon" End Sub
ο χαρακτήρας συνέχισης (υπογράμμιση) χρησιμοποιείται στο προηγούμενο παράδειγμα. Η εντολή If-Then-Else είναι στην πραγματικότητα μία μόνο δήλωση. Το VBA παρέχει έναν ελαφρώς διαφορετικό τρόπο κωδικοποίησης If-Then-Else κατασκευών που χρησιμοποιούν μια εντολή End If. Επομένως, η διαδικασία GreetMe μπορεί να ξαναγραφεί ως
>Sub GreetMe4 () Εάν ο χρόνος <0. 5 τότε το MsgBox "Good Morning" Else MsgBox "Καλημέρα" Τέλος Αν τελειώσει
Στην πραγματικότητα, Αν μέρος και οποιουδήποτε αριθμού δηλώσεων κάτω από το μέρος Else. Αυτή η σύνταξη είναι ευκολότερη στην ανάγνωση και κάνει τις δηλώσεις μικρότερες.
Τι πρέπει να κάνετε εάν πρέπει να επεκτείνετε τη ρουτίνα του GreetMe για να χειριστείτε τρεις προϋποθέσεις: το πρωί, το απόγευμα και το βράδυ; Έχετε δύο επιλογές: Χρησιμοποιήστε τρεις δηλώσεις If-Then ή χρησιμοποιήστε μια ένθετη If-Then-Else δομή. Η τοποθέτηση σημαίνει την τοποθέτηση μιας δομής If-Then-Else σε μια άλλη δομή If-Then-Else. Η πρώτη προσέγγιση, χρησιμοποιώντας τρεις δηλώσεις If-Then, είναι απλούστερη:
Sub GreetMe5 () Dim Msg ως String If Time = 0. 5 και Time = 0. 75 Στη συνέχεια Msg = "Evening" MsgBox "Good" & Msg End Sub
Προστέθηκε μια νέα συστροφή με τη χρήση μιας μεταβλητής. Η μεταβλητή Msg έχει διαφορετική τιμή κειμένου, ανάλογα με την ώρα της ημέρας. Η δήλωση MsgBox εμφανίζει το χαιρετισμό: Καλημέρα, καλό απόγευμα ή καλό βράδυ.
Η ακόλουθη ρουτίνα εκτελεί την ίδια ενέργεια, αλλά χρησιμοποιεί μια δομή If-Then-End Αν δομή:
Sub GreetMe6 () Dim Msg Ως String Εάν Time = 0. 5 και Time = 0. 75 Then Msg = Τέλος Αν το MsgBox "Good" & Msg End Sub
Χρησιμοποιώντας ElseIf
Στα προηγούμενα παραδείγματα, εκτελούνται όλες οι εντολές στη ρουτίνα. Μια ελαφρώς πιο αποτελεσματική δομή θα βγαίνει από τη ρουτίνα μόλις διαπιστωθεί μια κατάσταση που είναι αλήθεια. Το πρωί, για παράδειγμα, η διαδικασία θα πρέπει να εμφανίζει το μήνυμα Good Morning και στη συνέχεια να βγει - χωρίς να αξιολογεί τις άλλες περιττές συνθήκες.
Με μια μικροσκοπική ρουτίνα όπως αυτή, δεν χρειάζεται να ανησυχείτε για την ταχύτητα εκτέλεσης. Αλλά για μεγαλύτερες εφαρμογές όπου η ταχύτητα είναι κρίσιμη, θα πρέπει να γνωρίζετε για μια άλλη σύνταξη για τη δομή If-Then.
Εδώ μπορείτε να ξαναγράψετε τη ρουτίνα GreetMe χρησιμοποιώντας αυτή τη σύνταξη:
Sub GreetMe7 () Dim Msg As String Αν Χρόνος = 0. 5 Και Χρόνος <0. 75 τότε Msg = "Απόγευμα" Else Msg = "Evening "End If MsgBox" Good "& Msg End Sub
Όταν μια προϋπόθεση είναι αληθής, η VBA εκτελεί τις δηλώσεις υπό όρους και τελειώνει η δομή If. Με άλλα λόγια, αυτή η διαδικασία είναι λίγο πιο αποτελεσματική από τα προηγούμενα παραδείγματα. Το συμβιβασμό είναι ότι ο κώδικας είναι πιο δύσκολο να κατανοηθεί.
Ένα άλλο παράδειγμα If-Then
Ακολουθεί ένα άλλο παράδειγμα που χρησιμοποιεί την απλή φόρμα της δομής If-Then. Αυτή η διαδικασία προτρέπει τον χρήστη για μια ποσότητα και στη συνέχεια εμφανίζει την κατάλληλη έκπτωση, με βάση την ποσότητα που εισάγει ο χρήστης:
Sub ShowDiscount () Dim Ποσότητα Μεγάλη Dim Έκπτωση Διπλή Ποσότητα = InputBox ("Enter Quantity" > 0 Στη συνέχεια Έκπτωση = 0. 1 Εάν Ποσότητα> = 25 Στη συνέχεια Έκπτωση = 0. 25 Εάν Ποσότητα> = 50 Στη συνέχεια Έκπτωση = 0. 2 Εάν Ποσότητα> = 75 Τότε Έκπτωση = 0. 25 MsgBox "Έκπτωση:
Παρατηρήστε ότι κάθε εντολή If-Then σε αυτή τη ρουτίνα εκτελείται και η τιμή για το Discount μπορεί να αλλάξει καθώς εκτελούνται οι δηλώσεις. Ωστόσο, η ρουτίνα εμφανίζει τελικά τη σωστή τιμή για την έκπτωση επειδή οι δηλώσεις If-Then είναι κατά σειρά ανόδου των τιμών έκπτωσης.
Η ακόλουθη διαδικασία εκτελεί τις ίδιες εργασίες χρησιμοποιώντας την εναλλακτική σύνταξη ElseIf. Σε αυτή την περίπτωση, η ρουτίνα τελειώνει αμέσως μετά την εκτέλεση των δηλώσεων για μια πραγματική κατάσταση:
Sub ShowDiscount2 () Dim Ποσότητα Μεγάλη Dim Έκπτωση ως Διπλή Ποσότητα = InputBox ("Εισαγωγή Ποσότητα:") τότε Έκπτωση = 0.1 Ποσότητα ElseIf> = 25 Και Ποσότητα <50 τότε Έκπτωση = 0. 15 Ποσότητα ElseIf> = 50 Και Ποσότητα <75 τότε Έκπτωση = 0. 2 ElseIf Ποσότητα> = 75 Τότε Έκπτωση = 0. 25 Τέλος Αν MsgBox "Έκπτωση: Έκπτωση End Sub
Αυτές οι πολλαπλές δομές If-Then είναι μάλλον δυσκίνητες. Μπορεί να θέλετε να χρησιμοποιήσετε τη δομή If-Then μόνο για απλές δυαδικές αποφάσεις.