Πώς να χρησιμοποιήσετε τον πίνακα Excel VBA;
Μπορείτε να εκτελέσετε τις μακροεντολές είτε από το Visual Basic Editor τοποθετώντας τον κέρσορα στη μακροεντολή και πατώντας το πλήκτρο F5, είτε από το Excel ανοίγοντας το παράθυρο διαλόγου Μακροεντολές (ALT+F8) επιλέγοντας τη μακροεντολή για εκτέλεση και κάνοντας κλικ στο Εκτέλεση. Είναι καλύτερο να εκτελέσετε αυτές τις μακροεντολές από το Visual Basic Editor χρησιμοποιώντας Debug> Step Into (πατώντας F8) ώστε να μπορείτε να τα παρακολουθείτε καθώς λειτουργούν. Εντολή Εάν η καρτέλα προγραμματιστή δεν βρίσκεται στη κορδέλα…
- Ανοίξτε το Excel.
- Μεταβείτε στο VBA Editor (πατήστε Alt + F11)
- Μεταβείτε στο άμεσο παράθυρο. (Ctrl + G)
- Γράψτε παρακάτω τον κωδικό.
- Application.ShowDevTools = Αλήθεια
Πώς να εισαγάγετε κώδικα VBA στο Excel
- Παω σε Προγραμματιστής Καρτέλα> Κώδικας Ομάδα> Visual Basic
- Κάντε κλικ Εισάγετε > Μονάδα μέτρησης.
- Θα ανοίξει μια κενή μονάδα για εσάς.
- Γράψτε / Επικολλήστε τον κωδικό που παρέχεται σε αυτήν την ενότητα
Πώς να εκτελέσετε κώδικα VBA στο Excel
- Επιλέξτε οπουδήποτε ανάμεσα στον Κώδικα, Sub… End Sub
- Κάντε κλικ στην επιλογή Εκτέλεση & Εκτέλεση Sub ή F5
Μεταβλητές στατικού πίνακα
Αντί να χρησιμοποιήσετε πολλές μοναδικές μεταβλητές για να αποθηκεύσετε πληροφορίες, μπορείτε να χρησιμοποιήσετε μια μεταβλητή πίνακα.
Όταν γνωρίζετε πόσα στοιχεία πρέπει να αποθηκεύσετε στον πίνακα, μπορείτε να χρησιμοποιήσετε μια στατική μεταβλητή πίνακα όπως αυτή:
Κώδικας
Sub TestStaticArray ()
'αποθηκεύει 10 ονόματα στο βιβλίο εργασίας στη μεταβλητή πίνακα MyNames ()
Dim MyNames (1 έως 10) Το As String 'δηλώνει μια στατική μεταβλητή πίνακα
Dim iCount As Integer
Για iCount = 1 To ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Επόμενο iCount
Erase MyNames () 'διαγράφει το μεταβλητό περιεχόμενο, ελευθερώνει κάποια μνήμη
Τέλος υπο
Αποκρυπτογραφώ
Dim MyNames (1 έως 10) ως συμβολοσειρά
Έχουμε διαστασιοποιήσει ένα μόνο επαληθεύσιμο MyNames ως συμβολοσειρά, το οποίο μπορεί να χωρέσει 10 στοιχεία σε αυτό. Έτσι το MyNames veriable είναι ένας τύπος πίνακα.
Dim iCount As Integer
Έχουμε δηλώσει μια μεμονωμένη μεταβλητή iCount ως ακέραιο, η οποία μπορεί να περιέχει μόνο τιμή τύπου αριθμητικού ακέραιου
Για iCount = 1 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets.Count θα μας δώσει τον αριθμό φύλλων σε ένα τετράδιο εργασίας. Αυτό το βιβλίο εργασίας, αναφέρεται στο τετράδιο εργασίας, στο οποίο γράφτηκε ο κώδικας.
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Χρησιμοποιώντας ένα βρόχο, εκχωρούμε, το όνομα κάθε φύλλου σε ένα μόνο επαληθεύσιμο που ονομάζεται MyNames. Το MyNames είναι ένας τύπος πίνακα επαληθεύσιμος, οπότε θα αποθηκεύει, το όνομα κάθε φύλλου σε κάθε στοιχείο του πίνακα.
Debug.Print MyNames (iCount)
Ακριβώς μετά την εκχώρηση της τιμής σε κάθε στοιχείο ενός πίνακα, θα εκτυπώσει το ίδιο στο ImmediateWindow, από προεπιλογή στο κάτω μέρος του παραθύρου VBA. Μπορείτε να δείτε την εκχώρηση κάθε τιμής και να εμφανίσετε την τιμή της στο ImmediateWindow.
Επόμενο iCount
Επόμενο χρησιμοποιείται για να πει Για βρόχο στο Excel VBA, να επαναλάβει την ίδια εργασία ξανά, αυξάνοντας τον μετρητή iCount, έως ότου το iCount έφτασε στο συνολικό αριθμό φύλλων, στο βιβλίο εργασίας.
Μεταβλητές δυναμικού πίνακα
Οι μεταβλητές δυναμικού πίνακα είναι χρήσιμες όταν δεν γνωρίζετε εκ των προτέρων πόσα στοιχεία χρειάζεστε για να αποθηκεύσετε πληροφορίες.
Δηλώνετε μεταβλητές δυναμικού πίνακα ακριβώς όπως μια μεταβλητή στατικού πίνακα, εκτός από το ότι δεν δίνετε πληροφορίες σχετικά με το μέγεθος του πίνακα.
Στο παραπάνω παράδειγμα (Dim MyNames (1 έως 10) ως συμβολοσειρά) εάν Αριθμός φύλλων μεγαλύτερο από 10, θα γίνει μέσω σφάλματος, καθώς τα MyNames δεν θα μπορούν να αποθηκεύσουν περισσότερα από 10 Στοιχεία.
Κώδικας
Sub TestDynamicArray ()
'αποθηκεύει όλα τα ονόματα στο βιβλίο εργασίας στη μεταβλητή πίνακα MyNames ()
Dim MyNames () Ως String 'δηλώνει μια δυναμική μεταβλητή πίνακα
Dim iCount As Integer
Dim Max ως ακέραιος
Max = ThisWorkbook.Sheets.Count 'βρίσκει το μέγιστο μέγεθος πίνακα
ReDim MyNames (1 To Max) 'δηλώνει τη μεταβλητή πίνακα με το απαραίτητο μέγεθος
Για iCount = 1 έως μέγ
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox MyNames (iCount)
Επόμενο iCount
Erase MyNames () 'διαγράφει το μεταβλητό περιεχόμενο, απελευθερώνει κάποια μνήμη
Τέλος υπο
Αποκρυπτογραφώ
Dim MyNames () Ως συμβολοσειρά
Έχουμε διαστασιοποίηση ενός μόνο επαληθεύσιμου MyNames ως συμβολοσειρά, το οποίο είναι τύπος πίνακα, λόγω ανοίγματος και κλεισίματος της Παράθεσης, μετά το επαληθεύσιμο όνομα, αλλά δεν θα μπορούμε να αποθηκεύσουμε δεδομένα σε αυτό, καθώς δεν έχουμε παράσχει το ανώτερο επίπεδο.
ReDim MyNames (1 έως Max)
Το Redim χρησιμοποιείται για να επαναδιαστασιοποιήσει τον πίνακα, Τώρα θα εκχωρήσει το ανώτερο επίπεδο του Τύπου πίνακα Veriable.
Σε αυτήν την περίπτωση, συνολικός αριθμός φύλλων στο Τετράδιο Εργασίας (Max = ThisWorkbook.Sheets.Count)
MsgBox MyNames (iCount)
Στο τελευταίο παράδειγμα, έχουμε εκτυπώσει την τιμή σε μεταβλητές στο άμεσο παράθυρο, αυτή τη φορά, εκτυπώνουμε την τιμή σε ένα MessageBox, το οποίο θα εμφανιστεί έτσι…
Εάν γνωρίζετε ότι θα χρειαστείτε μια μεταβλητή πίνακα με 1000 στοιχεία, χρησιμοποιήστε μια στατική μεταβλητή. Το αρνητικό είναι ότι θα χρησιμοποιείτε μνήμη για 1000 αντικείμενα κάθε φορά, επίσης στις περιπτώσεις που αποθηκεύετε μόνο πληροφορίες για 10 αντικείμενα. Εάν χρησιμοποιείτε μεταβλητή δυναμικού πίνακα, θα χρησιμοποιήσετε τη μνήμη πιο αποδοτική.
Μερικές φορές δεν είναι δυνατό να υπολογιστεί πόσο μεγάλη θα πρέπει να είναι η μεταβλητή πίνακα. Σε αυτές τις περιπτώσεις το μέγεθος της μεταβλητής συστοιχίας πρέπει να αυξηθεί όσο είναι απαραίτητο. Όταν χρησιμοποιείτε α ReDim-δήλωση για να αλλάξετε το μέγεθος της μεταβλητής συστοιχίας, το περιεχόμενο της μεταβλητής διαγράφεται επίσης για να αποφευχθεί η διαγραφή των περιεχομένων της μεταβλητής όταν Redim η μεταβλητή πίνακα που θα χρειαστεί να χρησιμοποιήσετε το ReDim Preserve-δήλωση.
Κώδικας
Sub GetFileNameList ()
'αποθηκεύει όλα τα ονόματα αρχείων στον τρέχοντα φάκελο
Dim FolderFiles () Ως String 'δηλώνει μια μεταβλητή δυναμικού πίνακα
Dim tmp As String, fCount As Integer
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Ενώ tmp Empty
fCount = fCount + 1
ReDim Preserve FolderFiles (1 σε fCount)
'δηλώνει ξανά τη μεταβλητή πίνακα (μέγεθος+1)
FolderFiles (fCount) = tmp
tmp = Dir
Διευθύνω
MsgBox fCount & "τα ονόματα αρχείων βρίσκονται στο φάκελο" & CurDir
Erase FolderFiles 'διαγράφει το μεταβλητό περιεχόμενο, απελευθερώνει κάποια μνήμη
Τέλος υπο
Αποκρυπτογραφώ
Dim FolderFiles () Ως συμβολοσειρά
Έχουμε διαστασιοποίηση ενός μόνο επαληθεύσιμου FolderFiles ως συμβολοσειρά, ο οποίος είναι τύπος πίνακα, λόγω ανοίγματος & κλεισίματος της Παράθεσης, μετά το επαληθεύσιμο όνομα, αλλά δεν θα μπορούμε να αποθηκεύσουμε δεδομένα σε αυτό, καθώς δεν έχουμε παράσχει το ανώτερο επίπεδο.
tmp = Dir ("D: \ Test \*.*")
Η εντολή Dir λειτουργεί ως εξερευνητής, ο οποίος μπορεί να κρατήσει το όνομα όλων των αρχείων και φακέλων σε έναν κατάλογο. Μπορείτε επίσης να περιορίσετε όλα τα αρχεία σε ορισμένα συγκεκριμένα κριτήρια. Το Dir ("D: \ Test \*. Pdf") θα περιοριστεί από όλα τα αρχεία μόνο σε αρχεία PDF ή επέκταση.
Ενώ tmp Empty
Αντί για βρόχο For για το Excel VBA, αυτή τη φορά, επαναλαμβάνουμε την ίδια ενέργεια, χρησιμοποιώντας το Excel VBA WHILE LOOP, όπου τα κριτήρια λήξης του βρόχου ορίστηκαν ως tmp όχι ίσα με κενά. Έτσι, έως ότου, υπήρχε οποιαδήποτε τιμή στο tmp επαληθεύσιμο, ο βρόχος θα λειτουργήσει.
ReDim Preserve FolderFiles (1 σε fCount)
Τα επαληθεύσιμα FolderFiles του πίνακα δεν έχουν ανώτερο επίπεδο στην αρχική θέση. Αλλά, σε κάθε επανάληψη θα αυξάνει το ανώτερο επίπεδο με την εντολή ReDim. Στην πρώτη εκτέλεση 1, στη συνέχεια 2… και ούτω καθεξής, μέχρι το fCount. Ωστόσο, κάθε φορά που αυξάνεται το ανώτερο επίπεδο, θα χάνει όλες τις ήδη εκχωρημένες μεταβλητές. Χρησιμοποιώντας την εντολή Διατήρηση, μπορούμε να κρατήσουμε ή να αποθηκεύσουμε την ήδη εκχωρημένη τιμή.
Διευθύνω
Ο Wend έλεγε στο For Loops στο VBA, να επαναλάβει ξανά την ίδια εργασία, μέχρι να πληρούνται τα κριτήρια.
MsgBox fCount & "τα ονόματα αρχείων βρίσκονται στο φάκελο" & CurDir
Σε κάθε επανάληψη, το fcout θα αυξάνεται με +1 και η τελική τιμή θα αθροίζει τα αρχεία που βρίσκονται σε αυτόν τον κατάλογο / φάκελο. Η εντολή CurDir δίνει το όνομα του τρέχοντος καταλόγου. Σε αυτή την περίπτωση "D: \ Test"