在输入对话框在VBA中有两种形式,分别是:
- InputBox
- Expression.InputBox
二者在大致功能上基本相同,个人认为二者重点差异为:
- 后者有 Type 参数,可以限制输入类型,同时可以引用单元格 ;
- 二者输入时, 空值、取消 的返回值不同。
二者语法分别如下:
InputBox ( prompt, [title], [default], [xpos], [ypos], [helpfile], [context] )
Part | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
Prompt | 必需 | String | 字符串表达式在对话框中显示为消息。 prompt 的最大长度约为 1024 个字符,具体取决于所使用的字符的宽度。 如果_prompt_包含多行, 则可以使用回车符 (chr(13))、换行符 (chr(10)) 或回车换行符组合 ((chr (13) & ((chr (13)) 来分隔行。 ((chr(13) (**** 每个行的 Chr (10))。 |
Title | 可选 | Variant | 对话框标题栏中显示的字符串表达式。 如果省略 title,则标题栏中将显示应用程序名称。 |
Default | 可选 | Variant | 文本框中显示的字符串表达式,在未提供其他输入时作为默认响应。 如果省略了 default,文本框将显示为空。 |
XPos | 可选 | Variant | 指定对话框的左边缘与屏幕的左边缘的水平距离(以缇为单位)的数值表达式。 如果省略了 xpos,对话框将水平居中。 |
YPos | 可选 | Variant | 指定对话框的上边缘与屏幕的顶部的垂直距离(以缇为单位)的数值表达式。 如果省略了 ypos,对话框将位于屏幕垂直方向往下大约三分之一的位置。 |
Helpfile | 可选 | Variant | 用于标识帮助文件的字符串表达式,前者用于为对话框提供上下文相关的帮助。 如果提供 helpfile,则也必须提供 context。 |
Context | 可选 | Variant | 帮助上下文数值的数值表达式,该数值由帮助作者为相应的帮助主题分配。 如果提供 context,则也必须提供 helpfile。 |
expression.InputBox ( Prompt, [Title], [Default], [Left], [Top], [HelpFile], [HelpContextID], [Type] )
expression:表示 Application 对象的变量。
名称 | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
Prompt | 必需 | String | 要在对话框中显示的消息。 此参数可以是字符串、数字、日期或布尔值(在消息显示前,Microsoft Excel 会自动将此值强制转换为 String )。 |
Title | 可选 | Variant | 输入框的标题。 如果省略此参数,则默认标题为“输入”。 |
Default | 可选 | Variant | 指定在对话框最初显示时文本框中显示的值。 如果省略此参数,即表示将文本框留空。 此值可以是 Range 对象。 |
Left | 可选 | Variant | 指定对话框相对于屏幕左上角的 X 坐标(以磅为单位)。 |
Top | 可选 | Variant | 指定对话框相对于屏幕左上角的 Y 坐标(以磅为单位)。 |
HelpFile | 可选 | Variant | 此输入框使用的帮助文件名。 如果有 HelpFile 和 HelpContextID 参数,对话框中会显示帮助按钮。 |
HelpContextID | 可选 | Variant | HelpFile 中帮助主题的上下文 ID 号。 |
Type | 可选 | Variant | 指定返回的数据类型。 如果省略此参数,则对话框返回文本。 |
其中,参数 Type 可以选择以下值:
注: 可以是一个值,也可以将多个值相加。 例如,对于可接受文本和数字的输入框,将 Type 设置为 1 + 2。
值 | 说明 |
---|---|
0 | 公式 |
1 | 数字 |
2 | 文本(字符串) |
4 | 逻辑值(True 或 False) |
8 | Range 对象形式的单元格引用 |
16 | 错误值,如 #N/A |
64 | 数值数组 |
- 如果 Type = 0,InputBox 返回文本格式的公式(例如,=2*PI()/360)。
只要公式中有引用,就会以 R1C1样式 引用的形式返回。 (ConvertFormula 可用于转换引用样式。)
注: 在微软的官方介绍中,公式引用形式是以 A1样式 返回,但是实测效果入下,我所使用的是 Excel 2016 订阅版。
Sub 测试1()
Dim Val
Val = Application.InputBox("选择单元格", Type:=0)
MsgBox Val
End Sub
- 如果 Type = 8,InputBox 返回 Range 对象。 必须使用 Set 语句,将结果分配给 Range 对象。
注: 如果不使用 Set 语句,此变量就会被设置为区域中的值,而不是 Range 对象本身。如下面的示例所示。
Sub 测试2()
Dim Val
Set Val = Application.InputBox("选择单元格", Type:=8)
MsgBox TypeName(Val)
Val = Application.InputBox("选择单元格", Type:=8)
MsgBox TypeName(Val)
End Sub
InputBox 与 Application.InputBox 的 空值、取消 时的返回值。
- inputBox 输入 空值 或点击 取消 时,均返回空值。
- application.InputBox 输入 空值 时返回空,点击 取消 时返回 False。
以下两段代码分别可以用于判断用户当前执行了输入值、输入空值、点击取消(关闭)
Sub 测试3()
Dim Key
Key = InputBox("请输入关键词", "这是 InputBox 测试")
If StrPtr(Key) = 0 Then
MsgBox "点击了取消或是直接关闭了窗口。"
ElseIf StrPtr(Key) <> 0 Then
If Len(Key) = 0 Then
MsgBox "输入了空白值。"
ElseIf Len(Key) <> 0 Then
MsgBox "输入的Key值为:" & Key
End If
End If
end sub
Sub 测试4()
Dim Key
Key = Application.InputBox("请输入关键词", "这是一个测试")
If Key = "False" Then 'False 加双引号的原因请见后文
MsgBox "点击了取消或是直接关闭了窗口。"
ElseIf Key = "" Then
MsgBox "输入了空白值。"
Else
If Len(Key) <> 0 Then
MsgBox "输入的Key值为:" & Key
End If
End If
End Sub