2016-04-25 3 views
2

Я использую ниже код. Когда пользователь нажимает кнопку отмены в поле ввода, ошибка обрабатывается обработчиком ошибок.Обработка ошибок в обработчике ошибок

Но если в обработчике ошибок есть ошибка, эта ошибка не обрабатывается обработчиком ошибок.

Sub calculateroot() 

    Dim msg As String, t as Integer 
    On Error GoTo myhandle 
    Dim inp As Integer, sql As Single 
    inp = InputBox("Enter the number to find the square root") 
    sql = Sqr(inp) 
    Exit Sub 
myhandle: 
    t = InputBox("Is this recursive ?") 
End Sub 

Какие изменения следует внести в код для обработки ошибки, возникшей в обработчике ошибок?

+0

Где 'sql' и немогу 'используется? Почему целое число будет полезным ответом на вопрос «Является ли это рекурсивным?» – jsheeran

+0

Чтобы сбросить текущее исключение, вам нужна инструкция 'Resume' (или' On Error Goto -1', если вам нравится спагетти). – Rory

+0

@jsheeran Ну, я не использую эти переменные, и этот фрагмент кода ничего хорошего не делает. Я разместил вопрос для обучения и из любопытства, как справиться с ошибкой в ​​обработчике ошибок –

ответ

1

Вы должны сбросить обработчик ошибок, а затем установить новый:

Sub calculateroot() 

    Dim msg As String, t As Integer 
    On Error GoTo myhandle 
    Dim inp As Integer, sql As Single 
    inp = inputbox("Enter the number to find the square root") 
    sql = Sqr(inp) 
    Exit Sub 
myhandle: 
    On Error GoTo -1 
    On Error GoTo myhandle2 
    t = inputbox("Is this recursive ?") 
    MsgBox t 
    Exit Sub 
myhandle2: 
    MsgBox "myhandle2" 
End Sub 
+0

Что делает On Error Goto -1? –

+0

@RohitSaluja: чтобы узнать больше о 'On Error Goto -1' или' Resume Next', просто прочитайте соответствующую запись MSDN: https://msdn.microsoft.com/en-us/library/5hsw66as.aspx – Ralph

+1

IMO if вы обнаруживаете, что используете OEG-1, вы должны действительно переосмыслить свой код. – Rory

0

Если необходимо возобновить этот отвратительный код работает:

On Error Resume Next 
parm = "bla" 
DoSomething(parm) 
If Err.Number > 0 Then 
    Err.Clear 
    parm = "oldbla" 
    DoSomething(parm) 
End If 
If Err.Number > 0 Then 
    Err.Clear 
    parm = "evenolderbla" 
    DoSomething(parm) 
End If 

 Смежные вопросы

  • Нет связанных вопросов^_^