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 |