DoWhileL oop не работает во время захвата ошибок - PullRequest
0 голосов
/ 25 февраля 2020

Итак, в основном я пытаюсь создать простую подпрограмму root, которая будет принимать значение через поле ввода и выводить квадрат root этого значения, если оно есть.

Если в процессе ввода возникает ошибка (например, если я ввожу букву «а»), он вызовет обработчик ошибок и попросит пользователя повторно ввести значение, пока ошибка «несоответствие типов» не исчезнет (то есть когда Err.Number = 0)

Проблема, которую я получаю, заключается в том, что, хотя ошибка перенаправляется на мой обработчик ошибок, она работает только один раз. Когда я снова ввожу значение как «a», это вызывает ошибку «несоответствие типов», и вся подпрограмма останавливается, вместо того, чтобы итеративно предлагать пользователю значение числового значения c снова, как я и предполагал .

Public Sub realnumber()
On Error GoTo line
    Dim rn As Double, re As Double
    rn = InputBox("please enter a real number")
    sqrn = Format(Sqr(rn), "0.00")
    Debug.Print (sqrn)
    Exit Sub

line:
    Select Case Err.Number
        Case 13
            Do While Err.Number = 13
                re = InputBox("re-enter")
            Loop
            rn = re
            Resume
    End Select
End Sub

1 Ответ

3 голосов
/ 25 февраля 2020

Почему бы не использовать метод Application.InputBox и управлять желаемым типом записи (тип 1 - это число)?

Public Sub realnumber()

Dim rn As Double, re As Double

rn = Application.InputBox("please enter a real number", Type:=1)
sqrn = Format(Sqr(rn), "0.00")
Debug.Print (sqrn)

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...