Δηλώσεις σφαλμάτων 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

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

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

Κώδικας:

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

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

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

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

Κώδικας:

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 KCalculation."

Κώδικας:

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 & vb & "Η τιμή του j είναι" & j & _ vbNewLine & "Η τιμή του k είναι" & k & vbNewLine End Sub
Σημείωση: Εδώ, το "KCalculation" είναι το όνομα της ετικέτας που είχα δώσει. μπορείτε να δώσετε το δικό σας όνομα ετικέτας χωρίς κενό.

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

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

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

Κώδικας:

Err. Αριθμός

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

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

Πάμε 11? ως αποτέλεσμα, δηλαδή, διαίρεση από μηδέν.

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

Κώδικας:

Err. Περιγραφή

Θα δείξει περιγραφή έτσι.

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

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

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