Všetky chyby VBA nie sú rovnaké. Niektoré sú vážne a niektoré menej vážne. Aj keď môžete ignorovať chyby, ktoré považujete za bezvýznamné, musíte sa vyrovnať s inými, závažnejšími chybami. V niektorých prípadoch musíte identifikovať konkrétnu chybu, ktorá sa vyskytuje.
Každý typ chyby má oficiálne číslo. Keď sa vyskytne chyba, Excel uloží číslo chyby do objektu Error s názvom Err. Vlastnosť Number tohto objektu obsahuje číslo chyby a jej vlastnosť Description obsahuje popis chyby. Napríklad nasledujúci príkaz zobrazuje číslo chyby, dvojbodku a popis chyby:
MsgBox Err.Number & ": " & Err.Description
Majte na pamäti, že chybové hlásenia programu Excel nie sú vždy veľmi užitočné – ale to už viete.
Nasledujúci postup ukazuje, ako zistiť, ktorá chyba sa vyskytla. V tomto prípade môžete bezpečne ignorovať chyby spôsobené pokusom získať druhú odmocninu nekladného čísla (t. j. chyba 5) alebo chyby spôsobené pokusom získať druhú odmocninu nenumerickej hodnoty (chyba 13).
Na druhej strane musíte používateľa informovať, ak je pracovný hárok chránený a výber obsahuje jednu alebo viac uzamknutých buniek. (V opačnom prípade si používateľ môže myslieť, že makro fungovalo, aj keď v skutočnosti nefungovalo.) Pokus o zápis do uzamknutej bunky v chránenom hárku spôsobí chybu 1004.
Sub SelectionSqrt()
Stlmiť bunku ako rozsah
Dim ErrMsg As String
Ak TypeName(Selection) <> "Range" potom Exit Sub
Pri chybe GoTo ErrorHandler
Pre každú bunku vo výbere
cell.Value = Sqr(cell.Value)
Ďalšia bunka
Ukončiť Sub
ErrorHandler:
Vyberte číslo chyby prípadu
Prípad 5 „Záporné číslo
Pokračovať ďalej
Prípad 13 „Nesúlad typu
Pokračovať ďalej
Prípad 1004 „Uzamknutá bunka, chránený list
MsgBox "Bunka je zamknutá. Skúste to znova.", vbCritical, cell.Address
Ukončiť Sub
Prípad Else
ErrMsg = Error (Err.Number)
MsgBox "ERROR: " & ErrMsg, vbCritical, cell.Address
Ukončiť Sub
Koniec Vyberte
End Sub
Keď sa vyskytne chyba runtime, spustenie preskočí na kód začínajúci štítkom ErrorHandler. Štruktúra Select Case testuje tri bežné čísla chýb. Ak je číslo chyby 5 alebo 13, vykonávanie sa obnoví pri ďalšom príkaze. (Inými slovami, chyba sa ignoruje.) Ak je však číslo chyby 1004, rutina upozorní používateľa a potom sa skončí. Posledný prípad, lapač neočakávaných chýb, zachytáva všetky ostatné chyby a zobrazuje skutočné chybové hlásenie.