vba variables option explicit vba
Αυτό το σεμινάριο εξηγεί τον τρόπο δήλωσης και χρήσης μεταβλητών VBA. Μάθετε επίσης για την επιλογή ρητή, μεταβλητή εμβέλεια, στατικές και σταθερές μεταβλητές:
Σε έναν υπολογιστή, όλες οι τιμές δεδομένων αποθηκεύονται σε μνήμη ή χώρο αποθήκευσης υπολογιστή. Για να αποκτήσετε πρόσβαση σε αυτές τις τιμές, πρέπει να καθορίσετε ένα όνομα που σχετίζεται με αυτήν την τιμή, το οποίο ονομάζεται μεταβλητή σε γλώσσες προγραμματισμού.
Σε αυτό το σεμινάριο, θα μάθουμε πώς να δηλώνουμε και να ορίζουμε μια μεταβλητή μαζί με τους διάφορους τύπους μεταβλητών πεδίων και επίσης να διερευνούμε λεπτομερώς τις Στατικές και τις Σταθερές μεταβλητές.
=> Δείτε εδώ για να δείτε A-Z Of VBA Training Tutorials
Τι θα μάθετε:
- Μεταβλητές VBA
- συμπέρασμα
Μεταβλητές VBA
Μεταβλητές είναι σαν σύμβολα κράτησης θέσης για τις τιμές στον χώρο αποθήκευσης υπολογιστών. Οι μεταβλητές μπορούν να διατηρούν διαφορετικές ποικιλίες τιμών και αυτές οι τιμές μπορούν να αλλάξουν κατά την εκτέλεση του κώδικα.
Κάθε μεταβλητή θα έχει ένα όνομα που χρησιμοποιείται για πρόσβαση στην τιμή. Η VBA έχει ορισμένους περιορισμούς όσον αφορά την επιλογή ονόματος.
Παρατίθεται παρακάτω η λίστα των περιορισμών:
- Το όνομα της μεταβλητής σας δεν μπορεί να υπερβαίνει τους 255 χαρακτήρες.
- Ένα όνομα μεταβλητής δεν μπορεί να ξεκινά με έναν αριθμό.
- Δεν μπορείτε να ξεκινήσετε με ειδικούς χαρακτήρες όπως!, @, &,., # Ή δεν μπορείτε να έχετε κενά.
- Οι λέξεις-κλειδιά δεν θεωρούνται ως μεταβλητό όνομα.
Ο μεταγλωττιστής θα εμφανίσει σφάλμα εάν παραβιάσετε αυτούς τους περιορισμούς
Παράδειγμα:
Έγκυρα μεταβλητά ονόματα: varName, Result12, First_Number
Μη έγκυρα ονόματα μεταβλητών: 123abc, #number, Sub, abc.123
Πρώτος αριθμός (Το διάστημα δεν επιτρέπεται μεταξύ λέξεων)
Δήλωση μεταβλητής VBA
Πρέπει να χρησιμοποιήσουμε το Κανένας λέξη-κλειδί για να δηλώσει μια μεταβλητή. Υπάρχουν 2 ενότητες κατά τη δήλωση μιας μεταβλητής. 1αγείναι η μεταβλητή όνομα και 2αρείναι ο τύπος τιμής που θα αποθηκευτεί στη μεταβλητή που ονομάζεται Τύπος δεδομένων.
Σύνταξη: Dim VariableName As DataType
Παράδειγμα:
- Dim MyAge ως ακέραιος
- Dim My_Percentage ως διπλό
- Αχνό πλήρες όνομα ως συμβολοσειρά
Εδώ λέτε ρητά στον μεταγλωττιστή ότι η μεταβλητή μου θα πρέπει να αποθηκεύει μόνο αυτούς τους τύπους δεδομένων και το VBA θα φροντίσει να ρίξει ένα σφάλμα αναντιστοιχίας τύπου μεταγλωττιστή όταν μια τιμή που ορίζεται για τη μεταβλητή δεν ταιριάζει με τον τύπο δεδομένων.
Παράδειγμα:
Sub example1() Dim Total_Marks As Integer Total_Marks = “” MsgBox Total_Marks End Sub
Αλλά αν δεν είστε σίγουροι για τον τύπο δεδομένων της μεταβλητής, τότε το VBA σας επιτρέπει να παραλείψετε τον τύπο δεδομένων. Η παρακάτω σύνταξη ισχύει επίσης.
Dim VariableName
Όταν δεν δηλώνετε τον τύπο δεδομένων της μεταβλητής, τότε το VBA το αντιμετωπίζει ως τύπο παραλλαγής δεδομένων και είναι υποχρεωμένο να δεχτεί οποιονδήποτε τύπο ακέραιου αριθμού δεδομένων όπως ακέραιο, συμβολοσειρά, βιβλίο εργασίας κ.λπ. Στο ίδιο πρόγραμμα, το Οι μεταβλητές παραλλαγής μπορούν να δεχτούν τιμή συμβολοσειράς, ακέραια τιμή και οποιονδήποτε άλλο τύπο επίσης.
Sub VarientVariable() Dim Total_Marks Total_Marks = '' MsgBox Total_Marks Total_Marks = 544.33 MsgBox Total_Marks Total_Marks = 522 MsgBox Total_Marks End Sub
Καθώς το Total_Marks είναι μια μεταβλητή παραλλαγής, σε αντίθεση με τον προηγούμενο κώδικα, ο μεταγλωττιστής δεν θα εμφανίσει κανένα σφάλμα όπως φαίνεται παρακάτω.
Σημείωση: Να θυμάστε ότι το VBA σάς επιτρέπει να χρησιμοποιείτε μια μεταβλητή χωρίς να την δηλώνετε.
Το παρακάτω παράδειγμα κώδικα δίνει επίσης ένα σωστό αποτέλεσμα. Σε αυτήν την περίπτωση, το VBA αντιμετωπίζει αυτόματα τη μεταβλητή ως τύπο δεδομένων παραλλαγής. Αυτό ονομάζεται σιωπηρή δήλωση.
Sub VariantVariable() Total_Marks = 444 MsgBox Total_Marks End Sub
Πλεονεκτήματα της δήλωσης μιας μεταβλητής
- Εύκολος εντοπισμός σφαλμάτων: Είναι καλή πρακτική να δηλώνετε μια μεταβλητή πριν τη χρησιμοποιήσετε. Μας δίνει μια προηγούμενη κατανόηση των σφαλμάτων, όπως αναντιστοιχία τύπου και σφάλματα τυπογραφίας, μειώνοντας έτσι τον κίνδυνο απόκλισης από τη λογική του προγράμματος.
- Καλύτερη αναγνωσιμότητα: Ως ομάδα, θα υπάρχουν πολλοί άνθρωποι που εξετάζουν τον κώδικα και η δήλωση μιας μεταβλητής θα βοηθήσει όλους με τον τύπο τιμών που αναμένεται να λάβει η μεταβλητή και επίσης θα βοηθήσουν τους χρήστες να εισαγάγουν τις κατάλληλες τιμές εισόδου κατά την εκτέλεση του προγράμματος.
- Χώρος αποθήκευσης: Εάν δεν δηλώνετε μια μεταβλητή, τότε το VBA την αντιμετωπίζει ως έναν τύπο παραλλαγής δεδομένων που καταλαμβάνει τον μεγαλύτερο χώρο στη μνήμη (16 bytes έως 22 bytes) σε σύγκριση με άλλους τύπους δεδομένων. Για παράδειγμα, εάν χρησιμοποιείτε μια μεταβλητή τύπου Byte που διαρκεί μόλις 1 byte και αν δεν δηλώσετε, τότε το VBA θα καταλήξει να δεσμεύσει χώρο 16 byte, σπαταλώντας έτσι τη μνήμη.
Επιλογή ρητή
Για να διασφαλίσουμε ότι όλες οι μεταβλητές δηλώνονται ρητά, πρέπει να χρησιμοποιήσουμε τη δήλωση Option Explicit πριν τις χρησιμοποιήσουμε. Θα πρέπει να χρησιμοποιείται στην αρχή οποιασδήποτε διαδικασίας σε αυτήν την ενότητα.
Ας δούμε ένα παράδειγμα που δεν χρησιμοποιεί το Option Explicit Statement.
Sub example3() Dim First_name As String First_name = ' abs' MsgBox Firt_Name End Sub
Εκτελέστε τον κωδικό (Πατήστε F5 ή κουμπί εκτέλεσης στη γραμμή εργαλείων) και θα καταλήξετε να λάβετε ένα κενό πλαίσιο μηνύματος.
Ακόμα κι αν έχετε δηλώσει τη μεταβλητή, καταλήξατε σε ένα κενό πλαίσιο αποτελεσμάτων λόγω του τυπογραφικού λάθους στο Msgbox Firt_Name. Το Option Explicit θα μας βοηθήσει στην εξάλειψη τέτοιων σφαλμάτων.
Ας επαναλάβουμε τον ίδιο κώδικα χρησιμοποιώντας το Option Explicit. Εισαγάγετε Option Explicit πριν ξεκινήσει η διαδικασία.
Option Explicit Sub VarientVariable() Dim First_name As String First_name = ' abs' MsgBox Firt_Name End Sub
Τώρα, εάν εκτελέσετε τον κωδικό (Πιέστε το πλήκτρο F5 ή Εκτέλεση στη γραμμή εργαλείων) και θα καταλήξετε να λάβετε ένα σφάλμα μεταγλωττιστή.
Μπορείτε να προσθέσετε το VBA Επιλογή ρητή αυτομάτως.
Στον Επεξεργαστή VB, Μεταβείτε στα Εργαλεία -> Επιλογές -> Επιλέξτε 'Απαίτηση δήλωσης μεταβλητής'.
Τώρα Επιλογή ρητή θα προστίθεται αυτόματα κάθε φορά που εισάγετε μια νέα ενότητα ή καταγράφετε μια νέα μακροεντολή.
Σημείωση: Η επιλογή Explicit δεν θα προστεθεί στον υπάρχοντα κώδικα VBA. Εάν χρειαστεί, πρέπει να το προσθέσετε χειροκίνητα.
Αντιστοίχιση τιμής σε μεταβλητή
Οι τιμές μπορούν να αντιστοιχιστούν σε μεταβλητές χρησιμοποιώντας ίσο με το σύμβολο (=). Εάν αναφέρεστε σε ένα κελί στο Excel, τότε πρέπει να χρησιμοποιήσετε τις λειτουργίες Range.
Ανατρέξτε στον παρακάτω κώδικα.
Sub varValue() Dim var1 As Integer var1 = 10 Range('C1:C14').Value = var1 MsgBox var1 End Sub
Στο παραπάνω παράδειγμα, το var1 είναι μια μεταβλητή που αποθηκεύει την τιμή 10 απευθείας χρησιμοποιώντας το (=) και η συνάρτηση Range θα βοηθήσει στην εισαγωγή της τιμής var1 που είναι 10 στο κελί Excel C1 έως C14.
Πεδίο εφαρμογής μιας μεταβλητής
Κάθε μεταβλητή σε ένα πρόγραμμα θα έχει καθορισμένο πεδίο εφαρμογής. Αυτό το εύρος λέει στο πρόγραμμα τις περιοχές στις οποίες η μεταβλητή είναι ορατή, δηλαδή τη λειτουργική μονάδα ή τη λειτουργία που μπορεί ή δεν μπορεί να χρησιμοποιήσει τη μεταβλητή.
Το VBA έχει 3 τύπους πεδίου που ορίζονται για τη μεταβλητή.
- Πεδίο επιπέδου διαδικασίας
- Πεδίο επιπέδου ιδιωτικής ενότητας
- Πεδίο επιπέδου δημόσιας ενότητας
Πεδίο εφαρμογής σε επίπεδο διαδικασίας
Οι μεταβλητές που ορίζονται σε μια διαδικασία, δηλαδή στο Sub ή στη συνάρτηση, θα μπορούν να τις χρησιμοποιούν μόνο. Αυτά δεν είναι ορατά σε καμία άλλη διαδικασία.
Παράδειγμα:
Option Explicit Sub ProcScope() Dim msg As String vartext = 'Varible is visible only inside this Sub' MsgBox vartext End Sub Sub VarNotVisible() MsgBox vartext End Sub
Όταν εκτελέσετε τον παραπάνω κώδικα, για το πρώτο Sub το msgbox θα επιστρέψει ένα σωστό αποτέλεσμα, αλλά για το δεύτερο Sub, θα εμφανιστεί ένα σφάλμα Compiler. Επειδή η μεταβλητή κορυφής είναι ορατή μόνο για το 1αγυπο και όχι για το 2αρ. Καθώς έχουμε χρησιμοποιήσει το Option Explicit, θα λάβουμε ένα σφάλμα μεταγλωττιστή επειδή δεν ορίζουμε μεταβλητές στο 2αρυπο.


Πεδίο επιπέδου ιδιωτικής ενότητας
Αυτές οι μεταβλητές είναι διαθέσιμες σε όλες τις διαδικασίες της καθορισμένης ενότητας. Από προεπιλογή, οι μεταβλητές δηλώνονται με το Κανένας καλύπτονται ως ιδιωτικά. Συνιστάται όμως να προσθέτετε ιδιωτικό για καλύτερη αναγνωσιμότητα.
Ας εξετάσουμε το ίδιο παράδειγμα, αλλά θα δηλώσουμε τη μεταβλητή εκτός της διαδικασίας.
Option Explicit Private vartext As String ‘ Dim vartext As String can also be used Sub PrivateScope() vartext = 'Varible is visible to all procedures' MsgBox vartext, ,”Result from Sub1” End Sub Sub VarIsVisible() MsgBox vartext, ,”Result from Sub2” End Sub
Μετά την εκτέλεση, θα δείτε ότι και οι δύο διαδικασίες θα επιστρέψουν τα σωστά αποτελέσματα χωρίς κανένα σφάλμα. Για μια σαφή κατανόηση, έχουμε προσθέσει τον σωστό τίτλο στο msgbox.
Πεδίο επιπέδου δημόσιας ενότητας
Αυτοί οι τύποι μεταβλητών είναι ορατοί σε όλες τις διαδικασίες και σε όλες τις ενότητες ενός έργου. Εισαγάγετε 2 ενότητες. (Κάντε δεξί κλικ σε ένα φύλλο και Εισαγάγετε -> ενότητες).
Εισαγάγετε τον παρακάτω κωδικό σε μία ενότητα.
Option Explicit Public vartext As String Sub PrivateScope() vartext = 'Varible is visible to all modules' MsgBoxvartext, , 'Result from Sub1' End Sub
Εισαγάγετε τον παρακάτω κωδικό στη 2η ενότητα.
Option Explicit Sub VarIsVisible() MsgBoxvartext, , 'Result from Sub2' End Sub
Τα αποτελέσματα φαίνονται παρακάτω
Ας εξετάσουμε ένα πρακτικό παράδειγμα και κατανοήστε καλύτερα όλο το εύρος.
Επισυνάπτεται το αρχείο αναφοράς για τον παραπάνω κώδικα.
Στατική μεταβλητή
Συνήθως, η τιμή της μεταβλητής διατηρείται μόνο από την κλήση διαδικασίας έως το τέλος της διαδικασίας. Δεν διατηρεί την τιμή μόλις ολοκληρωθεί η εκτέλεση της διαδικασίας.
Για παράδειγμα , στον παραπάνω κώδικα, η τιμή του firstNo και secondNo αφαιρείται μόλις τελειώσει η διαδικασία, την επόμενη φορά εάν εκτελέσετε τον κώδικα, το firstNo και το secondNo λαμβάνει την ίδια τιμή όπως ορίζεται στον κώδικα.
Αλλά οι στατικές μεταβλητές είναι εκείνες που θα διατηρήσουν την τιμή της μεταβλητής ακόμη και μετά την εκτέλεση. Μια στατική μεταβλητή επιτρέπεται μόνο μέσα σε ένα δευτερεύον ή μια συνάρτηση.
Εξετάστε τον παρακάτω κώδικα με μια μη στατική μεταβλητή.
Option Explicit Sub staticVariable() Dim count As Integer count = count + 1 Debug.Print count End Sub
Κάθε φορά που πατάτε το F5, θα έχετε μόνο 1 αποτέλεσμα.
Τώρα ας δηλώσουμε τη μεταβλητή ως στατική.
Option Explicit Sub staticVariable() Static count As Integer count = count + 1 Debug.Print count End Sub
Κάθε φορά που εκτελείτε τον κωδικό (F5) Το αποτέλεσμα θα έχει αυξημένη τιμή για μέτρηση όπως 1,2,3 κλπ καθώς η Στατική μεταβλητή διατηρεί την τιμή της.
Σημείωση: Η στατική μεταβλητή θα διατηρήσει την τιμή μέχρι να πατήσετε το κουμπί Reset στη γραμμή εργαλείων ή να κλείσετε το βιβλίο εργασίας.
Σταθερή μεταβλητή
Όπως υποδηλώνει το όνομα, η τιμή αυτών των μεταβλητών δεν μπορεί να αλλάξει κατά την εκτέλεση του προγράμματος. Μόλις δηλωθεί μια σταθερά, δεν μπορεί να τροποποιηθεί ή να αντιστοιχιστεί μια νέα τιμή.
Η δήλωση σταθεράς μπορεί να γίνει μέσα σε μια διαδικασία ή σε επίπεδο ενότητας (πάνω από όλες τις διαδικασίες).
Option Explicit Sub constantVariable() Const SpeedLimitOfcar As String = '90kmph' Dim myCarSpeed As String myCarSpeed = '70kmph' If myCarSpeed > SpeedLimitOfcar Then MsgBox 'overspeed: Reduce the speed' Else MsgBox 'Within the limit: Always drive below : ' & SpeedLimitOfcar End If End Sub
Εάν επιχειρήσετε να αλλάξετε τη σταθερή τιμή, τότε θα εμφανιστεί ένα σφάλμα μεταγλώττισης.
Option Explicit Sub ChangeConstantVariable() Const SpeedLimitOfcar As Integer = 90 SpeedLimitOfcar = SpeedLimitOfcar + 10 MsgBox SpeedLimitOfcar End Sub
Συχνές ερωτήσεις
Ε # 1) Πώς να ορίσετε μια δημόσια μεταβλητή στο VBA;
Απάντηση: Δημόσιες μεταβλητές δηλώνονται πριν από την έναρξη μιας διαδικασίας. Η δημόσια λέξη-κλειδί πρέπει να χρησιμοποιείται κατά τη δήλωση μιας μεταβλητής.
Δημόσιο σύνολο_Μάρκες ως ακέραιος
Q # 2) Τι είδους μεταβλητές δεν μπορούν να δηλωθούν εκτός της διαδικασίας;
Απάντηση: Οι στατικές μεταβλητές δεν μπορούν να δηλωθούν εκτός της διαδικασίας στο VBA και θα λάβετε ένα σφάλμα μεταγλώττισης.
Q # 3) Πώς να δηλώσετε μια μεταβλητή στο VBA;
Απάντηση: Η λέξη-κλειδί Dim χρησιμοποιείται για να δηλώσει μια μεταβλητή. Το Dim σημαίνει Dimension.
Dim variablename As Datatype
Q # 4) Πώς να εκχωρήσετε μια μεταβλητή τιμή σε ένα κελί στο VBA;
Απάντηση: Μπορείτε να χρησιμοποιήσετε τη λειτουργία Range.
var1 = 10
Εύρος ('C1: C14'). Τιμή = var1
Q # 5) Ποιες είναι οι μεταβλητές στο VBA;
Απάντηση: Οι μεταβλητές είναι σαν σύμβολα κράτησης θέσης για τις τιμές στον χώρο αποθήκευσης υπολογιστών. Οι μεταβλητές μπορούν να διατηρούν διαφορετικές ποικιλίες τιμών και αυτές οι τιμές μπορούν να αλλάξουν κατά την εκτέλεση του κώδικα. Κάθε μεταβλητή πρέπει να έχει ένα όνομα, χρησιμοποιώντας το όνομα της μεταβλητής, ο υπολογιστής θα πάρει την τιμή που έχει εκχωρηθεί για αυτήν τη μεταβλητή.
Q # 6) Πρέπει να δηλώσετε μια μεταβλητή στο VBA;
Απάντηση: Η δήλωση είναι προαιρετική στο VBA. Εάν δεν δηλώνετε μια μεταβλητή και την χρησιμοποιείτε απευθείας στη διαδικασία, τότε ονομάζεται μια έμμεση δήλωση. Για την αποφυγή σφαλμάτων στον κώδικα και για καλύτερη αναγνωσιμότητα, συνιστάται να δηλώνετε ρητά μια μεταβλητή.
Q # 7) Πώς μπορώ να δηλώσω πολλές μεταβλητές στο VBA;
Απάντηση: Μπορείτε να δηλώσετε πολλές μεταβλητές σε μία δήλωση δήλωσης. Απλά πρέπει να καθορίσετε το όνομα της μεταβλητής που διαχωρίζεται με κόμματα σε έναν όρο As.
Οι μέθοδοι python που χρησιμοποιούνται για την προσθήκη στοιχείων σε μια λίστα ή για τη διαγραφή τους από μια λίστα καλούνται
Dim FirstNo, SecondNo As Integer
Μπορείτε επίσης να καθορίσετε διαφορετικές μεταβλητές σε μία δήλωση δήλωσης. Κάθε μεταβλητή θα λαμβάνει τον τύπο δεδομένων που ορίζεται στον όρο As μετά το μέρος του ονόματος της μεταβλητής.
Dim a, b As Single, c, d As Double, e As Integer, f As String
Ε # 8) Πότε δεν θα υπήρχε διαφορά μεταξύ αμυδρό και ιδιωτικού στο VBA;
Απάντηση: Εάν δηλώνετε μια ιδιωτική εμβέλεια σε επίπεδο λειτουργικής μονάδας, τότε δεν υπάρχει διαφορά μεταξύ της δήλωσης μιας μεταβλητής ως αμυδρό ή ιδιωτικής. Από προεπιλογή, οι μεταβλητές δηλώνονται με το Κανένας καλύπτονται ως ιδιωτικά. Συνιστάται όμως να προσθέτετε ιδιωτικό για καλύτερη αναγνωσιμότητα.
Q # 9) Τι είναι μια μεταβλητή επιπέδου ενότητας;
Απάντηση: Οι μεταβλητές επιπέδου ενότητας μπορούν να είναι ιδιωτικές ή δημόσιες. Οι ιδιωτικές μεταβλητές είναι διαθέσιμες για όλες τις διαδικασίες σε αυτήν την ενότητα και δεν είναι ορατές σε καμία άλλη ενότητα. Οι δημόσιες μεταβλητές είναι ορατές σε όλες τις διαδικασίες σε όλες τις ενότητες ενός έργου.
συμπέρασμα
Μια μεταβλητή είναι κρίσιμη σε οποιαδήποτε γλώσσα προγραμματισμού. Σε αυτό το σεμινάριο, έχουμε δει ποιες είναι οι μεταβλητές, πώς να τις δηλώσουμε και να τις χρησιμοποιήσουμε στο πρόγραμμα. Εξετάσαμε επίσης τη μέθοδο Option Explicit, η οποία επιβάλλει την εφαρμογή της ρητής δήλωσης.
Συζητήθηκαν διάφοροι τύποι μεταβλητού πεδίου που βοηθούν τους χρήστες να προσδιορίσουν ποια μέρη του κώδικα μπορεί να χρησιμοποιηθεί η μεταβλητή. Μάθαμε τη χρήση των Στατικών μεταβλητών που βοηθά στη διατήρηση της τιμής της μεταβλητής και των Σταθερών μεταβλητών που βοηθούν στη διατήρηση της τιμής της μεταβλητής αμετάβλητη.
=> Επισκεφθείτε εδώ για να μάθετε το VBA από το μηδέν
Συνιστώμενη ανάγνωση
- Tutorial Excel VBA - Εισαγωγή στο VBA στο Excel
- Μέθοδοι Excel VBA Array και Array με παραδείγματα
- Τύποι δεδομένων VBA - Τύποι αριθμητικών και μη αριθμητικών δεδομένων στο VBA
- Μεταβλητές Python
- Μεταβλητές σε C ++
- Μεταβλητές Java και οι τύποι τους με παραδείγματα
- C # Τύποι δεδομένων και μεταβλητές με παραδείγματα
- Μεταβλητές VBScript: Τρόπος δήλωσης και χρήσης μεταβλητών - VBScript Dim