Alle VBA-fejl er ikke skabt lige. Nogle er seriøse, og nogle er mindre alvorlige. Selvom du kan ignorere fejl, du anser for at være ubetydelige, skal du håndtere andre, mere alvorlige fejl. I nogle tilfælde skal du identificere den specifikke fejl, der opstår.
Hver type fejl har et officielt nummer. Når der opstår en fejl, gemmer Excel fejlnummeret i et fejlobjekt ved navn Err. Dette objekts Number-egenskab indeholder fejlnummeret, og dets Description-egenskab indeholder en beskrivelse af fejlen. For eksempel viser følgende sætning fejlnummeret, et kolon og en beskrivelse af fejlen:
MsgBox Err.Number & ": " & Err.Description
Husk, at Excel-fejlmeddelelser ikke altid er særlig nyttige - men det ved du allerede.
Følgende procedure viser, hvordan man bestemmer, hvilken fejl der opstod. I dette tilfælde kan du roligt ignorere fejl forårsaget af forsøg på at få kvadratroden af et ikke-positivt tal (det vil sige fejl 5) eller fejl forårsaget af forsøg på at få kvadratroden af en ikke-numerisk værdi (fejl 13).
På den anden side skal du informere brugeren, hvis arbejdsarket er beskyttet, og markeringen indeholder en eller flere låste celler. (Ellers kan brugeren tro, at makroen virkede, når den virkelig ikke gjorde det.) Forsøg på at skrive til en låst celle i et beskyttet regneark forårsager fejl 1004.
Sub SelectionSqrt()
Dæmp celle som område
Dim ErrMsg As String
Hvis Typenavn(Udvalg) <> "Range" Afslut Sub
Ved fejl Gå til ErrorHandler
For hver celle i udvalgt
celle.Value = Sqr(cell.Value)
Næste celle
Afslut Sub
ErrorHandler:
Vælg Sagsfejlnummer
Tilfælde 5 'Negativt tal
Genoptag næste
Case 13 'Typeuoverensstemmelse
Genoptag næste
Etui 1004 'Låst celle, beskyttet ark
MsgBox "Cellen er låst. Prøv igen.", vbCritical, cell.Address
Afslut Sub
Tilfældet Andet
ErrMsg = Error(Err.Number)
MsgBox "FEJL: " & ErrMsg, vbCritical, cell.Address
Afslut Sub
Afslut Vælg
Slut Sub
Når der opstår en runtime-fejl, springer eksekveringen til koden, der begynder ved ErrorHandler-etiketten. Vælg sagsstrukturen tester for tre almindelige fejlnumre. Hvis fejlnummeret er 5 eller 13, genoptages udførelsen ved næste sætning. (Med andre ord, fejlen ignoreres.) Men hvis fejlnummeret er 1004, rådgiver rutinen brugeren og slutter derefter. Det sidste tilfælde, en catch-all for uforudsete fejl, fanger alle andre fejl og viser den faktiske fejlmeddelelse.