对话框是最常见的功能,先看一下相对完整的对话框结构:
由图可见,对话框一般由三部分组成( 窗口标题、提示内容、按钮和图标类别和默认选中),VBA 中调用对话框的
语法也是如此,MsgBox 提示内容,按钮和图标类别和按钮默认选中,窗口标题
窗口标题和提示内容很好理解,重点说一下 <按钮和图标类别和按钮默认选中> 这个参数要怎么传,这个参数其
实由三个值组成,实际使用时以 按钮类别 + 图标类别 + 按钮默认选中
这种格式传参,下面列出常用的类别
按钮类别
名称 | 值 | 描述 |
---|---|---|
vbOKOnly | 0 | 对话框内显示确定按钮 |
vbOKCancel | 1 | 对话框内显示确定和取消两个按钮 |
vbAbortRetryIgnore | 2 | 对话框内显示中止、重试、忽略三个按钮 |
vbYesNoCancel | 3 | 对话框内显示是、否、取消三个按钮 |
vbYesNo | 4 | 对话框内显示是和否两个按钮 |
vbRetryCancel | 5 | 对话框内显示重试和取消两个按钮 |
图标类别
名称 | 值 | 描述 |
---|---|---|
vbCritical | 16 | 对话框内显示危险图标 |
vbQuestion | 32 | 对话框内显示询问图标 |
vbExclamation | 48 | 对话框内显示警告图标 |
vbInformation | 64 | 对话框内显示信息图标 |
按钮默认选中
名称 | 值 | 描述 |
---|---|---|
vbDefaultButton1 | 0 | 对话框内默认选中第一个按钮 |
vbDefaultButton2 | 256 | 对话框内默认选中第二个按钮 |
vbDefaultButton3 | 512 | 对话框内默认选中第三个按钮 |
vbDefaultButton4 | 768 | 对话框内默认选中第四个按钮 |
完整的对话框传参示例,<按钮和图标类别和按钮默认选中> 可以传名称,也可以传值
Public Sub main()
'两种方式都可以
MsgBox "提示内容", vbYesNoCancel + vbExclamation + vbDefaultButton2, "窗口标题"
MsgBox "提示内容", 3 + 48 + 256, "窗口标题"
End Sub
当我们弹出对话框后,肯定希望获取用户的选择,vba 中,当对话框的按钮被点击后,就会返回按钮的值,我们只
需要判断这个值就可以,vba 中对话框的按钮相对较少,每个按钮都有它固定的值
按钮值名称 | 按钮的值 | 描述 |
---|---|---|
vbOk | 1 | 确定按钮 |
vbCancel | 2 | 取消按钮 |
vbAbort | 3 | 中止按钮 |
vbRetry | 4 | 重试按钮 |
vbIgnore | 5 | 忽略按钮 |
vbYes | 6 | 是按钮 |
vbNo | 7 | 否按钮 |
示例,使用按钮值名称和使用按钮值都可以进行判断,注意:当想获取对话框的返回值时,不要忘记给 MsgBox
的参数
列表加上 ()
Public Sub main()
Dim value As Integer
value = MsgBox("提示内容", vbYesNoCancel + vbExclamation + vbDefaultButton2, "窗口标题")
'使用按钮值进行判断
If value = 6 Then
Debug.Print "用户选择了'是'"
End If
'使用按钮值名称进行判断
If value = vbYes Then
Debug.Print "用户选择了'是'"
End If
End Sub
这种对话框,可以让用户输入,vba 中有两种常见的使用方式,InputBox
函数和 Applicatoin.InputBox
方法
InputBox函数语法:InputBox(可输入的对话框的提示文字, 窗口标题, 输入框的默认值)
对话框的返回值有下面几种情况:
示例
Public Sub main()
Dim value
value = InputBox("可输入的对话框的提示文字", "窗口标题", "这是输入框的默认值")
Debug.Print value
End Sub
效果
这种方式跟前一种相比,主要多了限定输入框内容类型的功能,这种对话框点击取消按钮后返回 False
语法为:
Application.InputBox(对话框的提示文字,窗口标题,输入框默认值,输入框 x 坐标,输入框 y 坐标,帮助文档,文档ID,输入框内容类型)
参数看上去非常多,但其实很好理解,对话框的提示文字、窗口标题、输入框默认值这三个参数看描述就知道怎么
传了,输入框 x 坐标、输入框 y 坐标、帮助文档、文档ID这四个参数一般不用传,所以这里也不介绍了,重点就是最后
一个参数 ( 输入框内容类型 ),这个参数有多种类型可供选择,如下:
值 | 描述 |
---|---|
0 | 公式类型 |
1 | 数字类型 |
2 | 文本类型、既字符串类型 |
4 | 布尔值类型 |
8 | 单元格引用类型 |
16 | 错误值类型 |
这些类型动手试一试就能了解,主要记录一下单元格引用类型
单元格引用类型
当选择一个单元格时,对话框返回的是 Range 对象,多个单元格时对话框返回的是二维数组
示例
代码:
Public Sub main()
Dim value
value = Application.InputBox("对话框显示内容", "输入框标题", "文本框内默认值", , , , , 8)
If VBA.IsArray(value) Then
Debug.Print "二维数组:" & value(1, 1)
Else
Debug.Print "Range对象:" & value
End If
End Sub
效果: