




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七课:信息函数Msgbox输入输出语句是VBA中应用最广也是最简单的两种语句,本课时主要介绍两种输出语句的语法和思路,下一课时则介绍两种输入语句的语法和应用思路。本课时内容摘自Excel VBA程序开发自学宝典(第2版)第10章7.1 Msgbox函数的功能及作用VBA最常见的信息输出方式是使用Msgbox函数,在任何VBA的书籍中,它所出现的频率都是最高的。在英文中,Msg表示Message,即消息,而Msgbox则表示信息框。顾名思义,Msgbox是用于在屏幕中显示某些信息的对话框,告诉用户需要做什么,或者提示程序的运算结果,或者某操作的步骤说明等,它的作用极其广泛。站在VBA开发者立场,对Msgbox函数的功能可做以下分类:7.1.1 返回运算结果告诉用户VBA的运算结果通常有三种模式:存入工作表、打印到文件和利用消息框返回结果。通常对于临时性的、不需要储存的信息可以利用对话框来展示,它的特点是关闭窗口后就完全消失,不占用任何内存空间。7.1.2 询问执行方式对于某些有多种执行选项的操作,例如“隔行着色工作表”工具,它可以对奇数行着色,也可以对偶数行着色,为了体现程序的通用性和灵活性时,往往弹出一个提示框让用户选择执行方式,这是最佳的程序开发思路。例如下图中,用户单击不同按钮时,VBA会执行不同的着色方式:图7.1 利用Msgbox询问执行方式7.1.3 提示执行步骤在设计VBA程序时,如果后续需执行的操作较复杂,应该通过一个消息框来提示用户。包括该程序大概有多少步骤,各步骤中需要注意哪些问题,或者在什么情况下需要跳过什么步骤等,从而减少程序出错的机率。7.1.4 告知错误原因终端用户在执行VBA程序时,总会有或多或少的错误产生。有时是程序员粗心写错代码造成,有时是代码的兼容性造成,有时是代码完全正确但用户的数据不规范造成。而VBA很多时候返回的错误提示让人摸不着头脑,程序员有必要预先设置更有意义的错误提示,告诉用户产生此错误的可能情况。例如,当工作表保护时执行以下语句,一定会产生错误提示:Sub 创建新表()Sheets.AddEnd Sub图7.2 工作簿保护时创建新表失败的提示从图片和代码进行分析,错误提示与代码实际出错的原因风马牛不相及,这完全不利于终端用户了解程序出错的原因。为了避免这种差错,开发程序者需要通过一个信息框来展示更有意义的错误提示。可以按这个思路修改代码:Sub 创建新表() If ActiveWorkbook.ProtectStructure Then MsgBox 当前工作簿被保护,禁止新建工作表 Else Sheets.Add End IfEnd Sub下图是修改后的提示框,用户可以立刻明白错误产生的原因。图7.3 定义更有意义的提示框7.1.5 展示当前状态类似于DOS程序中“请按任意键继续”一样,VBA也可以在程序执行时显示当前的状态,然后当用户单击回车后再继续执行。7.1.6 设计程序帮助Excel自身的所有功能都有相应的说明信息,利用VBA开发程序时也需要设计一帮助系统,不管这个系统大小如何,一定要有相应的说明。通常包括三方面的内容:(1)程序功能说明。(2)程序版本及各版本修改内容阐述。(3)本程序适用范围,即兼容哪些Office版本,或者适用哪个行业。当然,利用Msgbox制作帮助界面受字符长度限制,只能提供一些简单且简短的信息。7.2 Msgbox函数的语法Msgbox用于在对话框中显示消息,等待用户单击按钮,并返回一个Integer类型的值。当用户单击其中的按钮后将返回信息给VBA,程序员可以根据这个返回值来决定后续的操作。7.2.1 Msgbox的语法Msgbox的具体语法如下:MsgBox(prompt, buttons , title , helpfile, context)表 7-1 Msgbox函数的参数说明参数说明Prompt它将输出到对话框中,显示在屏幕上,通常表示告诉用户某个信息。它的最大长度大约为 1024 个字符,由所用字符的宽度决定。Buttons它表示按钮的个数、样式和排列方式,以及默认按钮是哪一个,采用数值表示。Title在对话框标题栏中显示的字符串表达式。如果省略 title,则将应用程序名放在标题栏中。Helpfile字符串表达式,识别用来向对话框提供上下文相关帮助的帮助文件。Context数值表达式,由帮助文件的作者指定给适当的帮助主题的帮助上下文编号。以下代码(放置位置:模块中)是Msgbox函数的最常用的一种形式,它使用了prompt、 buttons、title三个参数,不同参数决定了信息框中的不同位置的部件,效果如图所示:Sub 宏() MsgBox 您喜欢VBA吗?, vbYesNo, 提示End Sub图 7.4 常见的信息框与Msgbox参数的对应关系7.2.2 Msgbox的参数Msgbox函数包含5个参数,都是可选参数。其中最重要的是第一参数,最简单的也是第一参数,第一参数所指定的字符串将显示在信息框中间。最复杂的是第二参数,它是一个数值,用于表示信息框中按钮的个数和显示样式,且能通过它指定默认按钮。下表展现了Msgbox函数所支持的按钮常数,以及对应的数值、显示的状态和外观。表 72 Msgbox第二参的可选值说明对于上表需要补充四点。其一:Msgbox的第二参数可以使用上表中的常数,也可以采用数值,它们功能一致。其二:数值0到5用于确定按钮的个数和样式,16到64用于确定图标的样式,256和512用于分别代表默认按钮是第2个还是第3个。所谓的默认按钮是指单击回车键时被选中的按钮,Excel会用特殊的外观标示这个默认的按钮。当不指定默认按钮时,第一个按钮为默认按钮。其三:最后三行的示意图仅用于展示默认按钮的状态,三个常数的功能是指定哪一个按钮是默认按钮,而不是产生这三个图标。如果Msgbox第二参数采用3+512能产生是、否和取消三个按钮,且第三个按钮是默认按钮的效果。其四:以上3段代码(0-5为第一段,16到64为第一段,256和512为第三段)可以相加,表示多种效果的混合应用。例如以下两句代码能实现图7.5所示效果:Sub 试一试()MsgBox VBA很棒!, 1 + 64End Sub或者:Sub 试一试2()MsgBox VBA很棒!, vbOKCancel + vbInformationEnd Sub以下两句代码能实现图7.6所示效果:Sub 试一试3()MsgBox VBA很棒?, 4 + 32 + 256End Sub或者:Sub 试一试4()MsgBox VBA很棒?, vbYesNo + vbQuestion + vbDefaultButton2End Sub以下代码能实现图7.7所示效果(0到5段未指定则默认当作0处理,即“确定”按钮):Sub 试一试5()MsgBox VBA很棒!, vbExclamationEnd Sub 图 7.5 效果一 图 7.6 效果二图 7.7 效果三Msgbox函数能弹出信息框,达到警示、通用、提示用户的作用,所以在工作中应用较广。同时,由于Msgbox函数具有返回值,可以根据返回值知道用户单击了信息框中的哪一个按钮,所以Msgbox函数也经常配合条件语句IF Then使用。例如需要显示一个两行信息且带一个OK按钮的对话框,那么可以使用以下代码:Sub 试一试6()MsgBox 第一行 & Chr(10) & 第二行, vbOKOnlyEnd Sub执行后效果如下图所示。图7.8两行信息且带一个OK按钮如果需要显示一个确定按钮与一个取消按钮,且标题显示为“提示”,那么可用以下代码:Sub 试一试7()MsgBox 现在开始执行?, vbOKCancel, 提示End Sub执行后效果如下图所示。 图7.9一个确定按钮与一个取消按钮如果同样是显示图7.9的效果,且需要默认选中第二个,那么代码可以修改如下:Sub 试一试8()MsgBox 现在开始执行?, vbOKCancel + vbDefaultButton2, 提示End SubMsgbox的第二参数使用了“vbOKCancel + vbDefaultButton2”,即表示默认值为第二个按钮,当用户直接单击回车键时是按下“取消”按钮而非“确定”按钮。效果图7.10所示。图7.10一个确定按钮与一个取消按钮默认第二个如果需要显示“是”和“否”按钮,再加入一个问号图标,且使用数字来表示按钮样式,那么代码如下:Sub 试一试9()MsgBox 继续执行下步?, 292, 继续End Sub代码中292的计算方式是:4 + 32 + 256,其中4表示显示“是”和“否”的按钮,32代表显示问号图标,而256则表示默认按钮为第二个。执行后效果如7.11所示。图7.11两个按钮加问号图标当然,根据表7-3所示的常数值还可以有很多种组合,大家可以自行测试。7.2.3 Msgbox的返回值Msgbox主要作用是显示一些信息给终端用户,然而对于程序开发者来说,更重要的一个功能是它具有返回值,且可以根据返回值决定下一步操作。Msgbox的返回值有7种,如7-3所示。表7-3 Msgbox的返回值Msgbox的返回值对于开发者来说比较有用。例如当用户单击“是”按钮时,执行后续的操作,如果单击“否”按钮则直接退出程序。那么可以参考以下代码:Sub 工作表改名() 如果用户单击“是”按钮 If MsgBox(将前表改名为今日期?, 292, 修改日期) = vbYes Then 将当前工作表改名为今天的日期 ActiveSheet.Name = Format(Date, yyyy-mm-dd) Else 否则 Exit Sub 退出程序 End If 其他更多代码.End Sub执行以上代码时,将弹出如图7.12所示信息框.图7.12询问执行方式如果用户直接单击回车键,那么程序立即退出,不做任何回应;如果用户单击“是”按钮,那么立即以当前日期命名工作表,如图10.9所示。 图7.13选择“是”按钮则工作表改名再举一个实例,仍然对工作表以当前日期重命名,如果遇到有重名工作表时弹出包括“重试”、“忽略”和“终止”的对话框。代码如下:Sub 工作表改名() 声明变量, 用于获取Msgbox的返回值 Dim msg As VbMsgBoxResult设置一个标签err: On Error Resume Next 防错, 当出现错误时执行下一步 ActiveSheet.Name = Format(Date, yyyy-mm-dd) 将当前工作表命名 If err.Number 0 Then 如果存在错误(即已经有工作表的名称等于当前日期) 获取Msgbox的返回值 msg = MsgBox(存在同名工作表, 是否继续?, 2, 修改日期) 如果用户单击中断则退出程序 If msg = vbAbort Then Exit Sub 如果用户单击忽略, 则将当前表命名为日期, 并添加左右括号 If msg = vbIgnore Then ActiveSheet.Name = ( & Format(Date, yyyy-mm-dd) & ) 如果用户单击重试则清除错误设置, 然后返回Err标签处继续执行 If msg = vbRetry Then err.Clear: GoTo err End IfEnd Sub在以上代码中,Msgbox的第二参数使用2,即表示产生 “终止”、“重试”、“忽略”三个按钮,而单击三个按钮时分别对应Abort、Retry 及 Ignore三个返回值。图7.14重名时的提示信息在过程中,只要命名时已经产生重命名错误Msgbox对话框才可能出现。如果用户单击对话框第一个按钮,则直接终止程序,利用“Exit Sub”来处理;如果用户单击第三个按钮,则会忽略错误,将工作表命名为日期加括号;如果用户单击第二个按钮,那么程序会继续返回首行继续执行程序,它将会循环产生同样的对话框,直到用户单击其他选项。如果单击“忽略”,则程序执行结果如图7.15所示。 图7.15单击忽略时效果在使用Msgbox的返回值时,Msgbox的各参数必须使用括号,仅仅通过Msgbox函数弹出对话框时,它不是一个表达式,则不需要括号。以下两种方式都是错误的Msgbox用法。Sub 试一试10()MsgBox( 你好! , 64, 提示)End subSub 试一试11()Result = MsgBox你好! , 64, 提示End sub当掌握好Msgbox函数的返回值规律后,我们用Msgbox函数设计一个有趣的过程吧:Sub 求爱() Dim Msg As VbMsgBoxResult求爱开始: Msg = MsgBox(小芳,我很爱你,答应嫁给我吧!, vbYesNo, 求爱) If Msg = vbYes Then MsgBox 嘢,我成功了!, vbCritical, 真开心 Exit Sub Else GoTo 求爱开始 End IfEnd Sub请执行以上代码,是否很有趣?程序首先弹出对话框让你选择“是”或者“否”,如果单击“否”就永远循环下去,直到你失去耐心.如果单击“是”,马上就OK了,皆大欢喜。7.3 Msgbox函数的限制Msgbox函数用于将信息展示给用户,它的应用极其广泛。然而它有自身的一些限制,作为程序员有必要了解它的所有限制,才能恰当地运用好Msgbox。总体来说,Msgbox具有三方面的限制。7.3.1 字符数问题Msgbox有最大高度与宽度限制,而且只有在字符超过它的限制时它才可以体现出来。因为Msgbox具有自动缩放功能,当信息少时它会自动缩小信息框以适应字符的宽度,此时无法目视它的可用范围。要测试Msgbox可显示的最多字符数可以使用以下方式:(1)在A1单元格中存放超过1000个英文字母,在a2单元格中存放超过1000个汉字;=REPT(A,999)&B=REPT(中,1999)&国(2)在模块中录入以下语句:Sub Msgbox测试() MsgBox a1 MsgBox a2End Sub执行以上代码后可以发现,英文字符可以显示1024个左右,而纯汉字只能显示511个。如果英文与汉字共用,那么按一个汉字占用两个英文宽度计算。如果需要显示超过以上限制的字符信息,那么只能分屏显示,当然这不是好办法。通常采用窗体控件或者WScript技术来突破。7.3.2 控制权问题Msgbox对话框总是拥有焦点,且拥有绝对的控制权。即只要Msgbox对话框不关闭,那么代码都不会停止运行,只有关闭对话框后才会交还控制权给程序,继续执行其他语句。明白这一点很重要,如果程序在执行过程中需要显示信息,例如需要当前执行进度,而且不能影响程序继续执行,那么Msgbox方式并非首选。建议使用状态栏信息或者无模式的窗体。图7.16即为利用状态栏显示进度来替换Msgbox的效果。Sub 提示日期() Application.StatusBar = 今天的日期是 & DateEnd Sub 图7.16 状态栏显示当前日期7.3.3 时间性问题Msgbox的对话框显示的对话框,如果用户不手动关闭,它会永远存在。如果用户需要它在指定时间自动关闭,那么Msgbox也无法达成需求。通常采用三种方法来实现:用户窗体、WScript技术和API,在后面小节中将进行演示。7.3.4 利用WScript突破Msgbox限制WScript是一种脚本语言,它也可以实现输出对话框信息,而且可以突破Msgbox的一些限制。利用脚本语言显示信息可用WScript.Shell语言中的Popup方法。它的具体语法为:WshShell.Popup(strText, natSecondsToWait, strTitle, natType) = intButton其中第一参数是显示的信息,第二参数是显示的时间,表示信息框在多少秒钟内自动关闭,第三参数是标题,第四参数是按钮与图标的状态。WScript.Shell语言中的Popup方法相对于Msgbox有两个优点:l 可显示的字符远远超过1024l 可以自动关闭对话框如果A1单元格超过2000个字符,那么可以使用以下语句显示A1字符串的文本框:=REPT(中,1999)&国Sub 显示A1信息() CreateObject(WScript.Shell).Popup a1, , 提示, 64End Sub如果需要信息显示3秒自动关闭,可以用以下代码:Sub 自动关闭() CreateObject(WScript.Shell).Popup 三秒钟关闭, 3, 提示, 64End
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨文化背景下如何制定有效的信息披露政策及管理机制
- 学生论文写作能力的培养计划
- 餐饮茶楼装修设计与成本控制策略
- 实现仓库运输成本管理的工作计划
- 质量管理体系在教育培训中的推广与应用
- 通过普及法律常识来增强公民交通安全意识
- 跨境医疗旅游的法规与政策环境
- 音乐类网站的互动性设计与用户心理分析
- 高中语文作文学会执著向前
- 高中语文情感美文丁香花开
- 变电站质量验收及评定范围
- 【橡胶工艺】-橡胶履带规格
- 小学劳动技术云教三年级下册植物栽培种植小葱(省一等奖)
- 籍贯对照表完整版
- 程式与意蕴-中国传统绘画课件高中美术人美版(2019)美术鉴赏
- 注塑一线工资考核方案
- 二级精神病医院评价细则
- GB/T 7251.3-2017低压成套开关设备和控制设备第3部分:由一般人员操作的配电板(DBO)
- 工程质量回访记录
- GB/T 2572-2005纤维增强塑料平均线膨胀系数试验方法
- 维修质量检验制度
评论
0/150
提交评论