通常,我们会使用用户窗体来设计与用户交互的界面,实现用户与程序的连接。其实,Excel VBA已经为我们提供了简单方便的交互方式。在《Excel VBA解读20:用户交互初体验——MsgBox函数》中,我们介绍了VBA的内置函数:MsgBox函数。MsgBox函数会让Excel弹出一个消息框,为用户提供相关的信息。
本文主要讲解用于获取用户输入信息的InputBox方法。如下图1所示的对话框,允许用户输入数据并获取用户输入。
图1
InputBox方法的语法:
Application.InputBox(Prompt,[Title],[Default],[Left],[Top],[HelpFile],[HelpContextID],[Type])
其中:
参数Prompt,必需,用于指定显示在对话框中提示用户输入的文本。
参数Title,可选,提供显示在对话框标题栏的文本。如果忽略,则默认为“输入”。
参数Default,可选,当对话框初始化时,指定对话框中显示在文本输入框中的值。如果忽略,则文本框中为空。
参数Left,可选,指定对话框相对于屏幕左上角的x位置,以磅为单位。
参数Top,可选,指定对话框相对于屏幕左上解的y位置,以磅为单位。
参数HelpFile,可选,为对话框提供帮助文件的名字。如果参数HelpFile和参数HelpContextID都被设置,则对话框中显示帮助按钮。
参数HelpContextID,可选,在参数HelpFile中的帮助主题的上下文ID编号。
参数Type,可选,指定返回的数据类型。如果忽略该参数,则对话框返回文本。下图2所示的表格中,列出了可以传递到参数Type中的值,可以是一个值或者多个值之和(即任意组合)。例如,如果想要输入框接受文本和数字,则可以设置参数Type为1 2。
图2
使用InputBox方法,可以是显示简单的对话框,接受用户输入的信息并可以在代码中使用这些信息。如上图1所示,对话框有“确定”和“取消”两个按钮。如果单击“确定”按钮,那么Input方法返回在对话框中输入的值;如果单击“取消”按钮,则返回False。
如果参数Type设置为0,那么InputBox方法以文本形式返回公式,例如“=2 3”。如果在公式中有任何的引用,那么作为A1样式的引用返回。
如果参数Type设置为8,那么InputBox方法返回一个Range对象。此时,必须使用Set语句来将对话框的结果赋值给一个Range对象变量,否则,变量会被设置为单元格区域中的值而不是Range对象。
如果使用InputBox方法要求用户输入公式,那么必须使用FormulaLocal属性将公式赋值给Range对象。
VBA还提供了一个与InputBox方法同名的内置函数:InputBox函数,只能在对话框中输入数据,如果用户什么也没有输入,则返回零长度的字符串;如果用户单击“取消”按钮,同样返回一个零长度字符串。注意,Application.InputBox调用InputBox方法,而单独的InputBox则是InputBox函数。总的来说,InputBox方法的功能更加强大。
示例1:获取用户输入的数据
下面的代码显示一个对话框,要求用户输入文本,然后获取并显示用户输入的文本。
Sub testInputBox()
Dim varInput As Variant
varInput = Application.InputBox( _
Prompt:=”请输入要查找的文本:”, _
Title:=”查找数据”)
MsgBox “你要查找的文本是: ” & vbCrLf &varInput
End Sub
运行代码后的效果如图3所示。
图3
示例2:求所选择的单元格区域中的数值之积
下面的代码来自VBA帮助。使用对话框要求用户选择包含3个单元格的单元格区域,并将其传递给自定义函数MyFunction,将单元格区域中的3个值相乘并返回结果。
Sub cmb_value_select()
Dim rng As Range
Set rng = Application.InputBox( _
Prompt:=”选择单元格区域:”, _
Type:=8)
If rng.Cells.Count <> 3 Then
MsgBox “请选择3个单元格!”
Exit Sub
End If
‘调用MyFunction函数求值
‘并在当前单元格中放置结果
ActiveCell.Value = MyFunction(rng)
End Sub
Function MyFunction(rng As Range)As Double
MyFunction = rng(1) * rng(2) * rng(3)
End Function
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎投稿:xhdsxfjy@163.com,与大家共享精彩知识。