Μεταβλητές και σταθερές στο VBA

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

Για παράδειγμα, μια σταθερά Pi αποθηκεύει την τιμή 3,14159265… Ο αριθμός "Pi" δεν θα αλλάξει κατά την εκτέλεση του προγράμματος, αλλά είναι ακόμα πιο βολικό να αποθηκεύσετε μια τέτοια τιμή ως σταθερά.

Ταυτόχρονα, μπορούμε να χρησιμοποιήσουμε τη μεταβλητή sVAT_Rate για την αποθήκευση του συντελεστή ΦΠΑ στα αγορασμένα αγαθά. Μεταβλητή τιμή sVAT_Rate μπορεί να διαφέρει ανάλογα με το προϊόν που αγοράσατε.

Τύποι δεδομένων

Όλες οι μεταβλητές και οι σταθερές είναι συγκεκριμένου τύπου δεδομένων. Ο παρακάτω πίνακας παραθέτει τους τύπους δεδομένων που χρησιμοποιούνται στο VBA με περιγραφή και εύρος πιθανών τιμών:

Τύπος δεδομένων ΜέγεθοςΠεριγραφήΕύρος τιμών
Ψηφιόλεξη1 bytesΘετικοί ακέραιοι αριθμοί; χρησιμοποιείται συχνά για δυαδικά δεδομένααπό 0 να 255
Boolean2 bytesΜπορεί να είναι είτε Σωστό είτε ΛάθοςΣωστό ή λάθος
Ακέραιος αριθμός2 bytesΑκέραιοι αριθμοί (χωρίς κλασματικό μέρος)από -32 έως +768
Μακριά4 bytesΜεγάλοι ακέραιοι αριθμοί (χωρίς κλασματικό μέρος)от -2 147 483 648 до +2 147 483 647
ενιαίας4 bytesΑριθμός ενιαίας κινητής υποδιαστολής ακριβείαςαπό -3.4e38 έως +3.4e38
Διπλό8 bytesΑριθμός κινητής υποδιαστολής διπλής ακρίβειαςαπό -1.8e308 έως +1.8e308
Νόμισμα8 bytesΑριθμός κινητής υποδιαστολής, με σταθερό αριθμό δεκαδικών ψηφίωνот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Ημερομηνία8 bytesΗμερομηνία και ώρα – Δεδομένα τύπου Η ημερομηνία αντιπροσωπεύεται από έναν αριθμό κινητής υποδιαστολής. Το ακέραιο μέρος αυτού του αριθμού εκφράζει την ημερομηνία και το κλασματικό μέρος εκφράζει την ώρα.από 1 Ιανουαρίου 100 έως 31 Δεκεμβρίου 9999
αντικείμενο4 bytesΑναφορά αντικειμένουΟποιαδήποτε αναφορά αντικειμένου
ΣπάγγοςαλλάζειΣετ χαρακτήρα. Ο τύπος συμβολοσειράς μπορεί να είναι σταθερού ή μεταβλητού μήκους. Χρησιμοποιείται πιο συχνά με μεταβλητό μήκοςΣταθερό μήκος – έως περίπου 65 χαρακτήρες. Μεταβλητό μήκος - έως περίπου 500 δισεκατομμύρια χαρακτήρες
ΠαραλλαγήαλλάζειΜπορεί να περιέχει μια ημερομηνία, ένα float ή μια συμβολοσειρά χαρακτήρων. Αυτός ο τύπος χρησιμοποιείται σε περιπτώσεις όπου δεν είναι γνωστό εκ των προτέρων τι είδους δεδομένα θα εισαχθούν.Αριθμός – Διπλός, χορδή – Χορδή

Προφανώς, χρησιμοποιώντας τον παραπάνω πίνακα και επιλέγοντας τον σωστό τύπο δεδομένων, μπορείτε να χρησιμοποιήσετε τη μνήμη πιο οικονομικά (για παράδειγμα, επιλέξτε τον τύπο δεδομένων Ακέραιος αριθμός αντί Μακριά or ενιαίας αντί Διπλό). Ωστόσο, όταν χρησιμοποιείτε πιο συμπαγείς τύπους δεδομένων, πρέπει να προσέχετε ώστε ο κώδικάς σας να μην προσπαθεί να χωρέσει δυσανάλογα μεγάλες τιμές σε αυτούς.

Δήλωση μεταβλητών και σταθερών

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

• Οι συμβολοσειρές κειμένου αρχικοποιούνται με κενές συμβολοσειρές.

• αριθμοί — τιμή 0;

• μεταβλητές τύπου Boolean — Λάθος

• ημερομηνίες – 30 Δεκεμβρίου 1899.

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

Dim Имя_Переменной As Тип_Данных

Στην παραπάνω γραμμή κώδικα Μεταβλητή_ όνομα είναι το όνομα της μεταβλητής που θα χρησιμοποιηθεί στον κώδικα και Τύπος δεδομένων είναι ένας από τους τύπους δεδομένων από τον πίνακα που δόθηκε λίγο νωρίτερα σε αυτό το άρθρο. Για παράδειγμα:

Dim sVAT_Rate As Single Dim i As Integer

Οι σταθερές δηλώνονται με παρόμοιο τρόπο, αλλά κατά τη δήλωση σταθερών, η τιμή τους πρέπει να αναφέρεται αμέσως. Για παράδειγμα, όπως αυτό:

Const iMaxCount = 5000 Const iMaxScore = 100

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

Έτσι, ο προγραμματιστής μπορεί να χρησιμοποιήσει τη νέα μεταβλητή ανά πάσα στιγμή (ακόμα και αν δεν έχει δηλωθεί) και το Excel θα την αντιμετωπίσει ως μεταβλητή τύπου Παραλλαγή. Ωστόσο, υπάρχουν διάφοροι λόγοι για τους οποίους αυτό δεν πρέπει να γίνει:

  1. Χρήση μνήμης και υπολογιστική ταχύτητα. Εάν δεν δηλώσετε μια μεταβλητή με ένδειξη του τύπου δεδομένων, τότε από προεπιλογή θα οριστεί στον τύπο Παραλλαγή. Αυτός ο τύπος δεδομένων χρησιμοποιεί περισσότερη μνήμη από άλλους τύπους δεδομένων. Μερικά επιπλέον byte ανά μεταβλητή μπορεί να μην ακούγονται πολλά, αλλά στην πράξη, τα προγράμματα μπορεί να έχουν χιλιάδες μεταβλητές (ειδικά όταν εργάζονται με πίνακες). Επομένως, η επιπλέον μνήμη που χρησιμοποιείται από μεταβλητές όπως Παραλλαγή, σε σύγκριση με μεταβλητές τύπου Ακέραιος αριθμός or ενιαίας, μπορεί να προσθέσει ένα σημαντικό ποσό. Επιπλέον, πράξεις με μεταβλητές τύπου Παραλλαγή εκτελούνται πολύ πιο αργά από ό,τι με μεταβλητές άλλων τύπων, αντίστοιχα, επιπλέον χίλιες μεταβλητές τύπου Παραλλαγή μπορεί να επιβραδύνει σημαντικά τους υπολογισμούς.
  2. Αποτροπή τυπογραφικών σφαλμάτων σε ονόματα μεταβλητών. Εάν δηλωθούν όλες οι μεταβλητές, τότε μπορεί να χρησιμοποιηθεί η δήλωση VBA − Επιλογή ρητή (θα μιλήσουμε για αυτό αργότερα) προκειμένου να προσδιορίσουμε όλες τις μη δηλωμένες μεταβλητές. Αυτό εξαλείφει την εμφάνιση ενός σφάλματος στο πρόγραμμα ως αποτέλεσμα ενός εσφαλμένου γραμμένου ονόματος μεταβλητής. Για παράδειγμα, χρησιμοποιώντας μια μεταβλητή με όνομα sVAT_Rate, μπορείτε να κάνετε ένα τυπογραφικό λάθος και, εκχωρώντας μια τιμή σε αυτή τη μεταβλητή, να γράψετε: “VATRate = 0,175”. Αναμένεται ότι από εδώ και πέρα ​​η μεταβλητή sVAT_Rate θα πρέπει να περιέχει την τιμή 0,175 – αλλά φυσικά δεν το κάνει. Εάν ο τρόπος υποχρεωτικής δήλωσης όλων των χρησιμοποιούμενων μεταβλητών είναι ενεργοποιημένος, τότε ο μεταγλωττιστής VBA θα υποδείξει αμέσως ένα σφάλμα, καθώς δεν θα βρει τη μεταβλητή VATRAte μεταξύ αυτών που ανακοινώθηκαν.
  3. Επισήμανση τιμών που δεν ταιριάζουν με τον δηλωμένο τύπο μιας μεταβλητής. Εάν δηλώσετε μια μεταβλητή συγκεκριμένου τύπου και προσπαθήσετε να της αντιστοιχίσετε δεδομένα διαφορετικού τύπου, θα λάβετε ένα σφάλμα, το οποίο, αν δεν διορθωθεί, μπορεί να προκαλέσει διακοπή λειτουργίας του προγράμματος. Με την πρώτη ματιά, αυτό μπορεί να φαίνεται ως ένας καλός λόγος για να μην δηλωθούν μεταβλητές, αλλά στην πραγματικότητα, από πριν αποδειχθεί ότι μία από τις μεταβλητές έλαβε τα λάθος δεδομένα που έπρεπε να λάβει - τόσο το καλύτερο! Διαφορετικά, εάν το πρόγραμμα συνεχίσει να εκτελείται, τα αποτελέσματα μπορεί να είναι λανθασμένα και απροσδόκητα και θα είναι πολύ πιο δύσκολο να βρεθεί η αιτία των σφαλμάτων. Είναι επίσης πιθανό η μακροεντολή να εκτελεστεί "επιτυχώς". Ως αποτέλεσμα, το σφάλμα θα περάσει απαρατήρητο και η εργασία θα συνεχιστεί με λανθασμένα δεδομένα!

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

Επιλογή ρητή

Χειριστής Επιλογή ρητή προκαλεί τη δήλωση όλων των μεταβλητών που θα χρησιμοποιηθούν στον κώδικα VBA και επισημαίνει όλες τις μη δηλωμένες μεταβλητές ως σφάλματα κατά τη μεταγλώττιση (πριν ξεκινήσει η εκτέλεση του κώδικα). Η εφαρμογή αυτού του τελεστή δεν είναι δύσκολη – απλώς γράψτε αυτήν τη γραμμή στην κορυφή του αρχείου VBA:

Option Explicit

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

Αυτό γίνεται έτσι:

  • Από το μενού Visual Basic Editor, κάντε κλικ εργαλεία > Επιλογές
  • Στο παράθυρο διαλόγου που εμφανίζεται, ανοίξτε την καρτέλα συντάκτης
  • Ελέγξτε το κουτί Απαιτείται δήλωση μεταβλητής και πατήστε το πλήκτρο OK

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

Πεδίο εφαρμογής μεταβλητών και σταθερών

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

Επιλογή Ακριβές Dim sVAT_Rate As Single Function Total_Cost() as Double ... End Function
Αν η μεταβλητή sVAT_Rate που δηλώνεται στην αρχή της ενότητας, τότε το πεδίο εφαρμογής αυτής της μεταβλητής θα είναι ολόκληρη η ενότητα (δηλ. η μεταβλητή sVAT_Rate θα αναγνωριστεί από όλες τις διαδικασίες αυτής της ενότητας).

Επομένως, εάν στη συνάρτηση Συνολικό κόστος μεταβλητή sVAT_Rate θα εκχωρηθεί κάποια τιμή και, στη συνέχεια, η επόμενη συνάρτηση που θα εκτελεστεί στην ίδια ενότητα θα χρησιμοποιήσει τη μεταβλητή sVAT_Rate με την ίδια σημασία.

Ωστόσο, εάν καλείται κάποια συνάρτηση που βρίσκεται σε άλλη ενότητα, τότε για αυτήν η μεταβλητή sVAT_Rate δεν θα γίνει γνωστό.

Επιλογή ρητή συνάρτηση Total_Cost() As Double Dim sVAT_Rate As Single ... Τελική συνάρτηση
Αν η μεταβλητή sVAT_Rate που δηλώνεται στην αρχή της συνάρτησης Συνολικό κόστος, τότε το εύρος του θα περιοριστεί μόνο σε αυτήν τη λειτουργία (δηλ. εντός της συνάρτησης Συνολικό κόστος, μπορείτε να χρησιμοποιήσετε τη μεταβλητή sVAT_Rate, αλλά όχι έξω).

Όταν προσπαθείτε να χρησιμοποιήσετε sVAT_Rate Σε μια άλλη διαδικασία, ο μεταγλωττιστής VBA θα αναφέρει ένα σφάλμα επειδή αυτή η μεταβλητή δεν δηλώθηκε εκτός της συνάρτησης Συνολικό κόστος (υπό την προϋπόθεση ότι χρησιμοποιείται ο χειριστής Επιλογή ρητή).

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

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

Μπορείτε επίσης να χρησιμοποιήσετε λέξεις-κλειδιά για να δηλώσετε σταθερές. Δημόσιο и Private, αλλά όχι αντί για τη λέξη-κλειδί Const, μαζί με αυτό.

Τα ακόλουθα παραδείγματα δείχνουν τη χρήση λέξεων-κλειδιών Δημόσιο и Private εφαρμόζεται σε μεταβλητές και σταθερές.

Επιλογή Ρητό δημόσιο sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
Σε αυτό το παράδειγμα, η λέξη-κλειδί Δημόσιο χρησιμοποιείται για να δηλώσει μια μεταβλητή sVAT_Rate και σταθερές iMax_Count. Το εύρος των στοιχείων που δηλώνονται με αυτόν τον τρόπο θα είναι ολόκληρο το τρέχον έργο.

Αυτό σημαίνει ότι sVAT_Rate и iMax_Count θα είναι διαθέσιμο σε οποιαδήποτε ενότητα έργου.

Επιλογή Ρητή Ιδιωτική sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
Σε αυτό το παράδειγμα, για να δηλώσετε μια μεταβλητή sVAT_Rate και σταθερές iMax_Count λέξη-κλειδί που χρησιμοποιείται Private. Το πεδίο εφαρμογής αυτών των στοιχείων είναι η τρέχουσα ενότητα.

Αυτό σημαίνει ότι sVAT_Rate и iMax_Count θα είναι διαθέσιμο σε όλες τις διαδικασίες της τρέχουσας ενότητας, αλλά δεν θα είναι διαθέσιμο σε διαδικασίες σε άλλες ενότητες.

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