TOP

VBA-第 10 课。对话框窗口 (Dialog boxes)

YouLibreCalc for Excel logo

Excel VBA 中的对话框(Dialog Boxes)用于向用户显示信息。

MsgBox 函数在对话框中显示一条消息,等待用户单击按钮,并返回一个整数指示用户单击了哪个按钮。

最常用的对话框是消息框,但我们也可以使用输入框。


MsgBox

到目前为止,我们已经使用MsgBox对话框在屏幕上显示信息。

Sub delete_B2()
    Range("B2").ClearContents
    MsgBox "The contents of B2 have been deleted !"  '“B2单元格的内容已被删除!”
End Sub

在这种情况下,仅使用一个参数调用 MsgBox。看代码如下:

现在我们将创建一个对话框,在执行两条指令之前要求确认删除。然后我们将使用三个参数:

MsgBox([文本]、[按钮]、[标题])
  • 文本:对话框文本
  • Buttons:按钮选择(是、否、取消等)+其他选项
  • Title:对话框的标题
  • Sub delete_B2()
    
        If MsgBox("Are you sure that you wish to delete the contents of B2 ?", vbYesNo, "Confirm") = vbYes
        Then
          Range("B2").ClearContents
          MsgBox "The contents of B2 have been deleted !"
        End If
        
    End Sub
    

    结果:

    Private Sub warning(var_text As String)
        MsgBox "Caution : " & var_text & " !"
    End Sub
    
    Sub macro_test()
        If Range("A1") = "" Then
            warning "empty cell"           '“空单元格”
        ElseIf Not IsNumeric(Range("A1")) Then
            warning "non-numerical value"  '“非数值”
        End If
    End Sub
    

    vbYesNo 指定对话框按钮为“Yes”和“No”,vbYes 代表“Yes”按钮:

    If MsgBox("Text", vbYesNo, "Title") = vbYes Then '如果按下Yesbl_按钮...
    

    在 MsgBox 中使用第二个参数的选项

    持续的 数值 描述
    vbOKOnly0ok - dialog boxes
    vbOKCancel1ok - dialog boxescancel - dialog boxes
    vbAbortRetryIgnore2abort - dialog boxesretry - dialog boxesignore - dialog boxes
    vbYesNoCancel3yes - dialog boxesno - dialog boxescancel - dialog boxes
    vbYesNo4yes - dialog boxesno - dialog boxes
    vbRetryCancel5retry - dialog boxescancel - dialog boxes
    vbCritical16critical - dialog boxes
    vbQuestion32question - dialog boxes
    vbExclamation48exclamation - dialog boxes
    vbInformation64information - dialog boxes

    在 MsgBox 中使用第二个参数的示例

    下面是一个 MsgBox 示例,每次循环中都会继续显示,直到用户按下 Yes:

    Sub humor()
        Do
            If MsgBox("Do you like the Moonexcel site ?", vbYesNo, "Survey") = vbYes Then
                Exit Do '=> 响应 Yes = 是的,我们退出循环
            End If
        Loop While 1 = 1 '=> 无限循环
        MsgBox ";-)"
    End Sub
    

    要显示新功能区,您可以使用带有参数 10 的 Chr 函数,该函数负责移动功能区,例如:

    MsgBox "Example 1" & Chr(10) & "Example 2" & Chr(10) & Chr(10) & "Example 3"
    

    我们得到以下结果:

    输入框

    输入框提示用户在对话框中输入值,例如:

    Sub example()
        Dim result As String
       
        result = InputBox("Text ?", "Title") '该变量被分配在输入框中输入的值
       
        If result <> "" Then '如果该值不是“”,则将显示结果
           MsgBox result
        End If
    End Sub
    

    我们得到以下结果:

    第三个参数可用于设置默认值:

    InputBox("Text ?", "Title", "Default value")
    

    结果如下: