Tots els errors de VBA no es creen iguals. Alguns són greus i altres menys greus. Encara que podeu ignorar els errors que considereu insignificants, heu de fer front a altres errors més greus. En alguns casos, cal identificar l'error específic que es produeix.
Cada tipus d'error té un número oficial. Quan es produeix un error, Excel emmagatzema el número d'error en un objecte Error anomenat Err. La propietat Number d'aquest objecte conté el número d'error i la seva propietat Description conté una descripció de l'error. Per exemple, la instrucció següent mostra el número d'error, els dos punts i una descripció de l'error:
MsgBox Err.Number & ": " & Err.Description
Tingueu en compte que els missatges d'error d'Excel no sempre són molt útils, però ja ho sabeu.
El procediment següent mostra com determinar quin error s'ha produït. En aquest cas, podeu ignorar amb seguretat els errors causats per intentar obtenir l'arrel quadrada d'un nombre no positiu (és a dir, l'error 5) o els errors causats per intentar obtenir l'arrel quadrada d'un valor no numèric (error 13).
D'altra banda, cal informar a l'usuari si el full de treball està protegit i la selecció conté una o més cel·les bloquejades. (En cas contrari, l'usuari pot pensar que la macro va funcionar quan realment no.) Intentar escriure en una cel·la bloquejada en un full de treball protegit provoca l'error 1004.
Sub SelectionSqrt()
Atenuar la cel·la com a rang
Dim ErrMsg com a cadena
Si TypeName(Selection) <> "Range" Aleshores surt del sub
En cas d'error GoTo ErrorHandler
Per a cada cel·la a la selecció
cel·la.Valor = Sqr(cel·la.Valor)
Següent cel·la
Sortir de Sub
Controlador d'errors:
Seleccioneu Case Err.Number
Cas 5 'Número negatiu
Reprendre Següent
Cas 13 "Descoincidència de tipus
Reprendre Següent
Estoig 1004 'Cèl·lula bloquejada, fulla protegida
MsgBox "La cel·la està bloquejada. Torna-ho a provar.", vbCritical, cell.Address
Sortir de Sub
Cas Altre
ErrMsg = Error (Err.Number)
MsgBox "ERROR: " & ErrMsg, vbCritical, cell.Address
Sortir de Sub
Finalitzar la selecció
End Sub
Quan es produeix un error d'execució, l'execució salta al codi que comença a l'etiqueta ErrorHandler. L'estructura Select Case prova tres números d'error habituals. Si el número d'error és 5 o 13, l'execució es reprèn a la següent instrucció. (En altres paraules, l'error s'ignora.) Però si el número d'error és 1004, la rutina avisa l'usuari i després finalitza. L'últim cas, un conjunt d'errors no previstos, atrapa tots els altres errors i mostra el missatge d'error real.