Πίνακας περιεχομένων:
- Συνέχιση μετά από σφάλμα
- Για να σας βοηθήσουμε να διατηρήσετε ευθεία όλες αυτές τις επιχειρηματικές δραστηριότητες αντιμετώπισης σφαλμάτων, ακολουθεί μια γρήγορη και βρώμικη σύνοψη. Ένα μπλοκ κώδικα αντιμετώπισης σφαλμάτων έχει τα ακόλουθα χαρακτηριστικά:
- Σε ορισμένες περιπτώσεις, είναι απολύτως εντάξει να αγνοήσετε τα σφάλματα. Αυτό συμβαίνει όταν αρχίζει να παίζει η εντολή "Συνέχιση σφάλματος".
Βίντεο: Week 8, continued 2025
Όταν πρέπει να αντιμετωπίσετε σφάλματα στο Excel VBA, μπορείτε να χρησιμοποιήσετε την εντολή OnError. Ωστόσο, υπάρχουν μερικά πράγματα που πρέπει να γνωρίζετε πρώτα. Μπορείτε να χρησιμοποιήσετε την εντολή On Error με τρεις τρόπους.
Σύνταξη | Τι κάνει |
---|---|
Σφάλμα GoTo ετικέτα | Μετά την εκτέλεση αυτής της δήλωσης, η VBA συνεχίζει την εκτέλεση με τη δήλωση
Πρέπει να συμπεριλάβετε μια παύλα μετά την ετικέτα έτσι ώστε η VBA να την αναγνωρίζει ως ετικέτα. |
Σφάλμα GoTo 0 | Μετά την εκτέλεση αυτής της δήλωσης, η VBA συνεχίζει την κανονική συμπεριφορά ελέγχου σφαλμάτων
. Χρησιμοποιήστε αυτήν τη δήλωση αφού χρησιμοποιήσετε μία από τις άλλες δηλώσεις On Error ή όταν θέλετε να καταργήσετε το χειρισμό σφαλμάτων στη διαδικασία σας. |
Κατά τη συνέχιση του σφάλματος Επόμενο | Μετά την εκτέλεση αυτής της δήλωσης, η VBA απλώς αγνοεί όλα τα σφάλματα
και συνεχίζει την εκτέλεση με την επόμενη δήλωση. |
Συνέχιση μετά από σφάλμα
Σε ορισμένες περιπτώσεις, απλά θέλετε η ρουτίνα να τελειώσει με χαρά όταν εμφανιστεί ένα σφάλμα. Για παράδειγμα, μπορείτε να εμφανίσετε ένα μήνυμα που περιγράφει το σφάλμα και στη συνέχεια να τερματίσετε τη διαδικασία. (Το παράδειγμα EnterSquareRoot5 που φαίνεται νωρίτερα χρησιμοποιεί αυτή την τεχνική.) Σε άλλες περιπτώσεις, θέλετε να ανακτήσετε από το σφάλμα, αν είναι δυνατόν.
Για να ανακτήσετε ένα σφάλμα, πρέπει να χρησιμοποιήσετε μια δήλωση Resume. Αυτό καθαρίζει τη συνθήκη σφάλματος και σας επιτρέπει να συνεχίσετε την εκτέλεση σε κάποια θέση. Μπορείτε να χρησιμοποιήσετε τη δήλωση Resume με τρεις τρόπους.
Σύνταξη | Τι κάνει |
---|---|
Συνέχεια | Η εκτέλεση συνεχίζεται με τη δήλωση που προκάλεσε το σφάλμα. Χρησιμοποιήστε το
αν ο κώδικας αντιμετώπισης σφαλμάτων διορθώνει το πρόβλημα και είναι εντάξει για να συνεχίσετε. |
Συνέχιση Επόμενη | Η εκτέλεση συνεχίζεται με τη δήλωση αμέσως μετά τη δήλωση
που προκάλεσε το σφάλμα. Αυτό ουσιαστικά αγνοεί το σφάλμα . |
Επανάληψη ετικέτα | Η εκτέλεση συνεχίζεται στην ετικέτα που καθορίζετε. |
Αυτή η διαδικασία έχει άλλη ετικέτα: TryAgain.Εάν παρουσιαστεί σφάλμα, η εκτέλεση συνεχίζεται στην ετικέτα BadEntry και ο κώδικας εμφανίζει το παρακάτω μήνυμα. Αν ο χρήστης απαντήσει κάνοντας κλικ στο κουμπί Ναι, η εντολή Resume ξεκινά και η εκτέλεση μεταβαίνει ξανά στην ετικέτα TryAgain. Εάν ο χρήστης κάνει κλικ Όχι, η διαδικασία λήγει.
Εάν παρουσιαστεί σφάλμα, ο χρήστης μπορεί να αποφασίσει αν θα προσπαθήσει ξανά.
Παρατηρήστε ότι το μήνυμα σφάλματος περιλαμβάνει επίσης τον αριθμό σφάλματος μαζί με την "επίσημη" περιγραφή σφάλματος.Η εντολή Resume διαγράφει την κατάσταση σφάλματος πριν συνεχίσει. Για να το δείτε αυτό, προσπαθήστε να αντικαταστήσετε την ακόλουθη πρόταση για την δεύτερη έως τελευταία δήλωση στο προηγούμενο παράδειγμα:
Εάν Ans = vbYes Στη συνέχεια GoTo TryAgain
Ο κώδικας δεν λειτουργεί σωστά αν χρησιμοποιείτε GoTo αντί Resume. Για να αποδείξετε, εισαγάγετε έναν αρνητικό αριθμό. Παίρνετε την ερώτηση σφάλματος. Κάντε κλικ στο κουμπί Ναι για να δοκιμάσετε ξανά και, στη συνέχεια, πληκτρολογήστε
έναν άλλο αρνητικό αριθμό. Αυτό το δεύτερο σφάλμα δεν παγιδεύεται επειδή η αρχική κατάσταση σφάλματος δεν εκκαθαρίστηκε. Επεξεργασία σφαλμάτων με σύντομη περιγραφή
Για να σας βοηθήσουμε να διατηρήσετε ευθεία όλες αυτές τις επιχειρηματικές δραστηριότητες αντιμετώπισης σφαλμάτων, ακολουθεί μια γρήγορη και βρώμικη σύνοψη. Ένα μπλοκ κώδικα αντιμετώπισης σφαλμάτων έχει τα ακόλουθα χαρακτηριστικά:
Αρχίζει αμέσως μετά την ετικέτα που καθορίζεται στην εντολή On Error.
-
Θα πρέπει να προσεγγιστεί από τη μακροεντολή σας μόνο σε περίπτωση εμφάνισης σφάλματος. Αυτό σημαίνει ότι πρέπει να χρησιμοποιήσετε μια δήλωση όπως Exit Sub ή Exit Function αμέσως πριν την ετικέτα.
-
Ίσως χρειαστεί μια δήλωση Resume. Εάν επιλέξετε να μην ακυρωθεί η διαδικασία όταν παρουσιαστεί σφάλμα, πρέπει να εκτελέσετε μια δήλωση Resume πριν επιστρέψετε στον κύριο κώδικα.
-
Γνωρίζοντας πότε να αγνοήσετε τα σφάλματα
Σε ορισμένες περιπτώσεις, είναι απολύτως εντάξει να αγνοήσετε τα σφάλματα. Αυτό συμβαίνει όταν αρχίζει να παίζει η εντολή "Συνέχιση σφάλματος".
Το ακόλουθο παράδειγμα βγάζει από κάθε κελί στην επιλεγμένη περιοχή και μετατρέπει την τιμή στην τετραγωνική ρίζα της. Αυτή η διαδικασία δημιουργεί ένα μήνυμα σφάλματος αν οποιοδήποτε κελί στην επιλογή περιέχει έναν αρνητικό αριθμό ή κείμενο:
Sub SelectionSqrt () Dim κυψέλη As Range If TypeName (Επιλογή) <> "range" Στη συνέχεια Exit Sub Για κάθε κελί στην επιλογή Cell. Value = Sqr (τιμή κυψέλης) Επόμενο κελί End Sub
Σε αυτή την περίπτωση, ίσως θέλετε να παραλείψετε απλά οποιοδήποτε κύτταρο που περιέχει μια τιμή που δεν μπορείτε να μετατρέψετε σε τετραγωνική ρίζα. Μπορείτε να δημιουργήσετε όλα τα είδη των δυνατοτήτων ελέγχου σφαλμάτων χρησιμοποιώντας τις δομές If-Then, αλλά μπορείτε να δημιουργήσετε μια καλύτερη (και απλούστερη) λύση απλά αγνοώντας τα σφάλματα που συμβαίνουν.
Η ακόλουθη ρουτίνα το επιτυγχάνει χρησιμοποιώντας την εντολή On Error Resume Next:
Sub SelectionSqrt () Dim κυψέλη ως εμβέλεια εάν TypeName (Επιλογή) <> "range" Στη συνέχεια Exit Sub On Σφάλμα Συνέχεια Επόμενο Για κάθε κελί στην επιλογή κύτταρο. Value = Sqr (τιμή κυψέλης) Επόμενο κελί End Sub
Γενικά, μπορείτε να χρησιμοποιήσετε μια παράμετρο On Error Resume Next εάν θεωρήσετε ότι τα σφάλματα είναι αβλαβή ή δεν έχουν σημασία για την εργασία σας.