Εγγραφή VBA εκτός εύρους (Σφάλμα χρόνου εκτέλεσης '9') | Γιατί παρουσιάζεται αυτό το σφάλμα;
Εγγραφή Excel VBA εκτός εύρους
Η συνδρομή εκτός εμβέλειας είναι ένα σφάλμα που αντιμετωπίζουμε στο VBA όταν προσπαθούμε να αναφέρουμε κάτι ή μια μεταβλητή που δεν υπάρχει σε έναν κώδικα, για παράδειγμα, ας υποθέσουμε ότι δεν έχουμε μια μεταβλητή με το όνομα x αλλά χρησιμοποιούμε τη λειτουργία msgbox στο x θα συναντήσει σφάλμα συνδρομής εκτός εύρους.
Προέκυψε σφάλμα VBA Subscript out of range επειδή το αντικείμενο στο οποίο προσπαθούμε να αποκτήσουμε πρόσβαση δεν υπάρχει. Αυτός είναι ένας τύπος σφάλματος στην κωδικοποίηση VBA και αυτό είναι το "Run Time Error 9". Είναι σημαντικό να κατανοήσετε τις έννοιες για να γράψετε αποδοτικό κώδικα και είναι ακόμη πιο σημαντικό να κατανοήσετε το σφάλμα του κώδικα VBA για την αποτελεσματική αποσφαλμάτωση του κώδικα.
Εάν το σφάλμα κωδικοποίησης και δεν ξέρετε ποιο είναι αυτό το σφάλμα είναι όταν λείπετε.
Ένας γιατρός δεν μπορεί να δώσει φάρμακο στον ασθενή του χωρίς να γνωρίζει ποια είναι η ασθένεια. Σίγουρα οι γιατροί και οι ασθενείς, και οι δύο γνωρίζουν ότι υπάρχει μια ασθένεια (σφάλμα), αλλά είναι σημαντικό να κατανοήσουμε την ασθένεια (σφάλμα) παρά να δώσουμε φάρμακο σε αυτήν. Εάν μπορείτε να καταλάβετε το σφάλμα τέλεια, τότε είναι πολύ πιο εύκολο να βρείτε τη λύση.
Σε παρόμοια σημείωση σε αυτό το άρθρο, θα δούμε ένα από τα σημαντικά σφάλματα που αντιμετωπίζουμε συνήθως κανονικότητα, δηλαδή το σφάλμα "Subscript Out of Range" στο Excel VBA.
Τι είναι το Subscript out of Range Error στο Excel VBA;
Για παράδειγμα, εάν αναφέρετε το φύλλο που δεν υπάρχει υπάρχει το βιβλίο εργασίας, λαμβάνουμε το σφάλμα χρόνου εκτέλεσης 9: "Εγγραφή εκτός εύρους".
Εάν κάνετε κλικ στο κουμπί Τέλος, θα τερματίσει την υποδιαδικασία, εάν κάνετε κλικ στο εντοπισμό σφαλμάτων, θα σας μεταφέρει στη γραμμή του κώδικα όπου αντιμετώπισε σφάλμα και η βοήθεια θα σας μεταφέρει στη σελίδα του ιστότοπου της Microsoft.
Γιατί προκύπτει σφάλμα συνδρομής εκτός εύρους;
Όπως είπα ως γιατρός σημαντικό να βρω τον νεκρό πριν σκεφτώ το φάρμακο. Το VBA Subscript out of range παρουσιάζεται όταν η γραμμή κώδικα δεν διαβάζει το αντικείμενο που εισαγάγαμε.
Για παράδειγμα, δείτε την παρακάτω εικόνα, έχω τρία φύλλα που ονομάζονται Sheet1, Sheet2, Sheet3.
Τώρα στον κώδικα, έχω γράψει τον κωδικό για να επιλέξω το φύλλο "Πωλήσεις".
Κώδικας:
Υπο-φύλλα Macro2 () ("Πωλήσεις"). Επιλέξτε End Sub
Εάν εκτελέσω αυτόν τον κωδικό χρησιμοποιώντας το πλήκτρο F5 ή χειροκίνητα, θα καταλήξω να λάβω το σφάλμα χρόνου εκτέλεσης 9: "Εγγραφή εκτός εύρους".
Αυτό συμβαίνει επειδή προσπάθησα να αποκτήσω πρόσβαση στο αντικείμενο του φύλλου εργασίας "Πωλήσεις" που δεν υπάρχει στο βιβλίο εργασίας. Αυτό είναι σφάλμα χρόνου εκτέλεσης, επειδή αυτό το σφάλμα προέκυψε κατά την εκτέλεση του κώδικα.
Ένα άλλο κοινό σφάλμα συνδρομής που λαμβάνουμε είναι όταν αναφερόμαστε στο βιβλίο εργασίας που δεν υπάρχει. Για παράδειγμα δείτε τον παρακάτω κώδικα.
Κώδικας:
Υπο Macro1 () Dim Wb As Workbook Set Wb = Workbooks ("Salary Sheet.xlsx") End Sub
Ο παραπάνω κώδικας αναφέρει ότι η μεταβλητή WB πρέπει να είναι ίδια με το βιβλίο εργασίας "Salary Sheet.xlsx". Από τώρα, αυτό το βιβλίο εργασίας δεν έχει ανοίξει στον υπολογιστή μου. Εάν εκτελέσω αυτόν τον κωδικό χειροκίνητα ή μέσω του πλήκτρου F5, θα λάβω το σφάλμα χρόνου εκτέλεσης 9: "Εγγραφή εκτός εύρους".
Αυτό οφείλεται στο βιβλίο εργασίας που αναφέρομαι, το οποίο είτε δεν είναι ανοιχτό από τώρα ή δεν υπάρχει καθόλου.
Σφάλμα εγγραφής VBA σε πίνακες
Όταν δηλώνετε τον πίνακα ως δυναμικό πίνακα και εάν δεν χρησιμοποιείτε τη λέξη DIM ή REDIM στο VBA για να ορίσετε το μήκος ενός πίνακα, συνήθως λαμβάνουμε το VBA Subscript εκτός εύρους σφάλματος Για παράδειγμα, δείτε τον παρακάτω κώδικα.
Κώδικας:
Sub Macro3 () Dim MyArray () Όσο το Long MyArray (1) = 25 End Sub
Στα παραπάνω, έχω δηλώσει τη μεταβλητή ως πίνακα αλλά δεν έχω εκχωρήσει σημείο έναρξης και λήξης, αλλά έχω αντιστοιχίσει αμέσως στον πρώτο πίνακα την τιμή των 25.
Εάν εκτελέσω αυτόν τον κωδικό χρησιμοποιώντας το πλήκτρο F5 ή χειροκίνητα τότε, θα λάβουμε το σφάλμα χρόνου εκτέλεσης 9: "Εγγραφή εκτός εύρους".
Για να διορθώσω αυτό το ζήτημα, πρέπει να αντιστοιχίσω το μήκος ενός πίνακα χρησιμοποιώντας τη λέξη Redim.
Κώδικας:
Sub Macro3 () Dim MyArray () As Long ReDim MyArray (1 to 5) MyArray (1) = 25 End Sub
Αυτός ο κωδικός δεν δίνει σφάλματα.
Πώς να εμφανίσετε σφάλματα στο τέλος του κώδικα VBA;
Εάν δεν θέλετε να δείτε το σφάλμα ενώ ο κώδικας είναι σε λειτουργία και χρειάζεται αλλά χρειάζεται μια λίστα σφαλμάτων στο τέλος, τότε πρέπει να χρησιμοποιήσετε το πρόγραμμα χειρισμού σφαλμάτων "On Error Resume". Κοιτάξτε τον παρακάτω κώδικα.
Κώδικας:
Sub Macro1 () Dim Wb As Workbook On Error Resume Next Set Wb = Workbooks ("Salary Sheet.xlsx") MsgBox Err.Description End Sub
Όπως έχουμε δει, αυτός ο κώδικας θα ρίξει το σφάλμα χρόνου εκτέλεσης 9: «Εγγραφή εκτός εύρους στο Excel VBA . Αλλά πρέπει να χρησιμοποιήσω το πρόγραμμα χειρισμού σφαλμάτων On Error Resume Next στο VBA κατά την εκτέλεση του κώδικα, δεν θα λάβουμε μηνύματα σφάλματος, αλλά στο πλαίσιο μηνυμάτων στο τέλος μου εμφανίζεται η περιγραφή σφάλματος όπως αυτή.
Μπορείτε να πραγματοποιήσετε λήψη του προτύπου εγγραφής Excel VBA εκτός εύρους εδώ: - Πρότυπο συνδρομής VBA εκτός εύρους