Όλα τα σφάλματα VBA δεν δημιουργούνται ίσα. Κάποια είναι σοβαρά και άλλα λιγότερο σοβαρά. Αν και μπορεί να αγνοήσετε σφάλματα που θεωρείτε ασήμαντα, πρέπει να αντιμετωπίσετε άλλα, πιο σοβαρά σφάλματα. Σε ορισμένες περιπτώσεις, πρέπει να προσδιορίσετε το συγκεκριμένο σφάλμα που παρουσιάζεται.
Κάθε τύπος σφάλματος έχει έναν επίσημο αριθμό. Όταν παρουσιάζεται ένα σφάλμα, το Excel αποθηκεύει τον αριθμό σφάλματος σε ένα αντικείμενο σφάλματος που ονομάζεται Err. Η ιδιότητα Number αυτού του αντικειμένου περιέχει τον αριθμό σφάλματος και η ιδιότητα Περιγραφή περιέχει μια περιγραφή του σφάλματος. Για παράδειγμα, η ακόλουθη δήλωση εμφανίζει τον αριθμό σφάλματος, μια άνω και κάτω τελεία και μια περιγραφή του σφάλματος:
MsgBox Err.Number & ": " & Err.Description
Λάβετε υπόψη ότι τα μηνύματα σφάλματος του Excel δεν είναι πάντα πολύ χρήσιμα — αλλά το γνωρίζετε ήδη.
Η ακόλουθη διαδικασία δείχνει πώς να προσδιορίσετε ποιο σφάλμα παρουσιάστηκε. Σε αυτήν την περίπτωση, μπορείτε να αγνοήσετε με ασφάλεια τα σφάλματα που προκαλούνται από την προσπάθεια λήψης της τετραγωνικής ρίζας ενός μη θετικού αριθμού (δηλαδή του σφάλματος 5) ή τα σφάλματα που προκαλούνται από την προσπάθεια λήψης της τετραγωνικής ρίζας μιας μη αριθμητικής τιμής (σφάλμα 13).
Από την άλλη πλευρά, πρέπει να ενημερώσετε τον χρήστη εάν το φύλλο εργασίας είναι προστατευμένο και η επιλογή περιέχει ένα ή περισσότερα κλειδωμένα κελιά. (Διαφορετικά, ο χρήστης μπορεί να πιστεύει ότι η μακροεντολή λειτούργησε ενώ πραγματικά δεν λειτουργούσε.) Η προσπάθεια εγγραφής σε ένα κλειδωμένο κελί σε ένα προστατευμένο φύλλο εργασίας προκαλεί σφάλμα 1004.
Sub SelectionSqrt()
Θαμπό κελί ως εύρος
Dim ErrMsg Ως συμβολοσειρά
Αν TypeName(Selection) <> "Range" Τότε βγείτε από το Sub
On Error GoTo Error Handler
Για κάθε κελί στην επιλογή
cell.Value = Sqr(cell.Value)
Επόμενο κελί
Έξοδος υπο
Εργαλείο χειρισμού σφαλμάτων:
Επιλέξτε Case Err.Number
Περίπτωση 5 «Αρνητικός αριθμός
Συνέχιση Επόμενο
Περίπτωση 13 «Αναντιστοιχία τύπου
Συνέχιση Επόμενο
Θήκη 1004 «Κλειδωμένο κελί, προστατευμένο φύλλο
MsgBox "Το κελί είναι κλειδωμένο. Δοκιμάστε ξανά.", vbCritical, cell.Address
Έξοδος υπο
Άλλη περίπτωση
ErrMsg = Σφάλμα (Err.Number)
MsgBox "ERROR: " & ErrMsg, vbCritical, cell.Address
Έξοδος υπο
Τέλος Επιλογή
End Sub
Όταν παρουσιάζεται ένα σφάλμα χρόνου εκτέλεσης, η εκτέλεση μεταβαίνει στον κώδικα που ξεκινά από την ετικέτα ErrorHandler. Η δομή Select Case ελέγχει τρεις κοινούς αριθμούς σφάλματος. Εάν ο αριθμός σφάλματος είναι 5 ή 13, η εκτέλεση συνεχίζεται στην επόμενη δήλωση. (Με άλλα λόγια, το σφάλμα αγνοείται.) Αλλά εάν ο αριθμός σφάλματος είναι 1004, η ρουτίνα συμβουλεύει τον χρήστη και στη συνέχεια τελειώνει. Η τελευταία περίπτωση, ένα catch-all για απρόβλεπτα σφάλματα, παγιδεύει όλα τα άλλα σφάλματα και εμφανίζει το πραγματικό μήνυμα σφάλματος.