Τι σημαίνει DIM σε Visual Basic και BASIC; Δήλωση μεταβλητών. Χειριστής θαμπός

Πρόγραμμα Kerish Doctor. 15.06.2019

Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Εάν οι μεταβλητές παρατίθενται διαχωρισμένες με κόμμα (για παράδειγμα, DIM sPar1, sPar2, sPar3 AS STRING), μπορεί να οριστεί μόνο μια μεταβλητή Variant. ΣΕ γενική περίπτωση, κάθε μεταβλητή πρέπει να οριστεί σε ξεχωριστή γραμμή.

DIM sPar1 ΩΣ ΧΟΡΔΟΣΙΑ

DIM sPar2 ΩΣ ΧΟΡΔΟΣΙΑ

DIM sPar3 ΩΣ ΧΟΡΔΟΣΙΑ

Το Dim δηλώνει τοπικές μεταβλητές στις διαδικασίες. Οι δηλώσεις PUBLIC και PRIVATE χρησιμοποιούνται για τη δήλωση καθολικών μεταβλητών.

Σύνταξη:

Dim Variable [(Start To End)] [, Variable2 [(Start To End)] [,...]]

Παράμετροι:

Μεταβλητή: αυθαίρετη μεταβλητή ή όνομα πίνακα.

Έναρξη, Τέλος: αριθμητικές τιμές ή σταθερές που καθορίζουν τον αριθμό των στοιχείων (Αριθμός στοιχείων=(Έναρξη-Τέλος)+1) και το εύρος ευρετηρίου.

Το Start και το End μπορούν επίσης να είναι αριθμητικές εκφράσεις εάν το ReDim εφαρμόζεται σε επίπεδο διαδικασίας.

Τύπος: λέξη-κλειδί, δηλώνοντας τον τύπο της μεταβλητής.

Λέξη-κλειδί: τύπος μεταβλητής

Bool: μεταβλητή τύπου Boolean (True, False)

Νόμισμα: μεταβλητή τύπου Νόμισμα (νομισματική τιμή με κλασματικό μήκος 4 θέσεων)

Ημερομηνία: μεταβλητή τύπος ημερομηνίας

Διπλό: μεταβλητή κινητής υποδιαστολής διπλής ακρίβειας (1,79769313486232 x 10E308 - 4,94065645841247 x 10E-324)

Ακέραιος: μεταβλητή τύπου Integer (-32768 - 32767)

Long: μεταβλητό Μακρύς τύποςΑκέραιος αριθμός (-2 147 483 648 - 2 147 483 647)

Αντικείμενο: μεταβλητή τύπου Object (Σημείωση: αυτή η μεταβλητή μπορεί να οριστεί μόνο αργότερα χρησιμοποιώντας τη δήλωση Set!)

Single: Μεταβλητή τύπου Single (3,402823 x 10E38 - 1,401298 x 10E-45)

Συμβολοσειρά: μεταβλητή τύπου String with μέγιστο μήκος 64.000 χαρακτήρες ASCII.

: μεταβλητή τύπου Variant (καλύπτει όλους τους τύπους, όπως ορίζονται). Εάν η λέξη-κλειδί δεν έχει καθοριστεί, τότε οι μεταβλητές ορίζονται αυτόματα ως μεταβλητές Variant, εκτός εάν χρησιμοποιείται τελεστής από την περιοχή DefBool - DefVar.

Στο Basic Lotus® Symphony™, οι μεταβλητές δεν χρειάζεται να δηλώνονται ρητά. Η μόνη εξαίρεση είναι οι πίνακες. Μια μεταβλητή μπορεί να δηλωθεί χρησιμοποιώντας την πρόταση Dim. Εάν υπάρχουν πολλές δηλώσεις δήλωσης, χωρίζονται με κόμμα. Για να δηλώσετε τον τύπο μιας μεταβλητής, καθορίστε ένα σύμβολο δήλωσης τύπου μετά το όνομα της μεταβλητής ή πληκτρολογήστε μια κατάλληλη λέξη-κλειδί.

Το Basic Lotus Symphony σάς επιτρέπει να ορίσετε μονοδιάστατο ή πολυδιάστατους πίνακες, προσδιορίζοντας τον κατάλληλο τύπο μεταβλητής. Οι πίνακες είναι βολικοί για εργασία με λίστες και πίνακες. Τα στοιχεία του πίνακα είναι προσβάσιμα με ευρετήριο, το οποίο μπορεί να καθοριστεί ως αριθμητική έκφραση ή μια μεταβλητή.

Οι πίνακες δηλώνονται με τον τελεστή Dim. Το εύρος ευρετηρίου μπορεί να οριστεί με δύο τρόπους:

Το κείμενο DIM(20) ως στοιχεία String REM 21 με αριθμό από 0 έως 20

Κείμενο DIM (5 έως 25) ως στοιχεία String REM 21 αριθμημένα από το 5 έως το 25

Κείμενο DIM (-15 έως 5) ως στοιχεία String REM 21 (συμπεριλαμβανομένων 0)

REM με αριθμούς από -15 έως 5

Δισδιάστατο πεδίο δεδομένων

Κείμενο DIM(20,2) ως στοιχεία String REM 63 αριθμημένα από 0 έως 20 επίπεδο 1, από 0 έως 20 επίπεδο 2 και από 0 έως 20 επίπεδο 3

Οι τύποι πίνακα μπορούν να δηλωθούν δυναμικοί εάν η πρόταση ReDim καθορίζει τον αριθμό των διαστάσεων στη διαδικασία ή τη συνάρτηση που περιέχει τον πίνακα. Γενικά, η διάσταση ενός πίνακα καθορίζεται μόνο μία φορά και δεν μπορεί να αλλάξει. Σε μια διαδικασία, ένας πίνακας μπορεί να δηλωθεί χρησιμοποιώντας τον τελεστή ReDim. Οι διαστάσεις μπορούν να προσδιοριστούν μόνο χρησιμοποιώντας αριθμητικές εκφράσεις. Αυτό διασφαλίζει ότι τηρούνται οι περιορισμοί μήκους πεδίου.

Παράδειγμα:

Dim sVar As String

Dim iVar ως ακέραιος αριθμός

sVar = "Lotus Symphony"

REM Δισδιάστατο πεδίο δεδομένων

Dim text(20,2) ως String

Const sDim as String = "Dimension:"

text(i,ii) = str(i) & sDim & str(ii)

Χειριστής DIM

Εάν σε μια εργασία τα επεξεργασμένα δεδομένα είναι οργανωμένα με τη μορφή συστοιχιών, τότε ο διερμηνέας πρέπει να παρέχει τις απαραίτητες πληροφορίες για την κατανομή μνήμης για τους πίνακες που χρησιμοποιούνται στο πρόγραμμα. Ο χειριστής DIM χρησιμοποιείται για αυτό.

Μορφή: DIM a1(m1), a2(m2),..., aN (mN)

ai - όνομα πίνακα.

mi - λίστα παραμέτρων που καθορίζουν μέγιστες τιμέςευρετήρια συστοιχιών. Η λίστα mi μπορεί να περιέχει μία ή δύο ακέραιες σταθερές ή μεταβλητές διαχωρισμένες με πέμπτα, καθώς και αριθμητικές εκφράσεις. Οι δείκτες ποικίλλουν από το 0 έως το μέγιστο.

Παράδειγμα: DIM A(4), B(5,8), A1$(5), B1$(3,4)

Ο τελεστής DIM περιγράφει τους αριθμητικούς πίνακες A και B και τους πίνακες χαρακτήρων A1$ και B1$. Ο πίνακας Α είναι μονοδιάστατος και περιέχει 5 στοιχεία Α(0), Α(1), Α(2), Α(3), Α(4). Ο δισδιάστατος αριθμητικός πίνακας Β περιέχει 6 σειρές και 9 στήλες. Συμβολικός μονοδιάστατος πίνακαςΤο A1$ αποτελείται από 6 στοιχεία. Συμβολικός δισδιάστατος πίνακαςΤο B1$ αποτελείται από 20 στοιχεία (4 σειρές, 5 στήλες).

Η επεξεργασία πίνακα στη γλώσσα BASIC πραγματοποιείται στοιχείο προς στοιχείο. Η δήλωση DIM που περιγράφει έναν πίνακα πρέπει να τοποθετηθεί στο πρόγραμμα πριν από την πρώτη πρόταση που χρησιμοποιεί τα στοιχεία του.

Εάν ένας μονοδιάστατος πίνακας δεν έχει περισσότερα από 11 στοιχεία και ένας δισδιάστατος πίνακας δεν έχει περισσότερες από 11 σειρές και 11 στήλες, τότε τέτοιοι πίνακες δεν χρειάζεται να περιγραφούν.

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

Παράδειγμα 1: Παράδειγμα 2:

10 ΕΙΣΟΔΟΣ N,K 10 ΕΙΣΟΔΟΣ N,M

20 DIM A(N),B(K,N) 20 DIM A(N+1,M)

Παράδειγμα 3: Δίνονται μονοδιάστατοι πίνακες Α και Β, που ο καθένας περιέχει N στοιχεία. Δημιουργήστε έναν νέο πίνακα D, κάθε στοιχείο του οποίου καθορίζεται από τον τύπο

D(i)=A(i)+B(i)+C(i), i=1,2,.....,N

10 INPUT "Εισαγάγετε τη διάσταση των πινάκων" ;N

20 DIM A(N),B(N),C(N),D(N)

40 ΕΙΣΟΔΟΣ A(I),B(I),C(I)

70 D(I)=A(I)+B(I)+C(I)

80 PRINT "D(";I;")=";D(I);

Μπλοκ δεδομένων

α) Χειριστής DATA

Ο χειριστής DATA έχει σχεδιαστεί για να δημιουργεί ένα μπλοκ δεδομένων.

Μορφή: ΔΕΔΟΜΕΝΑ Α

ΔΕΔΟΜΕΝΑ - λέξη-κλειδί.

Το A είναι μια λίστα που περιέχει μία ή περισσότερες σταθερές πραγματικών, ακέραιων ή συμβολοσειρών, διαχωρισμένες με κόμμα (οι σταθερές συμβολοσειρών δεν χρειάζεται να περικλείονται σε εισαγωγικά).

Η δήλωση DATA δημιουργεί ΕΜΒΟΛΟΜπλοκ δεδομένων υπολογιστή. Οι πληροφορίες εγγράφονται στο μπλοκ δεδομένων με τη σειρά που εμφανίζονται στη λίστα. Εάν ένα πρόγραμμα χρησιμοποιεί πολλές εντολές DATA, σχηματίζεται ένα μπλοκ δεδομένων με διαδοχική σύνδεση τιμών από λίστες με τη σειρά με την οποία εμφανίζονται οι δηλώσεις.

Παράδειγμα: 20 DATA 2, 5.6, πρόγραμμα

........................

50 DATA 8, παράδειγμα, 37.6, 5

Το μπλοκ δεδομένων θα έχει 7 στοιχεία: 2, 5.6, πρόγραμμα, 8, παράδειγμα, 37.6, 5

ΣΙ) ΔΙΑΒΑΣΤΕ τη δήλωση

Η δήλωση READ χρησιμοποιείται για την ανάγνωση πληροφοριών από ένα μπλοκ δεδομένων.

Μορφή: ΔΙΑΒΑΣΤΕ V

READ - λέξη-κλειδί.

Το V είναι μια λίστα διαχωρισμένη με κόμματα με ένα ή περισσότερα ονόματα μεταβλητών.

Το μπλοκ δεδομένων είναι οργανωμένο με τέτοιο τρόπο ώστε να παρέχει διαδοχική πρόσβαση στις πληροφορίες που είναι αποθηκευμένες σε αυτό χρησιμοποιώντας έναν εσωτερικό δείκτη. Η τρέχουσα θέση δείκτη δείχνει ένα στοιχείο του μπλοκ δεδομένων που είναι άμεσα διαθέσιμο για ανάγνωση. Όταν ξεκινά το πρόγραμμα, ο δείκτης ορίζεται στο αρχικό στοιχείο του μπλοκ. Όταν εκτελείται η πρόταση READ, το πρώτο στοιχείο του μπλοκ δεδομένων από τη λίστα της δήλωσης DATA εκχωρείται ως η τιμή της μεταβλητής της οποίας το όνομα βρίσκεται πρώτη στη λίστα της πρότασης READ και ο δείκτης μετακινείται στην επόμενη θέση και τώρα δείχνει στο δεύτερο στοιχείο του μπλοκ δεδομένων. Εάν υπάρχει άλλο όνομα μεταβλητής στη λίστα της δήλωσης READ, τότε το δεύτερο στοιχείο θα της εκχωρηθεί ως τιμή. Στη συνέχεια, ο δείκτης μετακινείται στην επόμενη θέση και η διαδικασία επαναλαμβάνεται μέχρι να τελειώσει η λίστα της δήλωσης READ.

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

Παράδειγμα: 30 ΔΙΑΒΑΣΤΕ Α, Β

100 ΔΙΑΒΑΣΤΕ E$, F, G

A = 2 B = 5,6 C = "πρόγραμμα"

D = 8 E = "παράδειγμα" F = 37,6 G = 5

Το DATA είναι ο μόνος χειριστής ΒΑΣΙΚΗ γλώσσα, ο αριθμός γραμμής της οποίας δεν επηρεάζει τη σειρά των ενεργειών που εκτελούνται. Ο αριθμός γραμμής χρειάζεται μόνο για να είναι συνεπής γενική μορφήπρογράμματα.

Μόνο η δήλωση READ καθορίζει πότε και ποια δεδομένα πρέπει να διαβαστούν.

γ) ΕΠΑΝΑΦΟΡΑ χειριστή

Για να επιστρέψετε έναν δείκτη στην αρχή ενός μπλοκ δεδομένων, χρησιμοποιήστε την πρόταση RESTORE.

Μορφή: RESTORE ή RESTORE N

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

Η χρήση αυτού του τελεστή σάς επιτρέπει να διαβάζετε τα ίδια δεδομένα πολλές φορές διάφορους χειριστές DATA και αντιστοιχίστε τα ως τιμές σε διαφορετικές μεταβλητές.

40 ΔΕΔΟΜΕΝΑ 2, 4, 8, 3, -6, 4

A = 2, A1 = 4, A2 = 8, δείκτης στον αριθμό 3, αλλά το RESTORE τον επιστρέφει στον πρώτο αριθμό, άρα B = 2, B1 = 4.

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

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

βασικές γλωσσικές ρουτίνες

α) Καταστάσεις GOSUB και RETURN

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

Στο BASIC, γίνεται πρόσβαση σε μια υπορουτίνα χρησιμοποιώντας την πρόταση GOSUB.

Μορφή: GOSUB N

GOSUB - λέξη-κλειδί.

N είναι ο αριθμός της πρώτης γραμμής από την οποία πρέπει να ξεκινήσει η εκτέλεση της υπορουτίνας (σημείο εισόδου στην υπορουτίνα).

Η τελευταία πρόταση που εκτελείται σε μια υπορουτίνα πρέπει να είναι Δήλωση ΕΠΙΣΤΡΟΦΗΣ, επιστρέφοντας τον έλεγχο στο κύριο πρόγραμμα.

Οι δηλώσεις GOSUB και RETURN λειτουργούν ως εξής. Ο διερμηνέας BASIC δημιουργεί μια στοίβα επιστροφής. Όταν μια πρόταση GOSUB συναντάται σε ένα πρόγραμμα, ο διερμηνέας ωθεί τη διεύθυνση (αριθμός γραμμής) της δήλωσης αμέσως μετά το GOSUB στη στοίβα επιστροφής. Στη συνέχεια, ο έλεγχος μεταφέρεται στο σημείο εισόδου που καθορίζεται από τον αριθμό γραμμής στη δήλωση GOSUB και οι εντολές της υπορουτίνας αρχίζουν να εκτελούνται. Εάν εμφανιστεί μια δήλωση RETURN σε μια υπορουτίνα, η τρέχουσα διεύθυνση επιστροφής εμφανίζεται από την κορυφή της στοίβας και ο διερμηνέας μεταβιβάζει τον έλεγχο σε πρόγραμμα κλήσηςστον χειριστή αμέσως μετά τον χειριστή GO SUB.

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

10 κύριο πρόγραμμα REM

30 ΕΚΤΥΠΩΣΗ "Εισαγάγετε τον αριθμό των αγροκτημάτων"

60 ΕΚΤΥΠΩΣΗ "Εισαγάγετε την καλλιεργούμενη έκταση του αγροκτήματος" ;I

90 ΕΚΤΥΠΩΣΗ "Εισαγάγετε το κατώτερο όριο της σπαρμένης έκτασης" 100 ΕΙΣΟΔΟΣ Δ

120 ΕΚΤΥΠΩΣΗ "Αριθμός αγροκτημάτων με σπαρμένη έκταση >"; D;"=" ; Κ

200 υπορουτίνα REM

220 ΓΙΑ Ι=1 ΕΩΣ Μ

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

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

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

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

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

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

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

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

Σημείωση μεταφραστή:Μιλώντας για μεταβλητές στο VBA, αξίζει να αναφέρουμε μια ακόμη πολύ σημαντικό σημείο. Αν δηλώσουμε μια μεταβλητή αλλά δεν της εκχωρήσουμε καμία τιμή, τότε αρχικοποιείται με μια προεπιλεγμένη τιμή:
συμβολοσειρές κειμένου– αρχικοποιούνται κενές γραμμές;
αριθμοί – τιμή 0;
μεταβλητές τύπου Boolean– Λάθος
ημερομηνίες: 30 Δεκεμβρίου 1899.

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

Αμυδρός Μεταβλητή_Όνομα Ως Data_Type

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

Dim sVAT_Rate As Single Dim i As Integer

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

Const iMaxCount = 5000 Const iMaxScore = 100

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

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

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

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

Επιλογή ρητή

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

Επιλογή ρητή

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

Αυτό γίνεται ως εξής:

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

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

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

Κάθε δηλωμένη μεταβλητή ή σταθερά έχει το δικό της περιορισμένο εύρος, δηλαδή ένα περιορισμένο τμήμα του προγράμματος στο οποίο υπάρχει αυτή η μεταβλητή. Το εύρος εξαρτάται από το πού έγινε η δήλωση μεταβλητής ή σταθερής. Ας πάρουμε, για παράδειγμα, τη μεταβλητή 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() Ως Double Dim sVAT_Rate As Single ... Τελική συνάρτηση

Αν η μεταβλητή sVAT_Rateπου δηλώνεται στην αρχή της συνάρτησης Συνολικό_Κόστος, τότε το εύρος της θα περιοριστεί μόνο σε αυτήν τη συνάρτηση (δηλ. εντός της συνάρτησης Συνολικό_Κόστος, θα είναι δυνατή η χρήση μιας μεταβλητής sVAT_Rate, αλλά όχι έξω από αυτό).

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

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

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

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

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

Ο Δημ είχε διαφορετικές έννοιεςπου του αποδίδεται.

Βρήκα αναφορές στην τιμή Dim «Ανακοίνωση στη μνήμη»Ένας πιο σχετικός σύνδεσμος είναι αυτό το έγγραφο για το Dim Statement που δημοσιεύτηκε από την Oracle ως μέρος της αναφοράς γλώσσας Siebel VB. Φυσικά, θα μπορούσατε να υποστηρίξετε ότι αν δεν δηλώνετε μεταβλητές στη μνήμη, πού το κάνετε; Μπορεί να είναι "Δήλωση στην ενότητα" - καλή εναλλακτικήδεδομένου του τρόπου χρήσης του Dim.

Νομίζω ότι το "Declare in Memory" είναι στην πραγματικότητα ένα μνημονικό που έχει σχεδιαστεί για να διευκολύνει την εκμάθηση του τρόπου χρήσης του Dim. Βλέπω το "Declare in Memory" ως καλύτερο νόημααφού περιγράφει τι κάνει τρέχουσες εκδόσειςγλώσσα, αλλά αυτό δεν είναι το σωστό νόημα.

Στην πραγματικότητα, στην αρχή του Basic, το Dim χρησιμοποιήθηκε μόνο για τη δήλωση συστοιχιών. Για τις κανονικές μεταβλητές, δεν χρησιμοποιήθηκε λέξη-κλειδί, αλλά ο τύπος τους συνάγεται από το όνομά τους. Για παράδειγμα, εάν ένα όνομα μεταβλητής τελειώνει σε $, τότε είναι μια συμβολοσειρά (αυτό είναι κάτι που μπορεί να έχετε δει ακόμη και σε ονόματα μεθόδων πριν από το VB6, όπως το Mid$). Έτσι, χρησιμοποιήσατε μόνο το Dim για να μετρήσετε τα μεγέθη των πινάκων (σημειώστε ότι το ReDim αλλάζει μέγεθος πινάκων).

Έχει πραγματικά σημασία; Εννοώ ότι αυτή η λέξη-κλειδί έχει νόημα τεχνητή γλώσσα. Δεν χρειάζεται να είναι λέξη στα αγγλικά ή σε οποιαδήποτε άλλη φυσική γλώσσα. Επομένως, μπορεί να σημαίνει μόνο αυτό που θέλετε να σημαίνει, το μόνο που έχει σημασία είναι ότι λειτουργεί.

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

Κάθομαι στον υπολογιστή μου με την επιθυμία να βοηθήσω στη διατήρηση αυτού του μικρού κομματιού του πολιτισμού μας που φαίνεται χαμένο, αντικαθιστώντας από το να μαντέψουμε τι ήταν. Έσκαψα λοιπόν το MSDN τόσο για τρέχοντα όσο και για παλιά CD από την έκδοση του 1998. Αναζήτησα επίσης τεκμηρίωση για το παλιό QBasic [θα έπρεπε να είχε χρησιμοποιήσει το DOSBox] και κατάφερα να πάρω το εγχειρίδιο Dartmouth για να δω πώς μιλούν για το Dim . Προς απογοήτευσή μου δεν λένε τι σημαίνει Dim και λένε μόνο πώς χρησιμοποιείται.

Αλλά πριν εξασθενίσει η ελπίδα μου, κατάφερα να βρω αυτόν τον Οδηγό χρήσης μικροϋπολογιστών του BBC (ο οποίος ισχυρίζεται ότι είναι του 1984 και δεν πρέπει να αμφιβάλλω). Ο μικροϋπολογιστής του BBC χρησιμοποιούσε μια παραλλαγή του BASIC που ονομάζεται BBC BASIC και περιγράφεται στο έγγραφο. Παρόλο που δεν λέει τι εννοεί ο Ντιμ, λέει (στη σελίδα 104):

Μπορείτε να μετρήσετε το N$ για να έχετε όσες εγγραφές θέλετε. Για παράδειγμα, το DIM N $(1000) θα δημιουργήσει έναν πίνακα συμβολοσειρών με χώρο για 1000 διαφορετικά ονόματα.

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

Τώρα έλαβα μια επιπλέον έκπληξη αργότερα (στη σελίδα 208), ο τίτλος της ενότητας που περιγράφει τη λέξη-κλειδί DIM (σημείωση: αυτή δεν αναφέρεται στο περιεχόμενο) λέει:

Μέγεθος πίνακα DIM

Τώρα, δεν κατάλαβα το απόφθεγμα "Το Dim αξίζει...", αλλά νομίζω ότι είναι ξεκάθαρο ότι κάθε άτομο που αξίζει το αλάτι του και μπορεί να διαβάσει αυτό το έγγραφο θα πίστευε ότι το Dim σημαίνει διάσταση.

Με νέα ελπίδα, αποφάσισα να βρω έναν τρόπο να επιλέξω το Δημ. Και πάλι δεν βρήκα λογαριασμόςσε αυτό το θέμα, αλλά μπόρεσα να βρω το οριστικό απόσπασμα:

Για να μπορέσετε να χρησιμοποιήσετε έναν πίνακα, πρέπει να τον ορίσετε σε μια δήλωση DIM (διάσταση).

Μπορείτε να το βρείτε ως μέρος των Ηλεκτρονικών Οδηγών Χρήστη True BASIC στην ιστοσελίδα της True BASIC inc, μιας εταιρείας που ιδρύθηκε από τον Thomas Eugene Kurtz, συν-συγγραφέα του BASIC.

Έτσι, κατά τη διάρκεια επαναχρησιμοποίησηΤο Dim είναι σύντομο για Διάστασηκαι ναι. Αυτό υπήρχε στο FORTRAN πριν, επομένως είναι πιθανό να επιλέχθηκε από την επιρροή του FORTRAN όπως είπε ο Patrick Macdonald στην απάντησή του.

Dim sum as string = "αυτό δεν είναι κινέζικο γεύμα" παράδειγμα χρήσης REM στο VB.NET ;)

Οι περισσότεροι άνθρωποι προτιμούν να μην χρησιμοποιούν αναγνωριστικά για να αναφέρονται σε μεταβλητές. Αντίθετα, χρησιμοποιούν τον τελεστή Dim, αυτή η λειτουργία ονομάζεται - διαφημίσεις. Για παράδειγμα:

Dim A ως ακέραιος αριθμός

Dim B As String

Οι δηλώσεις μεταβλητών μπορούν να συνδυαστούν σε μία μόνο γραμμή.

Dim A ως ακέραιος, όνομα ως ακέραιος

Ένα συνηθισμένο λάθος είναι η χρήση της ακόλουθης έκφρασης:

Dim X, Y, Z Ως ακέραιος αριθμός

Υποθέτοντας ότι όλες οι μεταβλητές θα είναι ακέραιοι. Στην πραγματικότητα, το X και το Y θα δηλωθούν ως Variant και μόνο το Z ως Integer. Για να αποφύγετε αυτό, πρέπει να χρησιμοποιείτε το αναγνωριστικό τύπου κάθε φορά. Εάν μια μεταβλητή δηλωθεί χρησιμοποιώντας τη δήλωση Dim, εάν χρησιμοποιηθεί μια μεταβλητή με το ίδιο όνομα και διαφορετικό αναγνωριστικό τύπου, θα προκύψει σφάλμα " διπλός ορισμός" κατά τη φόρτωση του προγράμματος.

Όταν ανατεθεί μεταβλητού τύπουΠαραλλαγή, μπορείτε να χρησιμοποιήσετε τον τελεστή - Dim χωρίς το πρόθεμα - AS. Για παράδειγμα:

Η ανάγκη δήλωσης μεταβλητών.

Ένα από τα πιο κοινά λάθησε ένα πρόγραμμα είναι η χρήση μη δηλωμένων μεταβλητών. Το πρόβλημα είναι ότι η Visual Basic σας επιτρέπει να δημιουργήσετε μια μεταβλητή μόλις εμφανιστεί μία φορά σε ένα πρόγραμμα. Εάν ανακατέψετε ένα όνομα μεταβλητής, η Visual Basic δημιουργεί μια νέα με παρόμοιο όνομα και της εκχωρεί μια προεπιλεγμένη τιμή, η οποία οδηγεί αμέσως σε σφάλμα. Αυτό το σφάλμα είναι δύσκολο να εντοπιστεί επειδή τα ονόματα των μεταβλητών είναι πολύ παρόμοια.

Ο πιο απλός τρόποςΓια να αποφευχθεί ένα τέτοιο λάθος είναι να επιβληθεί η δήλωση όλων των μεταβλητών. Η Visual Basic εμφανίζει ένα μήνυμα εάν υπάρχει σφάλμα στο όνομα. Η Visual Basic παρέχει αυτή τη δυνατότητα, αλλά δεν χρησιμοποιείται από προεπιλογή. Ο τελεστής που απαιτείται για αυτό ονομάζεται Option Explicit.

Για να ελέγξετε γενικά τις μεταβλητές σε ένα πρόγραμμα, πρέπει να τοποθετήσετε τη δήλωση Option Explicit στην ενότητα General.

Για να τοποθετήσετε αυτόν τον χειριστήστην ενότητα Γενικά χρειάζεστε:

Ανοίξτε το παράθυρο Κώδικας

Επιλέξτε το Γενικό αντικείμενο από τη λίστα αντικειμένων στο παράθυρο Αντικείμενο

Επιλέξτε Δήλωση από τη λίστα Διαδικασία

Εισαγάγετε Option Explicit.

Αλλαγή προεπιλεγμένων τιμών για τύπους

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

Ορισμός Α-Ω

Βασικές μορφές τελεστών διαφόρων DefTypes

Οι συμβάσεις τύπων μπορούν πάντα να αλλάξουν χρησιμοποιώντας ένα αναγνωριστικό ή μια δήλωση Dim σε μια συγκεκριμένη μεταβλητή. Συνήθως η δήλωση DefType τοποθετείται στην ίδια ενότητα (Γενικά) με τη δήλωση Option Explicit.

Μεταβλητό Πεδίο

Οι προγραμματιστές χρησιμοποιούν τον όρο scope όταν θέλουν να μιλήσουν για τη δυνατότητα χρήσης μιας μεταβλητής από ένα μέρος του προγράμματος σε άλλο μέρος του προγράμματος. Στη Visual Basic, οι μεταβλητές που δηλώνονται σε μια διαδικασία απομονώνονται η μία από την άλλη. Με όρους προγραμματισμού, αυτό σημαίνει ότι αυτές οι μεταβλητές είναι τοπικός.



Συνιστούμε να διαβάσετε

Κορυφή