Πώς να αγνοήσετε τα σφάλματα χρησιμοποιώντας το VBA On Error Resume Next Statement;

Πίνακας περιεχομένων

Excel VBA On Error Συνέχιση Επόμενο

Το VBA On Error Resume Next είναι μια δήλωση χειριστή σφαλμάτων. Εάν το σφάλμα παρουσιάζεται κατά την εκτέλεση του κώδικα αντί να εμφανίζεται σφάλμα για να συνεχίσετε την επόμενη γραμμή κώδικα αγνοώντας το μήνυμα σφάλματος, μπορείτε να χρησιμοποιήσετε αυτήν τη δήλωση.

Όσοι γράφουν κωδικούς τακτικά στο excel VBA γνωρίζουν ότι μπορεί να λάβουν σφάλματα ακόμη και μετά τη σύνταξη ικανοποιητικών κωδικών, αλλά θέλουν να αγνοήσουν αυτό το σφάλμα και να συνεχίσουν να τρέχουν με τις επόμενες γραμμές κώδικα. Ένα τυπικό παράδειγμα λήψης μηνύματος σφάλματος είναι όταν η συνάρτηση φύλλου εργασίας VLOOKUP δεν εντοπίζει την τιμή αναζήτησης από τον πίνακα πίνακα. Δεν θα επιστρέψει # N / A σφάλμα. μάλλον, θα ρίξει το σφάλμα. Ως "Δεν είναι δυνατή η λήψη της ιδιότητας VLOOKUP της κλάσης λειτουργίας φύλλου εργασίας."

Εάν δεν γνωρίζετε γιατί λαμβάνουμε αυτό το σφάλμα, τότε είναι πολύ δύσκολο να διορθώσετε το σφάλμα. Στο VBA, έχουμε μια δυνατότητα που ονομάζεται " On Error Resume Next ".

Τι κάνει το On Error Resume Next στο VBA;

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

Χρησιμοποιώντας τη δήλωση VBA On Error Resume Next, μπορούμε να αγνοήσουμε το σφάλμα και να συνεχίσουμε την επόμενη γραμμή κώδικα.

Παράδειγμα # 1

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

Έχω γράψει κωδικούς για να αποκρύψω τα φύλλα "Πωλήσεις &" Κέρδος "και παρακάτω είναι ο κωδικός.

Κώδικας:

Sub On_Error () Φύλλα εργασίας ("Πωλήσεις"). Ορατό = xlVeryHidden Φύλλα εργασίας ("Κέρδος 2019"). Ορατό = xlVeryHidden Φύλλα εργασίας ("Κέρδος"). Ορατό = xlVeryHidden End Sub

Τώρα θα ξεκινήσω να τρέχω τον κωδικό γραμμή προς γραμμή χρησιμοποιώντας το πλήκτρο F8 .

Εάν πατήσω ξανά το πλήκτρο F8 , θα κρύψει το φύλλο με το όνομα " Πωλήσεις ".

Τώρα πατήστε το πλήκτρο F8 για άλλη μια φορά και δείτε τι συμβαίνει.

Έχουμε ένα σφάλμα "Συνδρομή εκτός εμβέλειας" επειδή η τρέχουσα γραμμή κώδικα λέει τα παρακάτω.

Φύλλα εργασίας ("Κέρδος 2019"). Ορατό = xlVeryHidden

Προσπαθεί να κρύψει το φύλλο εργασίας με το όνομα " Κέρδος 2019 ", αλλά δεν υπάρχει φύλλο εργασίας με το όνομα "Κέρδος 2019".

Σε αυτές τις περιπτώσεις, εάν το φύλλο εργασίας δεν υπάρχει στο βιβλίο εργασίας, πρέπει να αγνοήσουμε το σφάλμα και να συνεχίσουμε να εκτελούμε τον κώδικα αγνοώντας το σφάλμα "Συνδρομή εκτός εμβέλειας".

Η επόμενη γραμμή στον κώδικα λέει

Φύλλα εργασίας ("Κέρδος"). Ορατό = xlVeryHidden

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

Για να αγνοήσουμε αυτό το σφάλμα, πρέπει να προσθέσουμε τη δήλωση "On Error Resume Next".

Κώδικας:

Sub On_Error () On Error Resume Next Worksheets ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

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

Τώρα είμαι στη γραμμή στην οποία δόθηκε το σφάλμα στο παρελθόν, πατήστε το πλήκτρο F8 και δείτε τι συμβαίνει.

Έχω πάει στην επόμενη γραμμή κώδικα χωρίς να εμφανίσω κανένα σφάλμα λόγω της δήλωσης που έχουμε προσθέσει στην κορυφή, η οποία είναι η δήλωση "On Error Resume Next".

Παράδειγμα # 2

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

Έχουμε δύο πίνακες πάνω από τον πρώτο πίνακα που έχουν το όνομα Emp και τα στοιχεία του μισθού τους στον δεύτερο πίνακα, και έχουμε μόνο το όνομα Emp, οπότε χρησιμοποιώντας το VLOOKUP, πρέπει να πάρουμε τα στοιχεία του μισθού από τον αριστερό πίνακα.

Παρακάτω είναι ο κωδικός που είχα γράψει για να ανακτήσω τις λεπτομέρειες.

Κώδικας:

Sub On_Error1 () Dim k As Long For k = 2 to 8 Cells (k, 6). Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Next k End Υπο

Τώρα εκτελέστε τον κωδικό γραμμή προς γραμμή και δείτε τι συμβαίνει.

Κατά την εκτέλεση του πρώτου κωδικού κελιού, έχουμε το αποτέλεσμα για τον πρώτο υπάλληλο. Επαναλάβετε το ίδιο και για τον δεύτερο υπάλληλο.

Αυτή τη φορά λάβαμε το μήνυμα σφάλματος. Ας δούμε το δεύτερο όνομα υπαλλήλου στον πίνακα.

Το δεύτερο όνομα υπαλλήλου είναι "Gayathri", αλλά αυτό το όνομα δεν υπάρχει στον πρώτο πίνακα, επομένως η συνάρτηση VBA VLOOKUP δεν επιστρέφει το σφάλμα "# N / A" όταν το VLOOKUP δεν εντοπίσει την τιμή αναζήτησης από το τραπέζι; Αντίθετα, δίνει το παραπάνω μήνυμα σφάλματος.

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

Πρέπει να προσθέσουμε τη δήλωση "On Error Resume Next" μέσα στο βρόχο.

Κώδικας:

Sub On_Error1 () Dim k As Long For k = 2 to 8 On Error Resume Next Cells (k, 6). Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0 ) Επόμενο k End Sub

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

Δύο ονόματα υπαλλήλων, " Gayathri & Karanveer ", δεν υπάρχουν στη λίστα, επομένως αυτοί οι κωδικοί γραμμής πρέπει να έχουν αντιμετωπίσει σφάλμα, καθώς έχουμε προσθέσει μια δήλωση χειριστή σφαλμάτων " On Error Resume Next ", αγνόησε αυτήν τη γραμμή κώδικα και συνεχίστηκε για τον επόμενο υπάλληλο.

Πράγματα που πρέπει να θυμάστε εδώ

  • Το "On Error Resume Next" είναι η δήλωση χειρισμού σφαλμάτων όταν πρέπει να αγνοήσουμε το γνωστό σφάλμα.
  • Εάν θέλετε να αγνοήσετε το μήνυμα σφάλματος μόνο για ένα συγκεκριμένο σύνολο κώδικα, κλείστε την επόμενη δήλωση συνέχισης σφάλματος προσθέτοντας τη δήλωση " On Error GoTo 0 ".

ενδιαφέροντα άρθρα...