La Web del Programador: Comunidad de Programadores
 
    Pregunta:  48404 - ATRAPAR ERRORES EN VB
Autor:  marga gregorio
Hola, me estoy volviendo loca para intentar gestionar un error de tipos que me da este cachito de código

Private Sub guardarLIB_RG(ByRef lib As String, ByRef destino As Integer)

On Error GoTo TRATAR

If (CInt(lib) < 99) Then
LIBs_RG(CInt(lib)) = LIBs_RG(CInt(lib)) + 1
num_LIBs_RG = num_LIBs_RG + 1
End If

Exit Sub

TRATAR: Errores.Label8 = "Error de tipos"

End Sub

El if da error de tipos porque en vez de leer un entero a veces puede leer un string pero porque no me salta a la etiqueta TRATAR? Me estoy rallando muchisimo, asique si alguien me puede decir donde estoy metiendo la pata, muchisimas gracias :)

  Respuesta:  harold
mira utilisa el err.number para capturar el numero del error y busca la respuesta al error el la ayuda y asi sabras en realidad que es lo que te esta dando el error

  Respuesta:  Carlos Carlos
Que tal como estas mira nose si te sirva aun mi respuesta pero alli te va, primero que nada creo que tu error no esta en el if sino desde el momento donde le envias los parametros de tu procedimiento guradar por ello es que no brinca a la etiqueta TRATAR el erro se da tal y como te lo muestro abajo

guardarLIB_RG(ByRef lib As String, ByRef destino As Integer)

si dices que aveces puede recibir un entero y a veces un string sucede esto

guardarLIB_RG("string", "string" )

desde allí se da el error el segundo parametro que es entero espera entero y no un estring asi que te dice error de tipos y no envia el parametro al procedimeinto que guardar asi que como no entra a tu procedimiento guardar no Brinca a la etiqueta TRATAR, LASOLUCION:

si aveces puede enviar un entero o aveces un string puedes declarar el parametro como Variant y no como Integer debes hacer esto

Private Sub guardarLIB_RG(ByRef lib As String, ByRef destino As Variant)

On Error GoTo TRATAR

If (CInt(lib) < 99) Then
LIBs_RG(CInt(lib)) = LIBs_RG(CInt(lib)) + 1
num_LIBs_RG = num_LIBs_RG + 1
End If

Exit Sub

TRATAR: Errores.Label8 = "Error de tipos"

End Sub

bien, sino te gusta esta respuesta antes puedes hacer esto asi
(segunda opcion)

dentro de donde quiera que llames al procedimiento guardar

Public sub procedimientoquellama()

On error Resume Goto

guardarLIB_RG("string", "string" )

Exit Sub

TRATAR: Errores.Label8 = "Error de tipos"

End sub

si te fijas bien el error lo estoy tratando desde la funcion o procedimeinto que llama y no en la funcion o procedmiento

si prefieres puedes utilizar otro tipo de controlar errores como lo que sigue

Private Sub guardarLIB_RG(ByRef lib As String, ByRef destino As Variant)

On Error Resume Next

If (CInt(lib) < 99) Then
LIBs_RG(CInt(lib)) = LIBs_RG(CInt(lib)) + 1
num_LIBs_RG = num_LIBs_RG + 1
End If

Exit Sub

TRATAR: Errores.Label8 = "Error de tipos"

End Sub

si esta tercera opcion que te muestro no impide el error de tipos y hace que tu compilador de visual basic te muestre las opciones de depura entonces quiere decir que si el error se produce desde el momento en que se llama al procedimeinto guardar asi que puedes utilizar cualquiera de las dos primeras opciones que te muestro bien espero que te sirva cuidate mucho