本篇介绍的内容:
1,当用户使用宏或procedure时,使用InputBox来接收或收集用户输入的信息。
2,根据需求使用IF语句构建逻辑。
3,使用Message Box将信息展示给用户,比如用户输出错误,就提示用户。
Prompting the User for Input Using an InputBox / 使用InputBox获取用户输入信息
VBA语言中,有个内置的对象,叫做InputBox,用来提示用户输入信息。
InputBox函数语法如下:
InputBox(prompt, title, default, xpos, ypos, helpfile, context) as string
• Prompt: The message to the user that appears on the Input Box (ex. Please enter a value)
• Title: The text that shows up at the top of the Input Box (ex. Sort Box)
• Default: Any default value that you want the Input Box to contain (ex. Enter a Value here)
• Xpos/Ypos: The position of the InputBox on the screen
• HelpFile: Any associated help file for the user
1, 调用此函数,返回的是一个字符串
2,第一个参数prompt, 是字符串表达式,是在对话框中显示的的文本信息,是必需项。最长约为1024个字符, 可以加入换行符显示多行。
3,第二个参数title是可选的,是对话框标题栏中显示的字符串表达式。 如果省略title,则标题栏中将显示应用程序名称。
4,第三个参数default是可选的,是文本输入框中显示的字符串表达式,在未提供其他输入时作为默认响应。 如果省略了 default,文本框将显示为空。
5,第四个参数xpos是可选的,指定对话框的左边缘与屏幕的左边缘的水平距离(以缇为单位)的数值表达式。 如果省略了xpos,对话框将水平居中。
6,第五个参数ypos是可选的,指定对话框的上边缘与屏幕的顶部的垂直距离(以缇为单位)的数值表达式。 如果省略了 ypos,对话框将位于屏幕垂直方向往下大约三分之一的位置。
6,第六个参数helpfile是可选的,用于标识帮助文件的字符串表达式,前者用于为对话框提供上下文相关的帮助。 如果提供 helpfile,则也必须提供 context。
7,第七个参数context是可选的,帮助上下文数值的数值表达式,该数值由帮助作者为相应的帮助主题分配。 如果提供 context,则也必须提供 helpfile。
注:同时提供有 helpfile 和 context 时,用户可以按 F1 (Windows) 或 HELP (Macintosh) 以查看与 context 对应的帮助主题。比如:
' Use Helpfile and context. The Help button is added automatically.
MyValue = InputBox(Message, Title, , , , "DEMO.HLP", 10)
文本框输入框仅接受 255 个字符。 将返回字符串截断为 254 个字符。
文本框不接受换行符,如 Shift+Enter。 如果用户在文本框中粘贴带换行符的文本,则文本在换行符时将被截断。
第一个参数是必须的,后面的参数是可选的,则使用默认值。举例如下:
userInput = InputBox("What is your age?", "Question", "20")
userInput = InputBox("What is your age?", , "20")
上面两条语句都可运行,一个询问年龄的问题,默认值是20。
区别在于第一条语句在对话框中显示标题,第二个没有给出标题参数,为空,使用默认值。
这里给出的参数是按照函数声明中的参数顺序给出的。
Building Logic in Your Macros Using an IF Statement / 使用IF语句在宏里构建逻辑
在我们创建的VBA宏里,大部分的功能都是逻辑处理的代码。而逻辑处理代码的最主要形式就是IF语句。
语法:(condition举例,比如:input = "start")
If condition Then
ElseIf condition Then
Else
End If
Using a MsgBox to Message the User
和InputBox要求用户输入信息相反,Message Box这个对象,是用来向用户显示各种信息的。
MsgBox在对话框中显示消息,等待用户单击按钮,并返回一个 整数,指示用户单击的哪个按钮。
可以通过参数设置不同的按钮,用户点击不同按钮,生成不同的返回值。
此函数语法如下:
MsgBox(prompt, buttons, title, helpfile, context) As Integer
• Prompt: The message to the user
• Buttons: a value representing the type of buttons on the message box (ex. vbYesNo)
• Title: Text that appears at the top of the message box
• HelpFile: Any associated help file for the user
• Context: Numeric value to associated help file
1, 调用此函数,返回的是一个整数值
2,第一个参数prompt是必需项,是字符串表达式。表示显示的消息,是必需项。 最长约为1024个字符(和字符宽度有关)。多行显示可以使用回车符 (Chr(13))、换行符 (Chr(10)) 或回车换行符组合 (Chr(13) & Chr(10)) 将其分隔。比如:"Hello"+Char(10)+"World" 或 "Hello"& Char(10) & "World"
3,第二个参数buttons是可选的,数值表达式,用于指定要显示按钮的数量和类型、要使用的图标样式、默认按钮的标识和消息框的形式的值的组合。 如果省略,则 buttons 的默认值为 0。
4,第三个参数title是可选的。对话框标题栏中显示的字符串表达式。 如果省略 title,则标题栏中将显示应用程序名称。
5,第六个参数helpfile是可选的,用于标识帮助文件的字符串表达式,前者用于为对话框提供上下文相关的帮助。 如果提供 helpfile,则也必须提供 context。
6,第七个参数context是可选的,帮助上下文数值的数值表达式,该数值由帮助作者为相应的帮助主题分配。 如果提供 context,则也必须提供 helpfile。
buttons 参数设置如下:
常量 | 值 | 说明 |
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 | 第四个按钮是默认按钮。 |
vbApplicationModal | 0 | 应用程序模式;用户在继续在当前应用程序中工作前必须响应消息框。 |
vbSystemModal | 4096 | 系统模式;在用户响应消息框前,所有应用程序都挂起。 |
vbMsgBoxHelpButton | 16384 | 在消息框中添加“帮助”按钮。 |
vbMsgBoxSetForeground | 65536 | 将消息框窗口指定为前景窗口。 |
vbMsgBoxRight | 524288 | 文本右对齐。 |
vbMsgBoxRtlReading | 1048576 | 指定文本在希伯来语和阿拉伯语系统中应从右到左显示。 |
第一组值 (0-5) 表示对话框中显示的按钮的数量和类型;第二组值(16、32、48、64)表示图标样式;第三组值(0、256、512)用于确定默认按钮;第四组值(0、4096)用于确定消息框的形式。 合并数字以创建最终 buttons 参数值时,只是用每个组中的其中一个数值。
这些常量由 Visual Basic for Applications 指定。 因此,名称可代替实际值在代码中的任意位置使用。
返回值:
常量 | 值 | 说明 |
vbOK | 1 | 确定 |
vbCancel | 2 | Cancel |
vbAbort | 3 | 中止 |
vbRetry | 4 | 重试 |
vbIgnore | 5 | 忽略 |
vbYes | 6 | 是 |
vbNo | 7 | 否 |
同时提供有 helpfile 和 context 时,用户可以按 F1 (Windows) 或 HELP (Macintosh) 以查看与 context 对应的帮助主题。 某些 主机应用程序(例如,Microsoft Excel)还会在对话框中自动添加“帮助”按钮。比如假定 DEMO.HLP 为帮助文件,该文件包含帮助上下文数值等于 1000 的主题,示例如下:
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Msg = "Do you want to continue ?" ' Define message.
Style = vbYesNo Or vbCritical Or vbDefaultButton2 ' Define buttons.
Title = "MsgBox Demonstration" ' Define title.
Help = "DEMO.HLP" ' Define Help file.
Ctxt = 1000 ' Define topic context.
' Display message.
Response = MsgBox(Msg, Style, Title, Help, Ctxt)
If Response = vbYes Then ' User chose Yes.
MyString = "Yes" ' Perform some action.
Else ' User chose No.
MyString = "No" ' Perform some action.
End If
注意上面设置buttons参数时,使用逻辑或运算符,也可以使用加运算,结果是一样的。
如果对话框中显示“取消”按钮,按 ESC 键与单击“取消”具有相同的作用。 如果对话框中包含“帮助”按钮,则会为对话框提供上下文相关帮助。 但是,在单击其他按钮中的某个按钮之前不会返回任何值。
要省略某些位置参数,必须包含相应的逗号分隔符。
示例说明
下面的表表格,通过用户输入选择,来选择要根据哪一列进行排序:
Public Sub SortList()
Dim userInput As String
Dim tryAgain As Integer
userInput = InputBox("1=Sort by Division, 2=Sort by Category, 3=Sort by Total Sales")
if userInput = "1" Then
DivisonSort
elseif userInput = "2" then
CategorySort
elseif userinput = "3" Then
TotalSort
Else
tryAgain = msgbox("Incorrect Value. Try Again?", vbYesNo)
if tryAgain = 6 then ' User press yes
SortList
end if
End If
End Sub
Sub DivisionSort()
Selection.Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Sub CategorySort()
Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Sub TotalSort()
Selection.Sort Key1:=Range("F4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
用户选择根据哪一列排序,如果输入错误,则提示用户,并可以选择重新操作。
下面的三个宏使用来执行排序操作的,可以通过录制宏的方法,获得相应的操作代码,并加以改进。遇到不懂的地方,就按F1。
参考:
InputBox 函数 (Visual Basic for Applications) | Microsoft Learn