Неожиданная ошибка из обработчика ошибок VBA - PullRequest
0 голосов
/ 04 сентября 2018

Хотя это не вполне приемлемый способ использовать предложение GOTO, просто из любопытства я хотел бы спросить, почему третье последнее утверждение, использующее предложение GOTO, не работает в описанной ниже процедуре.

Подпрограмма вычисляет квадратный корень из положительного числа. Если задано отрицательное число, вступит в силу сеанс контроля ошибок, в котором будет задан вопрос о том, будет ли пользователь повторно внедрять подпрограмму. Сначала я ввел -1, он запрашивает запрос «Хотите повторить попытку?»; позже введено -2, возникает непредвиденная ошибка. щелкните для изображения неожиданной ошибки . Если я заменю GOTO на «резюме» или вызову самого сабвуфера, неожиданная ошибка не возникает.

Одна интерпретация: «потому что исходное условие ошибки не было очищено». (Джон Уокенбах). Может ли кто-нибудь предложить какую-то дополнительную информацию по этому поводу?

Sub enterSqrt3()
    Dim pos_num As Variant, ans As Double, decision As Variant

TryAgain:
    On Error GoTo errHandle
    pos_num = InputBox("Please input a positive number. ")
    If pos_num = "" Then
        Exit Sub
    Else
        ans = Sqr(pos_num)
        MsgBox "The answer is " & ans
        Exit Sub
    End If

errHandle:
    decision = MsgBox("Would you like to try again? ", vbYesNo)
    If decision = vbYes Then
'        Resume TryAgain   ' it works
'        Call enterSqrt3   ' it works
         GoTo TryAgain     ' it does not work after input the second     
                           ' negative input.
    End If
End Sub
...