




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八课 输入语句Inputbox上一节课讲述了输出语句Msgbox,它可以将某些信息输出到屏幕上。本节课讲述与之对应的输入语句。输入语句主要Inputbox函数和Application.lnputbox方法,它们功能相近,不过后者更强 大。第8.1节Inputbox函数Inputbox函数是VBA中用于录入数据的函数,它可在屏幕上创建一个输入框,等待用户 输入字符。当按下“确定”或者“取消”按钮后可返回用户录入的String类型的文本或者空文本(当按下“取消”键时是空文本)。Inputbox可为用户提供数据录入窗口,然后根据用户录入的字符决定下一步的操作。 例如下图中,用户的录入信息决定程序的
2、计算方式,这是典型的inputbox应用。图1以录入值确定计算方式8.1.1 Inputbox函数的语法Inputbox的具体语法如下:In putBox(prompt, title , default , xpos , ypos , helpfile, con text)其中第一参数是必选参数,其余参数为可选参数。各参数的详细解释见下表:表1 Inputbox的参数详解部分描述Prompt作为对话框消息出现的字符串表达式。prompt的最大长度大约是 1024个字符,由所用字符的宽度决定Title显示对话框标题栏中的字符串表达式。如果省略title,则把应用程序名放入标题栏中Default显
3、示文本框中的字符串表达式,在没有其他输入时作为默认值Xpos数值表达式,成对岀现,指定对话框的左边与屏幕左边的水平距离。如果省略xpos,则对话框会在水平方向居中Ypos数值表达式,成对出现,指定对话框的上边与屏幕上边的距离。如果省略ypos,则对话框被放置在屏幕垂直方向距下边大约三分之一的位置Helpfile字符串表达式,识别帮助文件,用该文件为对话框提供上下文相关的帮助Context数值表达式,由帮助文件的作者指定给某个帮助主题的帮助上下文编号其中最重要的是前面三个参数,包括提示信息、对话框标题和默认值。在特殊情况下,第四、第五参数也具有其实用价值一一强制指定对话框的显示位置,从而防止对话
4、框挡住当前窗口。8.1.2案例应用从以下案例中,可以加深对Inputbox的认识。1定制“另存为”对话框设计一个用于文件另存的对话框,固定保存在C盘下,用户可以随意定制文件名,默认名称为当前日期。代码如下:Sub工作簿另存()Dim FileName As String声明变量弹出一个录入框,让用户指定文件名,默认值为当前日期FileName = InputBox( 请输入工作簿新名称 ,”另存为, Format(Date, yyyy-mm-dd), 10, 10)如果按下了取消或者录入空值,那么结束过程If Len(FileName) = 0 Then Exit Sub当前工作簿另存到C盘中
5、,文件名为用户指定字符ThisWorkbook.SaveAs c: & FileNameEnd Sub执行以上代码时,将弹出一个“另存为”对话框供用户录入新名称,其默认值为当前日 期,如下图所示:图2定制的“另存为”对话框关于以上代码,补充八点:(1) Inputbox的返回值总是文本,如果要求返回值不是文本尽量改用application.lnputbox 。本例中用变量FileName来保存Inputbox的值,所以变量FileName的数据类型也用 String。(2) date语句用户于获取当前的系统日期,默认的日期格式受控制面板所影响,分隔符有可能是“也可能是“ /”,而“/”不能作为
6、文件名称,所以本例采用Format函数将它格式化,强制使用“-”作分隔符。Format函数类似于工作表函数text,可以将数值、日期按需求转换格式。而且text函数能用的格式绝大多数都能用于Format中。InputBox函数的第4、第5参数分别使用10,表示输入框显示在屏幕左上角,离幕屏 的上边缘和左边缘的距离都是10。原点是屏幕左上角,而不是Exce I应用程序的左上角,当改变Excel的窗口大小可以看出差异。(5) InputBox函数允许用户随意录入字符,也提供默认值。默认值由函数的第三参数决定。按下“取消”按钮时,函数的返回值是空文本,其长度为0。由于文件的名字不可能长度为0,所以为
7、了防错,加入“ Exit Sub”,表示用户不指定文件名称就结束过程,不再执 行后面的代码。ThisWorkbook表示VBA代码所在工作簿, 例如代码写在 Book1中,那么ThisWorkbook代表Book1,代码写在 Book2中那么 ThisWorkbook代表Book2。Workbook.SaveAs 方法”c: & FileName 。(8) Workbook.SaveAs方法表示将工作簿另存,可以使用关键字“ 在帮助中搜索到它的详细说明。它的参数是文件路径,查例采用的“2. 根据指定月份批量创建工作表要求:用户指定一个月份,程序创建以该月每日日期命名的工作表。代码如下:Sub新
8、建工作表()批量建立新表,个数等于本月天数,同时对日期命名,并建立目录Dim i As Byte, months As Byte声明变量弹出一个对话框,让用户指定月份,默认显示当前月 months = lnputBox(请输入月份,程序将建立该月每日日期命名的工作表,确定月份Month(Date)批量生成工作表,其个数等于指定月份的天数减去当前已有工作表个数,即确保工作表数量等于该月天数WorkSheets.AddAfter:=WorkSheets(WorkSheets.Count),Count:=Day(DateSerial(Year(Date), months + 1,0) - Sheet
9、s.Count将所有工作表重命名,工作表名对应每日的日期For i = 1 To Worksheets.CountWorkSheets(i).Name = months & 月& i & 日对每个工作表命名Next iMsgBox 建立完毕! , 64End Sub执行以上代码时,先弹出以下对话框:清揃入月色程帛弓建立该号毎日日朋命名的工吃表13图3输入月份(默认值是当前月的月份)录入月份后可以得到以下结果:AECDEF12si5E # h $ 匸 1LL勺口 2 二匸归/3月化y 3J=5 T 皿图4以指定月中每日日期命名的工作表针对以上代码需要补充五点:(1)代码中“ Dim i As B
10、yte, months As Byte ”用于声明变量和变量的数据类型,这是下一 节课的讲述重点。本课时稍有了解即可。数据类型Byte的范围是0-255,因为月份和日期的范围是1-12和1-31,所以宜用 Byte型变量。(2) Month函数用于计算日期值的月份。由于Date表示当前系统日期,所以Month(Date)的计算结果是本月月份。(3) 由于要创建等于整月天数的工作表,而工作簿中已经在若干个工作表,可能1个也可能3个,所以本例采用的办法是整月的天数减去现有的工作表数量(WorkSheets.Count)。Worksheets.Add方法表示创建工作表,其语法如下:Worksheet
11、s.Add(Before, After, Cou nt. Type)其中Before和After表示新表的参照位置,两者只能取其一。Count参数表示工作表的数量,即一次性创建的数量。本例采用的是“ Day(DateSerial(Year(Date), mon ths + 1, 0) - Worksheets.Cou nt ”,即整月天数减去已经有的 工作表数量。Type参数表示新表的类型,默认值是工作表。代码After:=Worksheets(Worksheets.Count) ”表示新表的位置是最后一个工作表之后。“ Worksheets.Cou nt ”表示工作表的总数量,“ Works
12、heets(Worksheets.Cou nt) ” 则是最后一个工作表。(5) “ Day(DateSerial(Year(Date), mon ths + 1, 0) ”比较难懂一点。“ DateSerial(Year(Date),mon ths + 1,0) ”表示变量mo nths所代表的月份的下一个月的0号这一天的日期值,由于日期函数DateSerial可以智能地调节日期,没有0日这一天,所以将下月0日调整为本月最后一天。代码正是利用了这个智能调节功能,故意将月份设置为mo nths + 1,将日期设置为0日,从而简单地获得months月最后一天的日期。最后利用Day函数计算这个日期
13、在当月中属于第几天。例如2013年2月28日的日期序号是41333, Day函数能将它转换成 28,表示这一天是当月的第28天。(6) 创建好工作表后,利用一个循环语句对工作表重命名,“ For i = 1 To Worksheets.Cou nt ”表示从第1表到最后一个工作表。“ Worksheets(i).Name = mon ths & ”月” & i & ”日表示对工作表逐个命名为“ X月Y日”格式的工作表名称。在第21课时会讲到循环语句。如果在Inputbox中需要更多的提示信息,那么可以使用Chr(10)来分行。例如本例中Inputbox语句可以修改为:months = Inpu
14、tBox(请输入月份,程序将建立该月每日日期命名的工作表& Chr(10) & 例如输入4月,则产生的工作表则为4月1日 4月2日,确定月份, Month(Date)3. 将A1日期按指定样式转换为星期A1存放日期,现需将其转换为星期,程序需要让用户决定转换方式,即提供三个可选项。达成以上需求可以使用代码:Sub将A1日期转换为星期()Dim Week As Byte声明变量提供输入框,让用户选择转换方式。在输入框中可以预览转换后的结果Week = InputBox(请选择转换样式:& Chr(10) & 输入 1: & WorksheetFunction.Text (a1, DDD) & C
15、hr(10) _& 输入 2 : & WorksheetFunction.Text (a1, DDDD) & Chr(10)& 输入 3 : &WorksheetFunction.Text (a1, AAA) & Chr(10) _& 输入 4: & WorksheetFunction.Text (a1, AAAA),选择转换样式,1)根据用户录入的数字对 A1的日期进行转换b1 = WorksheetFunction.Text (a1, Choose(Week, DDD, DDDD, AAA, AAAA)End Sub该过程中利用Inputbox显示一个输入框,在输入框中可以预览转换后的四种
16、日期样式, 只要输入1到4之间的任何数字,程序会对应地转换日期为星期格式。假设A1是2013-3-2,那么输入框外观如下图所示。图5提示用户选择转换样式在该过程中,使用了 Choose函数,它可以根据第一参数的值从后面的参数中选择对应的 值作为Text程序没有使用防错功能,如果输入的值小于1或者大于4将产生错误。第8.2节Inputbox的限制前面展示了 Inputbox函数的功能及其在实际应用中的神奇功效, 但也不代表它没有缺陷。 它不仅有缺陷,而且有较多缺陷。要更好地发挥程序的功能、更好地运用好字符输入框,就有必要了解它到底有哪些限制。整体而言,Inputbox函数主要有以下限制,制约着它
17、无法更好地在VBA中展现其功能:1不能检验用户录入字符的数据类型通常,在VBA中期望终端用户录入什么类型的数据,但有时终端用户基于测试或者其他目的,会故意录入错误的数据,此时程序可能会弹出与实际错误不相符的提示。而作为开发者,有必要防范此事故发生。例如录入表示月份的数值时,要求用户输入1到12的数字,但用户如果故意输入“5月”或者“五”,那么程序会产生错误, 而且对于此类错误,Inputbox并没有内置任何防范措施。2不能产生单元格引用如果用户需要输入单元格地址,在Inputbox对话框中,用户只能手工录入地址。这显然效率不高且容易产生错误。例如在Excel 2010使用兼容模式下却手工输入了
18、“ZZ100 ”之类的错误。而更理想的方式是让用户直接选择区域,程序自动将选区地址返回给对话框。这种问题只能留给 Application对象的Inputbox方法来处理。3字符长度限制对话框中的字符串和用户录入的字符(即第一和第三参数)都限定1024左右,如果是纯汉字则为511个。如果用户的需求超过以上限制,应该考虑使用窗体来体现。第8.3节 Application.lnputBox方法VBA中有一个与Inputbox函数功能类似,却强大很多的语句 Application.1 nputbox 方 法。要注意它是方法,不是函数。Application.1 nputbox方法在功能上与Inputb
19、ox函数基本一致,但却提供了数据类型检测 和直接产生区域引用的功能,大大方便了用户的使用。在工作中尽量使用 Application.lnputbox方法替代Inputbox函数。使用时一定要注意,不对用户录入信息进行验证的是VBA中的Inputbox函数,带验证功能的是 Application.lnputbox 方法。8.3.1 Application.l 叩 utbox语法详解Application.lnputbox方法的基本语法如下:Applicati on .I nputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpCo nte
20、xtID, Type)表2中包括了 Application.lnputbox方法的各参数详解。表2 Application.lnputbox 方法的各参数详解名称必选/可选描述Prompt必选要在对话框中显示的消息。可以为字符串、数字、日期、或布尔值 (在显示之前,Excel自动将其值强制转换为String)Title可选输入框的标题。如果省略该参数,默认标题将为“Input ”:Default可选指定一个初始值,该值在对话框最初显示时岀现在文本框中。如果 省略该参数,文本框将为空。该值可以是Range对象Left可选指定对话框相对于屏幕左上角的X坐标(以磅为单位)Top可选指定对话框相对于屏
21、幕左上角的Y坐标(以磅为单位)HelpFile可选此输入框使用的帮助文件名。如果存在HelpFile和HelpContextID参数,对话框中将岀现一个帮助按钮HelpContext ID可选HelpFile中帮助主题的上下文ID号Type可选指定返回的数据类型。如果省略该参数,对话框将返回文本Application.lnputbox方法有8个参数,其中最重要的是前三个和最后一个。Type参数可以指定一种或者多种数据类型,而Applicatio n.l nputbox方法则会根据类型对用户的录入信息进行检查,如果不符合指定类型则会阻止程序执行。8.3.2案例应用现对Type参数在工作中的应用展
22、示三个案例。1.强制用户录入数值以图6中提示用户录入月份为例,强制用户录入1到12月的数值,否则程序拒绝执行。Application.lnputbox方法完全可以胜任,代码如下:Sub数值校验() months = Application.InputBox( 请指定月份,月份, Month(Date), 10, 10, , , 1) MsgBox monthsEnd Sub其中最后一个参数1表示只能录入数值。当用户执行代码时,如果在对话框中录入非数值“5月”那么程序将提示“无效的数字”,如下图所示:P給1请指定月份曾II必1V月匚确定丨J取消 *Microsoft ExcelI无舶幢E确走1图
23、6录入非数值时的提示2对任意选区进行行列合计假设要对一个区域进行横向、纵向求和,通过Application.lnputBox方法来选择区域会比直接在代码中指定区域灵活得多。案例代码如下:Sub行列自动合计()Dim rng As Range, address As String声明一个对象变量如果当前选择的对象是单元格则将单元格地址赋予变量,否则将空文本赋予变量IF TypeName(Selection) = Range Then address = Selection.address Else address =弹岀一个对话框,让用户选择区域,默认显示变量address的值。然后将该用户选择
24、区域赋予 变量rngSet rng = Application.InputBox(请选择待合计的区域 ,合计区域, address, , , , , 8)IF rng Is Nothing Then Exit Sub先汇总各行的值For i = 1 To rng.Rows.Count从 1 到总行数利用Offset取得汇总数据的放置位置,即选区第一个单元格向右偏移选区的列数合计区域也用Offset逐行偏移来获取,Resize的作用是重置为1行,否则会汇总其他行 的数据rng(1).Offset(i - 1, rng.Columns.Count) = WorksheetFunction.Sum
25、(rng.Offset(i - 1).Resize(1)Next再汇总各列的值For i = 1 To rng.Columns.Count + 1从1到总列数加1,因为需要对行的汇总数再进行汇总rng(1).Offset(rng.Rows.Count, i - 1) = WorksheetFunction.Sum (rng.Offset(, i - 1).Resize(, 1)NextEnd Sub在本过程中Applicati on .1 nputBox语句默认显示的是当前选区地址,可以手动选择区域,从而重新产生地址在输入框中。然后过程根据用户选择的区域进行横向、纵向合计。Applicatio
26、n.lnputbox方法的Type参数使用8,表示返回单元格引用,其数据类型为 Range。图7通过鼠标拖动录入区域地址F图是计算结果:ABCDEG 1数学地址化学政治2计尚云52719390S93753赵国999452知&84114罗垒贵76895280T3S705徐大鹏6531833&43566张志坚929280100964607朱千文6105996277384B赵秀文551006450T93639梁爱国555590fi4523161065S965船9939611陈随机706458588233212690B007567637593768图8计算结果很显然,Applicatio n.l np
27、utBox方法除了检校功能外,自由选择区域的功能相当人性化。3.禾U用 Application.lnputbox 录入公式在单元格中录入公式时,Excel会对公式进行检查,如果不符合公式的基本语法会阻止用 户录入。而 VBA中的Inputbox方法也可以实现同等功能。例如对下图的数据进行排名次:町 Inpu., = H 3ABc1竝容咸绩02LJ453163gi周167吴8郑giq,Shf ki1 IeE图9成绩表 如果使用VBA的对话框来录入公式,那么代码如下:Sub设置计算名次的公式()首先选择待输入公式的单元格c2.Select设置C2的公式,第8参数必须用零,否则单元格中显示值而非公式
28、c2.FormulaLocal = Application.lnputBox(请输入计算名次的公式:,”公式,0)填充公式Range(C2).AutoFill Destination:=Range(C2:C & Cells(Rows.Count, 2).End(xlUp).Row) End Sub该过程中,Application.lnputbox第八个参数使用零,表示在 C2单元格产生公式,如果使 用其他值作为参数则只能产生公式的结果,而非公式本身。利用Application.lnputBox方法录入公式时需要注意四点:(1) 在弹出对话框前必须先定位于目标单元格,否则公式中引用的单元格或者区域会产生 错位,类似于条件格式中的引用;(2) 在对话框中录入公式时,可以利用鼠标单击单元格来产生地址,而且可以通过快捷键 【F4】使其在相对引用、绝对引用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重度残疾儿童个性化教育支持计划
- 企业管理者领导力阅读计划
- 心理健康医院感染监测计划
- 2025年新版小学五年级科学创新项目计划
- 五年级下册科技创新劳动计划
- 部编版三年级语文上册词汇积累计划
- 物流行业中的非关键任务分包与资源计划
- 六年级数学项目化学习计划
- 五六年级科学实验教学计划
- 二年级数学周考安排计划
- 统信服务器UOS操作系统-产品白皮书
- 粮库火灾的防控措施与技术
- 5G-Advanced通感融合仿真评估方法研究报告
- DB33 860-2012 危险化学品重大危险源安全监控管理规范
- 隐蔽工程影像资料采集要求和拍摄方法(网络版)
- DB37T 1913-2011 金属非金属地下矿山特种作业人员配置
- 2025年日历(日程安排-可直接打印)
- 大单元教学学历案4 《现代诗二首》(略读实践课) 统编版语文四年级上册
- 3.1 农业区位因素及其变化-看《种地吧》思考 课件 高一下学期 地理 人教版(2019)必修二
- 《保护板培训教材》课件
- 绿色医疗器械设计
评论
0/150
提交评论