Хотя это не вполне приемлемый способ использовать предложение 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