Как выйти из цикла do, когда я нажимаю кнопку отмены - PullRequest
0 голосов
/ 11 мая 2018
Sub msgbox_icons()
    Dim t As String, arg As Integer
    t = "Message Box Icons Demo"
    Do
        arg = InputBox(prompt:="Enter below one of the integers: (16, 32, 48 or 64):", Title:=t)
        If arg = 16 Then
            MsgBox arg & "<=> Critical Message Icon", vbCritical + vbOK, t
        ElseIf arg = 32 Then
            MsgBox arg & "<=> Warning Query Icon", vbQuestion + vbOK, t
        ElseIf arg = 48 Then
            MsgBox arg & "<=> Warning Message Icon", vbExclamation + vbOK, t
        ElseIf arg = 64 Then
            MsgBox arg & "<=> Information Message Icon", vbInformation + vbOK, t
        Else
            MsgBox arg & "<=> non-existent icon type", vbOKCancel, t
        End If
    Loop
End Sub

Когда я нажимаю кнопку отмены, появляется сообщение об ошибке типа 13. Мне было интересно, как это исправить. Также, как мне закончить макрос, если я нажму кнопку отмены как для поля ввода, так и для окна сообщения. Благодаря.

1 Ответ

0 голосов
/ 11 мая 2018

, поскольку возвращаемое значение кнопки отмены - пустая строка, переменная arg должна быть строкой, затем, спрашивая, является ли она числовой, вы можете сказать, нажали ли вы кнопку отмены, используйте «Выход из Do» для выхода из цикла, ваш код может быть таким:

Sub msgbox_icons()
    Dim arg, t As String

    t = "Message Box Icons Demo"
    Do
        arg = InputBox(Prompt:="Enter below one of the integers: (16, 32, 48 or 64):", Title:=t)
        If Not IsNumeric(arg) Then
            Exit Do
        ElseIf arg = 16 Then
            MsgBox(arg & "<=> Critical Message Icon", vbCritical + vbOK, t)
        ElseIf arg = 32 Then
            MsgBox(arg & "<=> Warning Query Icon", vbQuestion + vbOK, t)
        ElseIf arg = 48 Then
            MsgBox(arg & "<=> Warning Message Icon", vbExclamation + vbOK, t)
        ElseIf arg = 64 Then
            MsgBox(arg & "<=> Information Message Icon", vbInformation + vbOK, t)
        Else
            MsgBox(arg & "<=> non-existent icon type", vbOKCancel, t)
        End If
    Loop
End Sub
...