Pequeña duda

Iniciado por amtapias, 14 Marzo 2006, 16:10 PM

0 Miembros y 1 Visitante están viendo este tema.

amtapias

Wenas. Mi pregunta es la siguiente. ¿Como puedo hacer para que cuando se produzca un error en el programa vuelva a cargar el programa desde el principio y se ignore el error?

Muchas gracias

.Slasher-K.

Hay varios Controladores de Error en VB, siempre hablando de errores internos del programa.

On Error Resume Next

Este controlador es muy útil para manipular errores no controlados, porque en el caso que haya un error pasa a la siguiente instrucción, por ejemplo:


Function Div(Dividendo As Double, Divisor As Double)As Double
  On Error Resume Next

  Div = Dividendo / Divisor
End Function


Si por ejemplo, se le pasa como divisor 0, ese código produciría el error "11, División por cero", pero al poner ese controlador de error lo que haría el código es pasar directamente a Exit Function.

Las contras de esto es que en muchos casos el programa producirá errores y no devolverá el valor esperado, por lo que el error se arrastrará y no funcionará como se espera. Por eso, al usar On Error Resume Next, es necesario saber qué errores se pueden llegar a producir y controlarlos, en el caso anterior sería así:


Function Div(Dividendo As Double, Divisor As Double)As Double
  On Error Resume Next

  Div = Dividendo / Divisor

  If Err.Number <> 0 Then
    Call MsgBox("[ Error ] " & Err.Description
  End If
End Function


El objeto Err se utiliza para obtener información del último error en el contexto actual, en el caso que se produzca un error la propiedad Number tendrá el nº de error, de lo contrario sería 0, por lo que se comprueba que haya un error y en el caso que se de esta situación, muestra un mensaje.


On Error Goto Label

En este caso lo que hace este controlador de errores es ir a una etiqueta dentro del mismo procedimiento, en el caso que se produzca un error:


Function Div(Dividendo As Double, Divisor As Double)As Double
  On Error Resume ErrDiv

  Div = Dividendo / Divisor

ErrDiv:
  If Err.Number <> 0 Then
    Call MsgBox("[ Error ] " & Err.Description
  End If
End Function


En este caso el programa saltaría a ErrDiv.

También existe On Error Goto 0 para eliminar el controlador de errores anterior, pero no se usa casi.

amtapias

Muchas Gracias pero mi duda era si hay alguna manera de recargar el programa desde 0. Que tenga el mismo efecto que cerrarlo y volver a ejecutarlo cuando se produzca un error.

Muchas Gracias