excel - number - VBA anidado en caso de error GoTo
on error goto vba excel (2)
Tengo un código VBA que se supone que es una comprobación de error anidada, pero no es así. El código es psuedo como abajo. Sin embargo, cada vez que se produce un error dentro de un error (por ejemplo, se produce un error en el ciclo, aparece ir a SmallError y se produce un error en SmallError). No se utiliza el segundo GoTo. El error luego rompe el código.
Ex:
Error en Loop
GoTo SmallError
Error en SmallError
Descansos de código (aquí el código debe ir a FatalError)
Sub DoThings()
On Error GoTo SmallError
''Coding Happens
Do While(conditionhere)
''Looping things happen
GoTo LoopResume
SmallError:
source = Err.source
descript = Err.Description
On Error GoTo Fatal Error
''Small error processing happens
Resume LoopResume
FatalError:
source = Err.source
descript = Err. Description
On Error GoTo ExitError
''Fatal Error processing happens
ExitError:
Exit Sub
LoopResume:
count = count + 1
Loop
On Error GoTo FatalError
''Finishing code happens
End Sub
... tienes un Fatal Error
en tu Goto
lugar de FatalError
, que no te llevará al lugar correcto ...
Actualiza tu código a:
On Error GoTo FatalError
No puede usar una declaración On Error dentro de un manejador de errores. Ver, por ejemplo, este artículo que explica esto .
Sin embargo, lo que PUEDE hacer es tener una rutina separada que maneje el "error regular". Esta rutina puede tener un controlador de "error fatal". Su código se vería así:
(Editar: editó el código para habilitar la salida cuando hay un error fatal):
Sub DoThings()
On Error GoTo SmallError
Dim fatalExit As Boolean
''Coding Happens
Do While(conditionhere)
''Looping things happen
LoopResume:
count = count + 1
Loop
On Error Goto SmallError2
''Finishing code happens
Exit Sub
SmallError:
handleError Err.Source, Err.Description, fatalExit
If fatalExit Then
Exit Sub
Else
Resume LoopResume
End If
SmallError2:
handleError Err.Source, Err.Description, fatalExit
Exit Sub
End Sub
Private Sub handleError(ByVal source As String,ByVal description As String, ByRef fatalExit As Boolean)
On Error Goto FatalError
''Do "small error" handling here
Exit Sub
FatalError:
fatalExit = True
''Do "fatal error" handling here
End Sub