# Captura de errores en VBA



## Osasa54 (Aug 25, 2004)

Hola, estoy haciendo una macro dentro de la cuál hago una búsqueda de un dato concreto que he asignado a una variable en los valores de un  rango de celdas. El problema viene cuando el dato en cuestion no se encuentra en estas celdas. Es entonces cuando da un error y para la ejecución de la macro. ¿Seria posible detectar el código de ese error para controlarlo de algún modo y poder proseguir con la macro?

Un saludo, y muchas gracias....


----------



## Greg Truby (Aug 25, 2004)

Claro.  Hay un par de opciones. En ambos senderos se usa las propiedades .Number y .Description del objeto Err
Usa un On Error Resume Next y después analiza el número.
Usa un On Error GoTo myErrorHandler y allí processa el error.
Ejemplo 1

<font face=Courier New><SPAN style="color:#00007F">Sub</SPAN> ErrUno()
    <SPAN style="color:#00007F">Dim</SPAN> r <SPAN style="color:#00007F">As</SPAN> Range
    <SPAN style="color:#00007F">On</SPAN> <SPAN style="color:#00007F">Error</SPAN> <SPAN style="color:#00007F">Resume</SPAN> <SPAN style="color:#00007F">Next</SPAN>
    <SPAN style="color:#00007F">Set</SPAN> r = Range("BuenosDias")
    <SPAN style="color:#00007F">If</SPAN> Err.Number <> 0 <SPAN style="color:#00007F">Then</SPAN>
        MsgBox "Rango ""BuenosDias"" no existe." & vbCr & _
               "El error tiene el número: " & Err.Number & vbCr & _
               "Que corresponde a: " & Err.Description
        <SPAN style="color:#00007F">Exit</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
    <SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
    r.Interior.Color = vbYellow
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
</FONT>
Ejemplo 2
<font face=Courier New>
<SPAN style="color:#00007F">Sub</SPAN> ErrDos()
<SPAN style="color:#007F00">' Corre esto una vez sin un rango nombrado «BuenosDias»</SPAN>
<SPAN style="color:#007F00">' y después una segunda vez CON un rango nombrado «BuenosDias» existente.</SPAN>
    
    <SPAN style="color:#00007F">Dim</SPAN> r <SPAN style="color:#00007F">As</SPAN> Range
    <SPAN style="color:#00007F">On</SPAN> <SPAN style="color:#00007F">Error</SPAN> <SPAN style="color:#00007F">GoTo</SPAN> ErrorHandler
    <SPAN style="color:#00007F">Set</SPAN> r = Range("BuenosDias")
    r.Interior.ColorIndex = 99
    <SPAN style="color:#00007F">Exit</SPAN> <SPAN style="color:#00007F">Sub</SPAN>

ErrorHandler:

    MsgBox "Hemos topado con un error durante ejecutar el macro." & vbCr & _
           "El error tiene el número: " & Err.Number & vbCr & _
           "Que corresponde a: " & Err.Description

<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>


</FONT>


----------

