Kaikkia VBA-virheitä ei luoda samanarvoisiksi. Jotkut ovat vakavia ja jotkut vähemmän vakavia. Vaikka voit jättää huomiotta virheet, joita pidät merkityksettöminä, sinun on käsiteltävä muita, vakavampia virheitä. Joissakin tapauksissa sinun on tunnistettava esiintyvä tietty virhe.
Jokaisella virhetyypillä on virallinen numero. Kun virhe tapahtuu, Excel tallentaa virhenumeron Error-objektiin nimeltä Err. Tämän objektin Number-ominaisuus sisältää virhenumeron ja sen Kuvaus-ominaisuus sisältää virheen kuvauksen. Esimerkiksi seuraava lause näyttää virhenumeron, kaksoispisteen ja virheen kuvauksen:
MsgBox Err.Number & ": " & Err.Description
Muista, että Excelin virheilmoitukset eivät aina ole kovin hyödyllisiä – mutta tiedät sen jo.
Seuraava menettely osoittaa, kuinka voit määrittää, mikä virhe tapahtui. Tässä tapauksessa voit turvallisesti jättää huomioimatta virheet, jotka aiheutuvat yrittämisestä saada ei-positiivisen luvun neliöjuuri (eli virhe 5) tai virheet, jotka aiheutuvat yrittämisestä saada ei-numeerisen arvon neliöjuuri (virhe 13).
Toisaalta sinun on ilmoitettava käyttäjälle, jos laskentataulukko on suojattu ja valinta sisältää yhden tai useamman lukitun solun. (Muuten käyttäjä saattaa ajatella, että makro toimi, vaikka se ei todellakaan toiminut.) Suojatun laskentataulukon lukittuun soluun kirjoittaminen aiheuttaa virheen 1004.
Sub SelectionSqrt()
Himmeä solu As Range
Himmeä ErrMsg merkkijonona
Jos TyyppiNimi(Valinta) <> "Alue" Poistu Sub
On Error GoTo ErrorHandler
Jokaiselle valinnassa olevalle solulle
solu.Arvo = Sqr(solu.Arvo)
Seuraava solu
Poistu Subista
ErrorHandler:
Valitse Case Err.Number
Tapaus 5 'Negatiivinen luku
Jatka seuraavaksi
Tapaus 13 'Tyyppi ei täsmää
Jatka seuraavaksi
Case 1004 'Lukittu solu, suojattu arkki
MsgBox "Solu on lukittu. Yritä uudelleen.", vbCritical, cell.Address
Poistu Subista
Tapaus Muu
ErrMsg = Virhe(Err.Number)
MsgBox "ERROR:" & ErrMsg, vbCritical, cell.Address
Poistu Subista
Lopeta valinta
Lopeta ala
Kun ajonaikainen virhe tapahtuu, suoritus hyppää ErrorHandler-tunnisteella alkavaan koodiin. Select Case -rakenne testaa kolmea yleistä virhenumeroa. Jos virhenumero on 5 tai 13, suoritus jatkuu seuraavasta käskystä. (Toisin sanoen virhe jätetään huomioimatta.) Mutta jos virhenumero on 1004, rutiini ilmoittaa asiasta käyttäjälle ja päättyy. Viimeinen tapaus, odottamattomien virheiden keräily, kerää kaikki muut virheet ja näyttää todellisen virheilmoituksen.