Δηλώσεις σφαλμάτων VBA | Κορυφαίοι 3 τρόποι αντιμετώπισης σφαλμάτων

Δήλωση σφάλματος Excel VBA On

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

Η πρόβλεψη του σφάλματος στον κώδικα σας κάνει επαγγελματίες στην κωδικοποίηση VBA. Δεν μπορείτε να κάνετε τον κώδικα 100% αποδοτικό, ακόμα κι αν είστε σίγουροι για τον κωδικό σας με τον έναν ή τον άλλο τρόπο, μπορεί να προκαλέσει σφάλμα.

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

Τι είναι το σφάλμα;

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

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

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

Αλλά έχουμε μια δήλωση στο VBA για να χειριστούμε όλα αυτά τα είδη σφαλμάτων, δηλ. "On Error".

Τύποι δηλώσεων σφάλματος

Το βασικό σημείο χειρισμού σφαλμάτων στο VBA είναι η δήλωση "On Error". Για παράδειγμα On Error "συνέχιση επόμενης γραμμής", "μετάβαση ή μετάβαση σε άλλη γραμμή", κ.λπ…

Η δήλωση On Error έχει τρία είδη δηλώσεων.

  1. Το GoTo 0  σημαίνει κάθε φορά που εμφανίζεται σφάλμα χρόνου εκτέλεσης excel ή το VBA θα πρέπει να εμφανίζει το πλαίσιο μηνύματος σφάλματος αναφέροντας το είδος του σφάλματος που αντιμετώπισε. Μόλις το VBA εκτελέσει τον κώδικα, απενεργοποιεί όλους τους χειριστές σφαλμάτων στο συγκεκριμένο μπλοκ του κώδικα.
  2. Συνέχιση Επόμενο σημαίνει όποτε εμφανίζεται το σφάλμα, αυτή η δήλωση δίνει εντολή στο excel να αγνοήσει αυτό το σφάλμα και να προχωρήσει στην (συνέχιση της επόμενης) στην επόμενη γραμμή κώδικα χωρίς να εμφανίσει μηνύματα σφάλματος. Δεν σημαίνει ότι θα διορθώσει το σφάλμα, αλλά απλώς αγνοεί το σφάλμα.
  3. GoTo [label] σημαίνει κάθε φορά που το VBA συναντά ένα σφάλμα, μεταβείτε στην εκχωρημένη ετικέτα. Αυτό κάνει τον κώδικα να μεταβεί στη συγκεκριμένη γραμμή που παρέχεται από τον κωδικοποιητή.

Κορυφαίοι 3 τρόποι αντιμετώπισης σφαλμάτων στο VBA

Μπορείτε να κατεβάσετε αυτό το πρότυπο VBA On Error εδώ - Πρότυπο VBA On Error

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

Ας υποθέσουμε ότι διαιρείτε την τιμή του 20 με 0 και έχετε δηλώσει τη μεταβλητή για να αντιστοιχίσετε το αποτέλεσμα της διαίρεσης σε αυτήν.

Κώδικας:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

Εάν εκτελέσετε αυτόν τον κωδικό θα ρίξει το παρακάτω σφάλμα.

Επομένως, δεν μπορείτε να διαιρέσετε κανέναν αριθμό με μηδενική τιμή. Ο αριθμός σφάλματος χρόνου εκτέλεσης είναι 11 δηλ. Διαίρεση με μηδέν.

Τώρα θα προσθέσω μια ακόμη γραμμή στον κώδικα.

Κώδικας:

 Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub 

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

Κώδικας:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

Τώρα αν εκτελέσω αυτόν τον κώδικα δεν θα μου δώσει μηνύματα σφάλματος, αλλά θα εκτελέσει την επόμενη γραμμή κώδικα, δηλαδή j = 20/2.

# 2 - Στο σφάλμα GoTo Label

Έχω δηλώσει τρεις μεταβλητές.

Κώδικας:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer 

Και για τις τρεις αυτές μεταβλητές θα εκχωρήσω υπολογισμό διαίρεσης.

Κώδικας:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

Το αποτέλεσμα και των τριών αυτών υπολογισμών θα εμφανίζεται στο πλαίσιο μηνύματος.

Κώδικας:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "Η τιμή του i είναι" & i & vbNewLine & "Η τιμή του j είναι "& j & _ vbNewLine &" Η τιμή του k είναι "& k & vbNewLine End Sub 

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

Τώρα θα προσθέσω τη δήλωση "On Error Resume Next".

Κώδικας:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "Η τιμή του i είναι" & i & vbNewLine & "The η τιμή του j είναι "& j & _ vbNewLine &" Η τιμή του k είναι "& k & vbNewLine End Sub 

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

Τώρα αντί για "On Error Resume Next" θα προσθέσω το "On Error GoTo KCal Υπολογισμός"

Κώδικας:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KC Υπολογισμός: i = 20/0 j = 20/2 KC Υπολογισμός: k = 10/5 MsgBox "Η τιμή του i είναι" & i & vbNewLine & "Η τιμή του j είναι" & j & _ vbNewLine & "Η τιμή του k είναι" & k & vbNewLine End Sub 

Σημείωση: Εδώ το "KCal Υπολογισμός" είναι το όνομα της ετικέτας που είχα δώσει, μπορείτε να δώσετε το δικό σας όνομα ετικέτας χωρίς κενό.

Τώρα, αν εκτελέσω αυτήν τη γραμμή κώδικα, δεν θα μεταβεί στην επόμενη γραμμή, αλλά θα μεταβεί στο όνομα της ετικέτας που έχω εισαγάγει, δηλαδή "KCalcualtion". Εδώ θα αγνοήσει το σφάλμα που δίνεται από το "I" και επίσης δεν θα εκτελέσει τον υπολογισμό "j" αλλά αμέσως μεταβαίνει στο "KCalcualtion".

# 3 - Αριθμός σφάλματος εκτύπωσης σε VBA

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

Κώδικας:

Err. Αριθμός

Τώρα θα τρέξω αυτόν τον κωδικό πρώτο μήνυμα πλαίσιο θα εμφανίσει τα αποτελέσματα υπολογισμού.

Κάντε κλικ στο OK, θα εμφανιστεί ένα ακόμη πλαίσιο μηνύματος για να εμφανιστεί ο αριθμός σφάλματος.

Πηγαίνουμε 11 ως αποτέλεσμα, δηλαδή Division by Zero

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

Κώδικας:

Err. Περιγραφή

Θα δείξει μια περιγραφή όπως αυτή.

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

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