Alle VBA-feil er ikke skapt like. Noen er seriøse, og noen er mindre alvorlige. Selv om du kan ignorere feil du anser som uvesentlig, må du håndtere andre, mer alvorlige feil. I noen tilfeller må du identifisere den spesifikke feilen som oppstår.
Hver type feil har et offisielt nummer. Når det oppstår en feil, lagrer Excel feilnummeret i et Error-objekt kalt Err. Dette objektets Number-egenskap inneholder feilnummeret, og Description-egenskapen inneholder en beskrivelse av feilen. For eksempel viser følgende setning feilnummeret, et kolon og en beskrivelse av feilen:
MsgBox Err.Number & ": " & Err.Description
Husk at Excel-feilmeldinger ikke alltid er veldig nyttige - men det vet du allerede.
Følgende prosedyre viser hvordan du finner ut hvilken feil som oppstod. I dette tilfellet kan du trygt ignorere feil forårsaket av å prøve å få kvadratroten av et ikke-positivt tall (det vil si feil 5) eller feil forårsaket av å prøve å få kvadratroten av en ikke-numerisk verdi (feil 13).
På den annen side må du informere brukeren om regnearket er beskyttet og utvalget inneholder en eller flere låste celler. (Ellers kan brukeren tro at makroen fungerte når den egentlig ikke gjorde det.) Forsøk på å skrive til en låst celle i et beskyttet regneark forårsaker feil 1004.
Sub SelectionSqrt()
Dim celle som område
Dim ErrMsg As String
Hvis TypeName(Selection) <> "Range" Avslutt Sub
Ved feil Gå til ErrorHandler
For hver celle i utvalg
celle.Value = Sqr(cell.Value)
Neste celle
Avslutt Sub
ErrorHandler:
Velg Saksfeilnummer
Tilfelle 5 'Negativt tall
Fortsett neste
Tilfelle 13 'Typefeil
Fortsett neste
Koffert 1004 'Låst celle, beskyttet ark
MsgBox "Cellen er låst. Prøv igjen.", vbCritical, cell.Address
Avslutt Sub
Case Else
ErrMsg = Error(Err.Number)
MsgBox "FEIL: " & ErrMsg, vbCritical, cell.Address
Avslutt Sub
Avslutt Velg
End Sub
Når en kjøretidsfeil oppstår, hopper kjøringen til koden som begynner ved ErrorHandler-etiketten. Velg saksstrukturen tester for tre vanlige feilnumre. Hvis feilnummeret er 5 eller 13, fortsetter kjøringen ved neste setning. (Med andre ord, feilen ignoreres.) Men hvis feilnummeret er 1004, gir rutinen brukeren beskjed og avsluttes deretter. Det siste tilfellet, en oppsamling av uforutsette feil, fanger opp alle andre feil og viser den faktiske feilmeldingen.