VBA - Δήλωση (Dim), Δημιουργία και αρχικοποίηση μεταβλητής πίνακα

Αυτό το σεμινάριο θα δείξει τον τρόπο δήλωσης (Dim), δημιουργίας και αρχικοποίησης μεταβλητών πίνακα σε VBA

Τι είναι η μεταβλητή συστοιχίας VBA;

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

Αναφέρεστε σε ένα στοιχείο σε έναν πίνακα χρησιμοποιώντας τον αριθμό ευρετηρίου του.

Μπορείτε να δηλώσετε μια μεταβλητή πίνακα με τον ίδιο τρόπο όπως θα δηλώνατε οποιαδήποτε άλλη μεταβλητή χρησιμοποιώντας τη λέξη -κλειδί Dim, Static, Public ή Private.

Στατικοί πίνακες

Υπάρχουν 2 τύποι συστοιχιών - Στατικοί και Δυναμικοί. Ένας στατικός πίνακας δηλώνεται με το μέγεθος που καθορίζεται όταν δηλώνετε αρχικά τον πίνακα. Ονομάζεται επίσης Fixed Array.

1 Dim intA (4) ως ακέραιος

Ο παραπάνω πίνακας δηλώνεται χρησιμοποιώντας τη δήλωση Dim σε επίπεδο διαδικασίας ή λειτουργικής μονάδας και το μέγεθος του πίνακα είναι 5 καθώς δεν έχουμε δηλώσει την τιμή LBound του πίνακα.

Όχι, δεν είναι τυπογραφικό λάθος! Το μέγεθος του πίνακα είναι 5, παρά την εισαγωγή 4 στον πίνακα. Αυτό συμβαίνει επειδή οι δείκτες συστοιχιών ξεκινούν αυτόματα από το μηδέν.

Ευρετήρια πίνακα

Τα ευρετήρια πίνακα ξεκινούν αυτόματα από μηδέν, εκτός εάν Βάση επιλογής 1 δηλώνεται στο επάνω μέρος της μονάδας κώδικα.

Αν Βάση επιλογής 1 δηλώνεται τότε οι πίνακες θα ξεκινούν αυτόματα στο 1.

Ωστόσο, θεωρώ προβληματική τη δήλωση μεταβλητών με τέτοιο τρόπο. Οι αναθεωρητές κώδικα ενδέχεται να μην γνωρίζουν ότι οι συστοιχίες ξεκινούν από μηδέν ή από τη δήλωση Option Base 1

Αντ 'αυτού, προτιμώ να δηλώνω ρητά τις θέσεις έναρξης και λήξης των συστοιχιών:

1 Dim intA (2 έως 5) ως ακέραιος

Παρατηρήστε ότι όταν το κάνετε αυτό, μπορείτε να ξεκινήσετε τον πίνακα σε οποιονδήποτε αριθμό (όχι μόνο 1 ή 0).

Δυναμικές συστοιχίες

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

1 Dim intA () ως ακέραιος

Μπορείτε να χρησιμοποιήσετε τη δήλωση ReDim για να καθορίσετε το μέγεθος του πίνακα μετά τη δημιουργία του πίνακα.

1 ReDim intA (2)

Μπορείτε να αλλάξετε το μέγεθος ενός δυναμικού πίνακα ανά πάσα στιγμή. Ωστόσο, όταν χρησιμοποιείτε τη δήλωση ReDim, όλες οι υπάρχουσες τιμές διαγράφονται. Για να διατηρήσετε τις υπάρχουσες τιμές πίνακα, χρησιμοποιήστε ReDim Preserve αντι αυτου.

1 ReDim Preserve intA (2)

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

Παραλλαγές συστοιχιών

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

1 Dim varNames ()

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

Όπως θα δούμε παρακάτω, μπορείτε να προετοιμάσετε ποικίλους πίνακες χρησιμοποιώντας τη συνάρτηση πίνακα (δεν χρειάζεται πρώτα να αλλάξετε το μέγεθος των συστοιχιών)!

Δήλωση ενότητας & δημόσιων συστοιχιών

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

1234 Sub StaticArray ()"δηλώστε τον πίνακα με τιμή LBound 1 και UBound τιμή 4Dim IntA (1 έως 4) ως ακέραιοςΤέλος υπο

Αλλά μπορούν επίσης να δηλωθούν σε ενότητα ή σε παγκόσμιο επίπεδο.

1234567 Επιλογή ρητή«δηλώστε τον πίνακα με τιμή LBound 1 και UBound τιμή 4Dim IntA (1 έως 4) ως ακέραιοςSub StaticArray ()Τέλος υπο

Σε αυτό το παράδειγμα, η μεταβλητή πίνακα μπορεί να κληθεί οπουδήποτε μέσα σε αυτήν την ενότητα κώδικα. Αντ 'αυτού, μπορείτε να δηλώσετε έναν δημόσιο πίνακα που μπορεί να χρησιμοποιηθεί σε ολόκληρο το έργο VBA (δείτε την επόμενη ενότητα).

Δήλωση δημόσιου πίνακα

Δηλώνετε έναν δημόσιο στατικό πίνακα όπως θα δηλώνατε μια δημόσια μεταβλητή.

1 Δημόσια strNames (3) ως συμβολοσειρά

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

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

Αρχικοποίηση συστοιχιών

Μπορείτε να αντιστοιχίσετε τιμές σε έναν στατικό πίνακα με τον ακόλουθο τρόπο.

1234567891011 Sub StaticArray ()«δηλώστε τον πίνακα με τιμή LBound 1 και UBound τιμή 4Dim IntA (1 έως 4) ως ακέραιος"αρχικοποιήστε τον πίνακαIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40«δείξτε το αποτέλεσμα της θέσης 2 του πίνακα στο άμεσο παράθυροDebug. Εκτύπωση IntA (2)Τέλος υπο

Εάν εκτελέσετε την παραπάνω διαδικασία, η τιμή 20 θα εμφανιστεί στο άμεσο παράθυρο.

Μπορείτε επίσης να αντιστοιχίσετε τις τιμές σε έναν Δυναμικό πίνακα με τον ίδιο τρόπο

12345678910111213 Sub DynamicArray ()"δηλώστε έναν δυναμικό πίνακα αλλά παραλείποντας τις δεσμευμένες τιμέςDim IntA () ως ακέραιος"αρχικοποιήστε τον πίνακαReDim IntA (1 έως 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40«δείξτε το αποτέλεσμα της θέσης 2 του πίνακα στο άμεσο παράθυροΣφάλμα. ΕκτύπωσηIntA (2)Τέλος υπο

Συνάρτηση πίνακα

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

12 "συμπληρώστε τον πίνακαintA () = Array (10, 20, 30, 40)

Συμπλήρωση συστοιχίας με βρόχο

Μπορείτε επίσης να συμπληρώσετε πίνακες κάνοντας βρόχο σε μια σειρά κελιών στο Excel

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()"δηλώστε τον πίνακαDim strNames () Ως συμβολοσειρά«δηλώστε έναν ακέραιο για να μετρήσετε τις γραμμές σε ένα εύροςDim n ως ακέραιος"δηλώστε έναν ακέραιο για τον βρόχοDim i As Integer«μετρήστε τις σειρές σε ένα εύροςn = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count«Επανατοποθετήστε τον πίνακα στο ποσό των γραμμών στο εύρος.ReDim strNames (n)Για i = 0 έως nstrNames (i) = Range ("A1"). Offset (i + 1, 0)Επόμενο i'δείξτε τις τιμές στον πίνακαMsgBox Join (strNames ())Τέλος υπο

Επανεκκίνηση συστοιχιών

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

1234567891011121314 Sub StaticArray ()"δηλώστε τον πίνακα με τιμή LBound 1 και UBound τιμή 4Dim IntA (1 έως 4) ως ακέραιος"αρχικοποιήστε τον πίνακαIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40«δείξτε το αποτέλεσμα της θέσης 2 του πίνακα στο άμεσο παράθυροDebug. Εκτύπωση IntA (2)"αρχικοποιήστε ξανά τον πίνακαintA (2) = 200Debug. Εκτύπωση IntA (2)Τέλος υπο

Στο παραπάνω παράδειγμα, ο πίνακας Static θα διατηρήσει όλες τις τιμές, εκτός από την τιμή στη θέση 2 - αυτή η τιμή θα αλλάξει σε 200.

Χρησιμοποιώντας το ReDim

Εάν χρησιμοποιείτε δυναμικό πίνακα, η δήλωση ReDim χρησιμοποιείται για να ορίσετε το μέγεθος του πίνακα σας. Μπορείτε να χρησιμοποιήσετε τη δήλωση ReDim στη συνέχεια στον κώδικά σας για να αλλάξετε το μέγεθος του πίνακα όσες φορές χρειάζεται. Η παρακάτω γραμμή κώδικα θα εκκινήσει εκ νέου τον πίνακα intA για να έχει μέγεθος 2 (Θυμηθείτε - ένας δείκτης πίνακα ξεκινά από το 0!)

1 ReDim intA (1) ως ακέραιος

Έτσι, ο κώδικας που περιλαμβάνει τη δήλωση ReDim θα μοιάζει με το παρακάτω παράδειγμα.

1234567891011121314151617 Sub TestDynamicArray ()"δηλώστε τον πίνακαDim intA () Ως ακέραιοςReDim intA (2)"συμπληρώστε τον πίνακα με αριθμούςintA (0) = 2intA (1) = 5intA (2) = 9«δείξτε τον αριθμό στη θέση 1Debug. Εκτύπωση intA (1)«Επαναλάβετε τον πίνακα για να αλλάξετε το μέγεθοςReDim intA (3)intA (0) = 6intA (1) = 8«δείξτε τον αριθμό στη θέση 1 αυτή τη φοράDebug. Εκτύπωση intA (1)Τέλος υπο

Εάν εκτελέσετε την παραπάνω διαδικασία, η τιμή 5 θα εμφανιστεί στο άμεσο παράθυρο και, στη συνέχεια, μια τιμή 8 θα εμφανιστεί μόλις αλλάξουμε το μέγεθος του πίνακα χρησιμοποιώντας το ReDim και τον ξαναπληρώσουμε. Ωστόσο, καθώς δεν έχουμε συμπληρώσει το IntA (2) και δεν χρησιμοποιήσαμε το Re-Dim Preserve, η τιμή σε αυτήν τη θέση στον πίνακα θα αφαιρεθεί και οι θέσεις 3 και 4 του πίνακα θα είναι μηδενικές.

Χρησιμοποιώντας το ReDim Preserve

Εάν χρησιμοποιούμε το ReDim Preserve, θα διατηρήσει τις αρχικές τιμές που περιέχονται στον πίνακα.

1234567891011121314151617 Sub TestDynamicArray ()"δηλώστε τον πίνακαDim intA () Ως ακέραιοςReDim intA (2)"συμπληρώστε τον πίνακα με αριθμούςintA (0) = 2intA (1) = 5intA (2) = 9«δείξτε τον αριθμό στη θέση 2Debug. Εκτύπωση intA (2)'redim the arrayReDim intA (3)intA (0) = 6intA (1) = 8«δείξτε ξανά τον αριθμό στη θέση 2Debug. Εκτύπωση intA (2)Τέλος υπο

Και στα δύο πλαίσια μηνυμάτων που εμφανίζονται παραπάνω, ο αριθμός 9 θα εμφανιστεί καθώς η δήλωση ReDim Preserve διατηρεί αυτήν την τιμή σε αυτήν τη θέση.

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave