使用MsgBox 函数你目前使用的MsgBox函数局限于给用户用一个简单的,一个按钮的对话框显示信息。
你点击确定按钮或者回车来关闭该信息框。
要创建一个简单的信息框,只要在MsgBox函数名称后面带上一个用引号包括起来的文本就可以了。
换句话说,要显示信息“过程已完成”,你应该准备下列语句:MsgBox "过程已完成" ‘(注意,英文状态的引号)你可以将它输入立即窗口,快速地测试上面的指令,当你输入完这条指令并且回车后,VB 就显示如,图4-5的信息框。
图4-5 将文本作为MsgBox函数的参数,来给用户显示信息MsgBox函数允许你使用其它参数,使你可能决定可用的按钮数目,或者将默认的信息框的标题(Microsoft Excel)改为你自己的标题。
也可以设置你自己的帮助主题。
MsgBox的语法如下:MsgBox (prompt [, buttons] [, title], [, helpfile, context]),注意,MsgBox函数有五个参数,只有第一个,Prompt(提示),是必须的;这些列在方括号里面的参数都是可选的。
当你在提示参数输入一个非常长的文本时,VB决定如何断句,使文本适合信息框大小。
我们在立即窗口里来做些练习,看不同的文本格式技巧:1. 在立即窗口输入以下指令,确保在一行里输入整个文本,回车MsgBox "All done. Now open ""Chap04.xls"" and place an empty disk in the diskette drive.The following procedure will copy this file to the disk."一旦回车,VB显示信息框,如图4-6图4-6 如果你设置一下文本格式,长信息看上去将会更吸引人如果你遇到编译错误,可以点击确定,然后确定文件名用双引号括起来——““Chap04.xls””。
当你的信息文本特别长时,你可以使用VBA函数Chr将它分割为好几行。
Chr函数需要你跟参数,这个参数是0到255之间的数字,它返回这个数字代表的字符。
例如Chr(13)返回的是回车(这和按下回车键相同),以及Chr(10)返回换行字符(这在文本行之间添加空行很有-------------用)。
2. 将上面的指令修改为下述方式:MsgBox "All done." & Chr(13) & "Now open ""Chap04.xls"" and place" & Chr(13) & "an emptydisk in the diskette drive." & Chr(13) & "The following procedure will copy this file to the disk."图4-7 通过使用Chr(13)可以将长文本分割成几行你必须将每段文本片断用引号括起来,内嵌在括号里面的文本(显示状态)需要再用一对括号来括起来,例如““Chap04.xls””。
Chr(13)函数指明你希望开始新的一行的地方。
字符串的连接字符(&)用来返回连接字符串的字符。
在一行输入及其长的文本的时候,很容易失误。
回想一下,VB有一个专门的线连续字符(下划线_)帮你将长VBA语句分割为几行,不幸的是,这个线连续符不能在立即窗口使用。
3. 在工程MyFunctions (Chap04.xls)里添加一个新模块并命名为Sample64. 激活模块Sample6并且输入如下所示的子程序MyMessage,确保在每个线连续符前面加个空格:Sub MyMessage()MsgBox "All done." & Chr(13) _91& "Now open ""Chap04.xls"" and place" & Chr(13) _& "an empty disk in the diskette drive." & Chr(13) _& "The following procedure will copy this file to the disk."End Sub-------------你运行过程MyMessage时,VB显示如图4-7一样的信息。
正如你看到的,在几行输入的文本更具可读性,而且代码更容易维护。
你可以在文本行之间添加一下空白行,来增加信息的可读性。
使用Chr(13)或two Chr(10)函数就可以做到,如下列步骤所述。
5. 输入下面的MyMessage2过程:Sub MyMessage2()MsgBox "All done." & Chr(10) & Chr(10) _& "Now open ""Chap04.xls"" and place" & Chr(13) _& "an empty disk in the diskette drive." & Chr(13)& Chr(13) _& "The following procedure will copy this file to the disk."End Sub图4-8显示了MyMessage2过程产生的信息框。
图4-8 你可以通过在文本行之间添加空行增加信息的可读性既然你已经掌握了文本的格式技术,那么我们就来仔细地看看MsgBox函数的下一个参数吧。
尽管按钮参数时可选的,但是它的使用还是很频繁的。
这个按钮参数明确多少个按钮,并且是什么样的按钮你想要出现了信息框上,这个参数可以是个常量(参见表4-1),也可以是个数字。
如果你忽略这个参数,结果辛苦只会有一个“确定”按钮,正如你在前面的例子里看到的那样。
表4-1 MsgBox按钮参数的设置常量按钮设置vbOKOnlyvbOKCancelvbAbortRetryIgnore-------------vbYesNoCancel vbYesNo vbRetryCancel图标设置vbCritical vbQuestion vbExclamation vbInformation默认按钮设置vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4信息框形式vbApplicationModal 值1234-------------516324864256512768描述仅显示确定按钮,这是默认值显示确定和取消按钮显示终止,重试和忽略按钮显示是,否和取消按钮显示是和否按钮显示重试和取消按钮显示重要信息图标显示问号图标显示警告信息图标显示信息图标-------------第一个按钮是缺省值第二个按钮是缺省值第三个按钮是缺省值第四个按钮是缺省值应用程序强制返回;应用程序一直被挂起,直到vbSystemModalMsgBox显示的其它设置vbMsgBoxHelpButton vbMsgBoxSetForegroundvbMsgBoxRightvbMsgBoxRtlReading409616384655365242881048576用户对消息框作出响应才继续工作。
系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作。
将Help按钮添加到消息框指定消息框窗口作为前景窗口文本为右对齐-------------指定文本应为在希伯来和阿拉伯语系统中的从右到左显示你什么时候应该使用按钮参数呢?假设你要用户对一个问题回到“是”或“否”,你的信息框就需要两个按钮,当信息框有一个以上的按钮时,就需要将其中一个设置为缺省值,当用户回车的时候,这个默认的按钮就会自动地被选上。
因为,你可以显示各种各样的信息(重要,警告,信息),所以,你需要通过按钮参数设置图形代表(图标)来指明信息的重要性。
除了信息类型之外,按钮参数还可以设置是否用户必须先关闭该信息框才能切换到另外的应用程序。
很多情况下,用户需要在对信息框的问题做出反应之前,切换到另外的程序或者进行另外的操作。
如果这个信息框是应用程序模式(vbApplication Modal)的话,用户必须先关闭该信息框后才能继续使用你的应用程序另一方面,如果你想要在用户对信息框响应之前,将所有应用程序挂起,那么你必须在按钮参数里加上系统强制返回设置(vbSystemModal)。
按钮参数的设置分为五组:按钮设置,图标设置,默认按钮设置,信息框形式和其它的MsgBox显示设置(参见图4-1)。
每组设置里面只能选一个加入按钮参数里面。
你可以将每种需要的设置加和起来,来设置按钮参数,例如,要显示一个带两个按钮(“是”和“否”),问号图标以及将“否”按钮设置为缺省值的信息框,你可以在表4-1里查找相应的值并且加和起来,你应该得到292(4+32+256)。
你可以在立即窗口里面输入下列代码,快速查看使用该计算的按钮参数的信息框:MsgBox "Do you want to proceed?", 292下面显示的就是信息框结果。
当你直接使用加和起来的值作为参数时,你的程序可读性就不高了,因为没有参考索引表格供你检查292背后的意思。
要改善你信息框函数的可读性,最好使用常量,而不要使用它们的值,例如,在立即窗口输入下列修改后的语句:MsgBox "Do you want to proceed?", vbYesNo + vbQuestion + vbDefaultButton2 -------------上面的语句得到如图4-9所示的相同结果。
图4-9 你可以使用可选的按钮参数来确定信息框上的按钮个数,下面的例子示范如何在VB过程里使用按钮参数:1. 在工程MyFunctions (Chap04.xls)里添加一新模块,并命名为Sample72. 激活Sample7模块,并且输入如下子程序MsgYesNo:Sub MsgYesNo()Dim question As StringDim myButtons As Integerquestion = "是否要打开一个新工作簿?"myButtons = vbYesNo + vbQuestion + vbDefaultButton2MsgBox question, myButtonsEnd Sub在上面的子程序里,变量question 储存了你的信息文本,而按钮参数的设置则储存于变量myButtons。