VBA On Error Συνέχιση Επόμενο ή Μετάβαση 0

Αυτό το σεμινάριο θα εξηγήσει το VBA On Error Resume Next and Goto Statement.

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

Στο Σφάλμα Συνέχιση Επόμενο

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

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

Για παράδειγμα, στην παρακάτω διαδικασία:

123456 Sub HideAllSheets ()Dim ws Ως φύλλο εργασίαςΓια κάθε ws Στο ActiveWorkbook.Sheetsws.Visible = ΛάθοςΕπόμενο wsΤέλος υπο

Εάν εκτελέσουμε αυτόν τον κώδικα, θα λάβουμε ένα σφάλμα καθώς δεν μπορούμε να αποκρύψουμε όλα τα φύλλα εργασίας σε ένα βιβλίο εργασίας - τουλάχιστον ένα βιβλίο εργασίας πρέπει να παραμείνει ορατό.

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

1234567 Sub HideAllSheets ()Στο Σφάλμα Συνέχιση ΕπόμενοDim ws Ως φύλλο εργασίαςΓια κάθε ws Στο ActiveWorkbook.Sheetsws.Visible = ΛάθοςΕπόμενο wsΤέλος υπο

Σφάλμα GoTo 0

Εάν δεν έχουμε χειριστή σφαλμάτων στον κωδικό μας, Στο Error Goto 0 είναι η προεπιλεγμένη ρύθμιση του Excel. Αυτό ουσιαστικά σημαίνει ότι όταν προκύψει σφάλμα με Σφάλμα GoTo 0, Η VBA θα σταματήσει την εκτέλεση κώδικα και θα εμφανίσει το τυπικό πλαίσιο μηνύματος σφάλματος, για παράδειγμα:

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

12345678910 Sub ErrorGoTo0 ()Στο Σφάλμα Συνέχιση ΕπόμενοDim ws Ως φύλλο εργασίαςΓια κάθε ws Στο ActiveWorkbook.Sheetsws.Visible = ΛάθοςΕπόμενο wsΣφάλμα GoTo 0"Εκτέλεση περισσότερου κώδικα εδώ για παράδειγμα:ActiveSheet.Name = "Φύλλο1"Τέλος υπο

Τώρα αν επρόκειτο να υπάρξει κάποιο σφάλμα στον κώδικά μας μετά το Στο Error Goto 0 γραμμή, θα εμφανιστεί το προεπιλεγμένο μήνυμα σφάλματος για το Excel. Σε αυτό το παράδειγμα, έχουμε ήδη ένα φύλλο με το όνομα Sheet1 στο ActiveWorkbook ως τον κωδικό πάνω από το Στο Error Goto 0 αποκρύπτει το φύλλο, αλλά δεν το διαγράφει. Στη συνέχεια θα εμφανιστεί το προεπιλεγμένο μήνυμα λάθους Excel που υποδεικνύει ότι το όνομα του φύλλου έχει ήδη ληφθεί.

On Error Goto To Γραμμή

Μπορούμε επίσης να αναγκάσουμε τον κώδικά μας να μετακινηθεί σε διαφορετική γραμμή κώδικα χρησιμοποιώντας το Στο Error Goto Γραμμή που λέει στο VBA να μεταβεί σε μια συγκεκριμένη γραμμή κώδικα εάν εμφανιστεί σφάλμα.

123456789101112 Sub ErrorGoToLine ()Στο Σφάλμα Συνέχιση ΕπόμενοDim ws Ως φύλλο εργασίαςΓια κάθε ws Στο ActiveWorkbook.Sheetsws.Visible = ΛάθοςΕπόμενο wsOn Error GoTo errhandlerActiveSheet.Name = "Φύλλο1"Έξοδος Subλάθος χειριστής:MsgBox ("Υπάρχει ήδη ένα φύλλο που ονομάζεται φύλλο1!", VbCritical)Τέλος υπο

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

1 λάθος:

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

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

Χρειαζόμαστε επίσης ένα Έξοδος Sub στη διαδικασία. Αν υπάρχει ΔΕΝ ένα φύλλο που ονομάζεται Sheet1, τότε η γραμμή κώδικα θα εκτελεστεί και θα μετονομάσει το ενεργό φύλλο σε Sheet1. Στη συνέχεια θέλουμε να τελειώσει ο κώδικας - δεν θέλουμε να συνεχίσει στον χειριστή σφαλμάτων και να εμφανίζει το πλαίσιο μηνυμάτων. Στη συνέχεια, η γραμμή Exit Sub εξέρχεται από τη διαδικασία και σταματά τον κωδικό.

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

wave wave wave wave wave