excel_vba_编程教程(完整版)-第31部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
图4-7 通过使用Chr(13)可以将长文本分割成几行
你必须将每段文本片断用引号括起来,内嵌在括号里面的文本(显示状态)需要再用一对括号来括
起来,例如““Chap04。xls””。Chr(13)函数指明你希望开始新的一行的地方。字符串的连接字
符(&)用来返回连接字符串的字符。
在一行输入及其长的文本的时候,很容易失误。回想一下,VB有一个专门的线连续字符(下划线_)
帮你将长VBA语句分割为几行,不幸的是,这个线连续符不能在立即窗口使用。
3。 在工程MyFunctions (Chap04。xls)里添加一个新模块并命名为Sample6
4。 激活模块Sample6并且输入如下所示的子程序MyMessage,确保在每个线连续符前面加个空格:
Sub MyMessage()
MsgBox 〃All done。〃 & Chr(13) _
91
… 页面 108…
& 〃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按钮参数的设置
常量 值 描述
按钮设置
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 应用程序强制返回;应用程序一直被挂起,直到
92
… 页面 109…
用户对消息框作出响应才继续工作。
vbSystemModal 4096 系统强制返回;全部应用程序都被挂起,直到用
户对消息框作出响应才继续工作。
MsgBox显示的其它设置
vbMsgBoxHelpButton 16384 将Help按钮添加到消息框
vbMsgBoxSetForeground 65536 指定消息框窗口作为前景窗口
vbMsgBoxRight 524288 文本为右对齐
vbMsgBoxRtlReading 1048576 指定文本应为在希伯来和阿拉伯语系统中的从右
到左显示
你什么时候应该使用按钮参数呢?假设你要用户对一个问题回到“是”或“否”,你的信息框就需
要两个按钮,当信息框有一个以上的按钮时,就需要将其中一个设置为缺省值,当用户回车的时候,
这个默认的按钮就会自动地被选上。
因为,你可以显示各种各样的信息(重要,警告,信息),所以,你需要通过按钮参数设置图形代
表(图标)来指明信息的重要性。
除了信息类型之外,按钮参数还可以设置是否用户必须先关闭该信息框才能切换到另外的应用程
序。很多情况下,用户需要在对信息框的问题做出反应之前,切换到另外的程序或者进行另外的操
作。如果这个信息框是应用程序模式(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)里添加一新模块,并命名为Sample7
2。 激活Sample7模块,并且输入如下子程序MsgYesNo:
Sub MsgYesNo()
Dim question As String
Dim myButtons As Integer
question = 〃是否要打开一个新工作簿?〃
myButtons = vbYesNo + vbQuestion + vbDefaultButton2
MsgBox question; myButtons
End Sub
在上面的子程序里,变量question储存了你的信息文本,而按钮参数的设置则储存于变量
myButtons。除了使用常量名称之外,你还可以使用它们的值,例如下面的:
93
… 页面 110…
myButtons = 4 + 32 + 256
但是,明确了按钮常数的常量名称的话,你可以使你的程序对你自己以及将来可能要使用该程序的
人来说更容易理解。变量question和myButtons用作MsgBox函数的参数。运行该程序后,你将看到
如图4-9所示的结果。注意,现在按钮“否”是被选中的,它是该对话框的默认按钮,如果你按下
回车,Excel将该信息框从屏幕上移除,因为MsgBox函数后面没有任何指令,所以,不会发生其它
操作。将默认按钮换成vbDefaultButton1设置,可以更改默认按钮。
MsgBox函数的第三个参数是标题,虽然这也是个可选参数,但是它很方便,因为当你忽略它们(默
认为Microsoft Excel)时,就不能给程序提供可视提示。你可以使用这个参数,将标题栏设置为
你想要的任何文字。假设你要过程MsgYesNo显示标题为“新工作簿”,下面的过程MsgYesNo2示范如
何使用标题参数:
Sub MsgYesNo2()
Dim question As String
Dim myButtons As Integer
Dim myTitle As String
question = 〃Do you want to open a new workbook?〃
myButtons = vbYesNo + vbQuestion + vbDefaultButton2
myTitle = 〃New workbook〃
MsgBox question; myButtons; myTitle
End Sub
标题参数文本储存于变量myTitle。如果你没有明确标题参数的内容,VB将默认显示为“Microsoft
Excel”。注意,参数是基于MsgBox函数决定的顺序列出的,如果你要按你自己的顺序列出这些参数
的话,你就必须将参数名称一起写出,例如:
MsgBox title:=myTitle; prompt:=question; buttons:=myButtons
后面两个参数——帮助文件(helpfile)和上下文(context)——经常为那些对Windows环境下的
帮助文件很熟悉的程序员使用。参数helpfile指明某个包含你要显示给用户的附加信息的具体帮助
文件的名称,当你明确了这个参数后,Help按钮就会在信息框上显示出来。当你使用helpfile参数
时,你同时也使用context参数。这个参数表明在帮助文件里你要显示的那个帮助主题。假设
Help。hlp是你创建的帮助文件,55是你要使用的帮助主题,你可以按照如下指令来显示这些信息于
信息框上:
MsgBox title:=mytitle; _
prompt:=question _
buttons:=mybuttons _
helpFile:= 〃HelpX。hlp〃; _
context:=55
上面只是一条VBA语句,使用连接符打断为好几行。
12。MsgBox 函数的运行值
当你显示只有一个按钮的信息框时,可以点击确定按钮或者回车键将信息框从屏幕上移除,然而,
当信息框有两个或以上的按钮时,你的程序需要知道按的是哪个按钮。你可以将信息框结果储存在
一个变量上来实现。表4-2 显示了MsgBox函数返回值。
表4-2 MsgBox函数返回值
选择的按钮 常数 值
OK(确定) VbOK 1
Cancel(取消) vbCancel 2
Abort(终止) vbAbort 3
Retry(重试) vbRetry 4
Ignore(忽略) vbIgnore 5
Yes(是) vbYes 6
No(否) vbNo 7
94
… 页面 111…
MsgYesNo3过程是MsgYesNo2过程修改后的版本,示范如何确定用户按下的是哪个按钮:
Sub MsgYesNo3()
Dim question As String
Dim myButtons As Integer
Dim myTitle As String
Dim myChoice As Integer
question = 〃Do you want to open a new workbook?〃
my