第8章 模块与VBA编程基础.ppt_第1页
第8章 模块与VBA编程基础.ppt_第2页
第8章 模块与VBA编程基础.ppt_第3页
第8章 模块与VBA编程基础.ppt_第4页
第8章 模块与VBA编程基础.ppt_第5页
已阅读5页,还剩75页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第8章 模块与VBA编程基础,8.1 模块的基本概念,模块是Access中一个重要的数据库对象,模块中可包含一个或多个过程,过程是由一系列VBA代码组成的。它包含许多VBA语句和方法,以执行特定的操作或计算数值。模块是装着VBA代码的容器。 模块比宏的功能更强大,运行速度更快,能直接运行Windows的其他程序。使用模块可以建立用户自己的函数,完成复杂的计算、执行宏所不能完成的任务。使用模块可以开发十分复杂的应用程序,使数据库系统功能更加完善。 Access中,模块分为类模块和标准模块两种。,8.1.1 类模块,窗体模块和报表模块都属于类模块,它们从属于各自的窗体或报表。 进入相应模块代码设计

2、区域:一是点工具栏上的代码按钮,二是通过创建事件过程进入相应的代码设计区域。 窗体模块和报表模块都含有事件过程,而过程的运行用于响应窗体或报表的上事件。使用事件过程可以控制窗体或报表的行为以及它们对用户操作的响应。 类模块具有局部特性,其作用范围局限在所属窗体或报表内部,而生命周期则是伴随着窗体或报表的打开而开始、关闭而结束。,8.1.2 标准模块,标准模块一般用于存放供其他Access数据库对象使用的公共过程。 标准模块通常安排一些公共变量或过程供类模块里的过程调用。在标准模块内部也可以定义私有变量和私有过程仅供本模块内部使用 标准模块中的公共变量和公共过程具有全局特性,其作用在整个应用程序

3、里,生命周期是伴随着应用程序的运行而开始、关闭而结束。 创建方法:选择模块对象,然后单击新建按钮 或插入菜单选择模块。,8.1.3 将宏转换为模块,在Access中,根据需要可以将设计好的宏对象转换为模块代码形式。 工具宏将宏转换成VB代码,8.2 创建模块,创建模块就是创建过程 过程是模块的单元组成,由VBA代码编写而成。 过程是一段可以实现某个具体功能的代码 过程分为两类:Sub子过程和Function函数过程。 既可以在类模块中,也可以在标准模块中创建过程。 一个模块包含一个声明区域,且可以包含一个或多个子过程或函数过程。模块的声明区域是用来声明模块使用的变量等项目。,创建方法,一、在模

4、块中加入过程 进入到VBA代码窗口,创建过程 1、Sub过程(子过程)无返回值。 定义格式:Sub 过程名 程序代码 End Sub 过程的调用:Call 过程名 Public Sub swap(x As Integer, y As Integer) Dim t As Integer t = x: x = y: y = t End Sub,2、Function过程(又称函数)有返回值 定义格式:Function 过程名 AS(返回值)类型 程序代码 END Function 调用:直接用函数名调用,函数jc的定义如下: Public Function jc(n As Integer) As L

5、ong 函数的返回值为Long型 Dim i As Integer, s As Long s = 1 For i = 1 To n s = s * i Next i jc = s 给函数赋值 End Function,过程test的定义如下: Public Sub test() Dim n As Integer, k As Long n = InputBox(n=) Debug.Print jc(n) k = jc(3) + jc(5) 调用函数jc Debug.Print 3!+5!=; k End Sub,二、在模块中执行宏,在模块的过程定义中,使用Docmd对象的RunMacro方法可以

6、执行设计好的宏 调用格式: Docmd. RunMacro 宏名,宏的运行次数,数值表达式 宏名加在双引号中,8.3 VBA程序设计基础,VBA是Microsoft Office内置的编程语言,其语法与VB语言兼容。不是一个独立的开发工具,一般被嵌入到像Word、Excel、Access这样的宿主软件中,与其配套使用 VBA采用了面向对象的程序设计方法。,8.3.1 面向对象程序设计的概念,1对象和集合 对象:在采用面向对象程序设计方法的程序中,程序处理的目标被抽象成了一个个对象,每个对象具有各自的属性、方法和事件。一个对象就是一个实体。 对象集合:是由一组对象组成的集合,这些对象的类型可以相

7、同,也可以不同。 Access中除了数据库的7个对象外,还提供一个重要的对象:DoCmd。主要功能是通过调用包含在内部的方法实现VBA编辑中对Access的操作。,属性和方法描述了对象的性质和行为 格式:对象.属性或对象.行为 属性:用来表示对象的状态,如窗体的Name(名称)属性、Caption(标题)属性等。 方法:用来描述对象的行为,如窗体有Refresh方法,Debug对象有Print方法等。 Debug对象:该对象可在调试阶段用Print方法在立即窗口输出信息,2属性和方法,3事件和事件过程,事件:是对象可以识别的动作,通常由系统预先定义(附录E列出了Access数据库对象的事件)

8、事件过程:对象在识别了所发生的事件后执行的程序 例如,下面的事件过程描述了单击按钮之后所发生的一系列动作。 Private Sub Command1_Click() Me!Label1.Caption = 首都经济贸易大学 End Sub,8.3.2 VBA编程环境,在Office中使用的VBA开发界面被称为V B编辑器(VBE,Visual Basic Editor),它具有编辑、调试和编译Visual Basic程序的功能,1、标准工具栏,2、工程窗口 列出了应用程序的所有模块文件。 单击“查看代码”按钮可以打开相应代码窗口 单击“查看对象”按钮可以打开相应对象窗口 单击“切换文件夹”按钮

9、可以隐藏或显示对象分类文件夹。 3、代码窗口 输入和编辑VBA代码 4、属性窗口 列出选对象的各个属性 注意:要想查看对象的属性,应首先打开对象的设计视图 5、立即窗口 用来进行快速的表达式计算、简单方法的操作及进行程序测试的工作窗口。 要在立即窗口打印变量或表达式的值,可使用Debug.Print语句,二、进入VBE编程环境,1、直接定位窗体或报表,单击“视图”下的“代码” 2、通过窗体、报表或控件的事件进入 点击右键选择事件生成器,选择代码生成器 或单击属性窗口的“事件”选项卡,选中某个事件直接单击属性栏右的“” 3、对于标准模块: 已经存在的:双击 要新创建:切换到模块对象,单击工具栏上

10、的新建按钮 选择“工具”“宏”“Visual Basic编辑器”命令,三、VBE环境中编写VBA代码,VBA代码是由语句组成的,一条语句就是一行代码,例如: intCount=3 Debug.Print intcount 在VBA模块中不能存储单独的语句,必须将语句组织起来形成过程,即VBA程序是块结构,它的主体是事件过程或自定义过程 Sub proce1() Dim intcount As Integer intCount=3 Debug.Print intcount End Sub 把过程写入VBE环境中运行即可在立即窗口看到结果,对事件过程的代码编写,只要双击工程窗口中任何类或对象都可以

11、在代码窗口中打开相应代码并进行编辑处理。操作时,在代码窗口左边组合框选定一个对象后,右边过程组合框中会列出该对象的所有事件过程,选择需要的事件过程,系统会自动生成相应的事件过程模板,用户添加代码即可。 在代码窗口内输入代码时,系统会自动显示关键字列表、关键字属性列表及过程参数列表等对象方法提示信息。,四、程序语句书写原则,1、语句书写规则 通常一个语句写在一行,语句较长一行写不下时,可以用续行符(_)将语句连续写在下一行 可以使用冒号将几个语句分隔写在一行中 当输入一行语句并按下回车键后,代码以红色文本显示表明该语句存在错误 2、注释语句 两种方式::Rem 注释语句 注释语句 注释默认以绿色

12、文本显示。 还可以利用“编辑”工具栏中的“设置注释块”按钮和“解除注释块”按钮对大块代码进行注释或解除注释 3、采用缩进格式书写程序 显示出流程中的结构 4、F1帮助信息 光标停留在某个语句命令上按F1,系统会提供相关帮助信息,8.3.3 数据类型和数据库对象,Access数据库系统创建表对象时所涉及的字段数据类型(除了OLE对象和备注数据类型外),在VBA中都有数据类型相对应 一、标准数据类型 表8.2列出了VBA数据类型 1、布尔型数据:两个值True和False。 布尔转换成其他数据True=-1 False=0 其它数据转换成布尔型:非0是True 2、日期型数据:前后必须用#号 3、

13、变体类型数据:除定长字符串类型及用户自定义类型外,包含其他任何类型数据。 一般来说,如果没有显式声明或使用符号来定义变量的数据类型,则默认为变体类型,二、用户自定义的数据类型,利用标准数据类型自己定义需要的数据类型 格式: Type 数据类型名 As As End Type 例:定义一个学生信息数据类型 Type NewStudent txtNo As String*7 txtName As string txtSex As String*1 txtAge As Integer End Type,当需要建立一个变量用来保存包含不同数据类型字段的数据表的一条或多条记录时,用户自定义数据类型就特别

14、有用。 一般用户自定义数据类型使用时,首先要在模块区域中定义用户数据类型,然后显式以Dim,Public或Static关键字来定义此用户类型变量 用户定义类型变量的取值,变量名.分量名 例:Dim NewStud as NewStudent NewStud.txtSno=“980306” NewStud.txtName=“冯伟” NewStud.txtSex=“女” NewStud.txtAge=20 也可以使用With关键字简化一下。 Dim NewStud as NewStudent With NewStud .txtSno=“980306” .txtName=“冯伟” .txtSex=“

15、女” .txtAge=20 End With,三、数据库对象,不详细介绍 8.3.4变量与常量 变量是指程序运行时值会发生变化的数据。程序运行时,变量代表的就是内存中的某块临时存储空间 1、变量的命名规则 (1)以字母或汉字开头,后可跟字母、数字或下划线。 (2)变量名最长为255个字符。 (3)不区分变量名的大小写,不能使用关键字。,一变量的声明,一般,变量在使用前应该先声明。 显式声明: 格式为 Dim 变量名 AS 类型 例如 Dim ab As integer , sum As single 如果省略“AS 类型”,则所定义的变量为Variant型。 VBA允许用户在编写应用程序时,不

16、声明变量而直接使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。 建议在程序中显式声明变量,二、强制声明,在默认情况下,VBA允许在代码中使用未声明的变量,如果在模块设计窗口的顶部“通用-声明”区域中,加入语句: Option Explicit 强制要求所有变量必须定义才能使用。这种方法只为当前模块设置了自动变量声明功能。 如果想为所有模块都启用此功能,“工具”菜单“选项”对话框,选中“要求变量声明”选项即可。,三、变量的作用域(生命周期),1、局部范围:过程内部 Dim、 Static(静态)As 局部变量的作用范围sub End sub之前,这是他的一个生存周期。 2、模

17、块范围:模块内所有过程 Dim 、Static、private(私有)As 3、全局范围:定义在标准模块的所有过程之外,作用范围所有类模块和标准模块的所有子过程与函数过程。 PublicAs,四、数据库对象变量,Access建立的数据库对象及其属性均可被看成是VBA程序代码中的变量及其指定的值来加以引用。引用格式: Forms!窗体名称!控件名称.属性名称或 Reports!报表名称!控件名称.属性名称 如果对象名称中含有空格或标点符号,就要用方括号把名称括起来。 此外还可以用Set关键字来建立控件对象的变量。 例:Dim txtName as control Set txtname= For

18、ms!窗体名称!控件名称.属性名称 txtName=“冯伟”,五、数组,问题:求10个成绩的平均值,并对它们按照从大到小排序,这10个数怎么组织?,如果在程序中要对一组数据进行处理,通常的解决方法是将这组数放在数组中。,放在10个变量中? 放在一个数组中?,数组是一组相同类型的数据的集合,1一维数组的定义,使用数组必须先定义数组,格式为 Dim 数组名(to)As 例如,dim score(1 to 10)as Integer 定义了一个有10个元素的整型数组,所有数组元素具有同一个标识即数组名,数组名后括号内的序号称为数组元素的下标。 (1)所有数组元素在内存连续存放 (2)根据下标区分数组

19、元素,关于数组的定义,还有下面的说明。 (1)定义数组时数组名的命名规则与变量名的命名规则相同。 (2)一般在定义数组时应给出数组的上界和下界。但也可以省略下界,缺省为0。 例如,Dim a(10) As Single 默认情况下,数组a由11个元素组成。 若希望下标从1开始,可在模块的通用声明段使用Option Base语句声明。其使用格式为 Option Base 0|1 后面的参数只能取 0 或 1 (3)和不能使用变量,必须是常量,常量可以是字面常量或符号常量,一般是整型常量。 (4)如果省略As子句,则数组的类型为Varient变体类型。,2二维数组的定义,格式为 Dim 数组名(t

20、o,to)As 例如,Dim c(1 To 3, 1 To 4)As Single,3、动态数组,当预先不知道数组定义需要多少元素时,可以把数组定义为动态数组 定义和使用方法:先用dim显式定义数组但不指明数组元素数目,然后用Redim关键字来决定数组包含的元素数。 例:dim newarray() as long Redim newarray(9,9,9) ,六、变量标识符命名法则,对于控件对象定义变量时,可以用小写字母作为变量名的前缀。例如:文本框用txt,定义一个文本框变量名为txtName 表8.4例出了最常用变量标识符的前缀。 为了易于记忆变量名,七、常量(固定不变的值),1、符号常

21、量 如果程序中多处用到某个常量,将其定义成符号常量可增加代码的可读性,也便于维护。 用关键字Const定义符号常量: Const PI as single=3.1415926 符号常量一般需要大写 在定义符号常量时,如果前面加上Global或Public关键字,这一符号常量会涵盖全局或模块级别范围。,八、系统常量,True False Yes No On Off Null等 单击“视图”菜单选择“对象浏览器”就可以查看Access、VBA等对象库中提供的常量。,8.3.5 常用标准函数,VBA提供了大量的内置函数,这些函数极大地丰富了VBA的功能 了解和使用函数,应从下面三个方面: 函数名 参

22、数(指参数的个数、顺序和类型 ) 函数值(每个函数被调用时都会有一个返回值) 常用函数的使用可以参照附录A学习 下面介绍一些常用函数,一、算术函数(完成数学计算功能),1、绝对值函数:Abs() 返回数值表达式的绝对值。如Abs(-3)=3 2、向下取整函数:Int() 向下取整数的结果,参数为负值时返回小于等于参数值的第一个负数。只取整数部分,不考虑四舍五入 3、取整函数:Fix() 参数为正数时与Int结果一样,参数为负数时返回大于等参数值的第一个负数 例:Int(-3.25)=-4 Fix(-3.25)=-3,4、四舍五入函数: Round(,) 按照指定的小数进行四舍五入。 就是用来指

23、定小数位数的。 例:Round(3.255,1)=3.3 5、开平方函数:Sqr() Sqr(9)=3 6、产生随机数函数:Rnd(),二、字符串函数,1、字符串检索函数: InStr(start,compare) 检索子字符串str2在字符串str1中最早出现的位置,返回一整型数。Start为可选参数,为数值式,设置检索的起始位置。如省略,从第一个字符开始检索。 Compare也为可选参数,指定字符串的比较方法。值可以是1、2和0(缺省)。0做二进制比较,1不区分大小写的文本比较,2基于数据库中包含信息的比较。 例:str1=“98765” str2=“65” S=Instr(str1,st

24、r2)=4 S=Instr(3,”aSsiAB”,”a”,1)=5,2、字符串长度检测函数: Len(或) 返回字符串所含字符数。 注意:定长字符串,其长度是定义时的长度,和字符串实际值无关。 例:dim str as string*10 Dim I Str=“123” i=12 Len1=Len(“12345”)=5 Len2=Len(12) 错误 Len3=Len(i)=2 Len4=Len (“考试中心”)=4 Len5=Len(str) =10,3、字符串截取函数 Left right mid Mid(,N2):从字符串左边第N1个字符起截取N2个字符。缺省N2截取所有字符。 4、生成

25、空格字符函数:Space() 返回数值表达式的值指定的空格字符数 5、大小写转换函数:ucase:小写转换成大写 Lcase:大写转换成小写 6、删除空格函数: LTrim():删除开始的空格 RTrim():删除尾部的空格 Trim():删除开始和尾部的空格,三、日期/时间函数,1、获取系统日期和时间函数 Date() time() Now() 2、截取日期分量函数 Year() Month() Day() Weekday() 3、截取时间分量函数 Hour Minute Second 4、日期/时间增加或减少一个时间间隔 DateAdd(,) 对表达式表示的日期按照间隔类型加上或减去指定的

26、时间间隔值。间隔值正数为加,负数为减 间隔类型参照8.6,5、计算两个日期的间隔值函数 DateDiff(,W1,W2) 返回日期1和日期2之间按照间隔类型所指定的时间间隔数目。 W1可选参数,指定一个星期的第一天是星期几的常数 W2可选参数,指定一年的第一个周的常数(参照表8.7) 6、返回日期指定时间部分函数 DatePart(,W1,W2) 返回日期中按照间隔类型所指定的时间部分值 7、返回包含指定年月日的日期函数 DateSerial(表达式1,表达式2,表达式3) 返回由表达式1值为年,表达式2值为月,表达式3值为日而组成的日期值。 每个参数的取值范围应该是可接受的。当任何一个参数的

27、取值超出可接受范围时,它会适时进位到下一个较大的时间单位。,四、类型转换函数,1、字符串转换字符代码函数:Asc() 返回字符串首字符的ASCII值。 2、字符代码转换成字符函数:Chr() 返回与字符代码相关的字符。 3、数字转换成字符串函数:Str() 将数值表达式转换成字符串。表达式值为正,返回的字符串包含一前导空格表示有一正号 4、字符串转换成数字函数:Val() 将数字字符串转换成数值型数字。注意,数字串转换成自动将字符串中的空格、制表符和换行符去掉,当遇到它不能识别为数字的第一个字符时,停止读入字符串,5、字符串转换日期日期函数: DateValue() 将字符串转换成日期值 例:

28、D=DateValue(“February 29,2004”),返回#2004-2-29# 6、Nz函数:Nz(表达式或字段属性值,规定值 当一个表达式或字段属性值为Null时,函数可返回0、零长度字符串(”)或其他指定的值。 当缺省“规定值”时,如果表达式或字段属性值为数值型且值为Null,Nz函数返回0 如果表达式或字段属性值为字符型且值为Null,Nz函数返回空字符串。,8.3.6 运算符和表达式,一、运算符(算术运算符、关系运算符、逻辑运算符和连接运算符) 1、算术运算符 乘幂()、乘法(*)、除法(/)、整数除法() 求模运算(Mod)、加法、减法。 整数除法():对两个数做除法运算

29、并返回一个整数 如果操作数有小数部分,舍去小数后再运算,如果结果有小数也要舍去 求模运算(Mod):求余数 如果操作数是小数,四舍五入变成整数后再运算;余数的符号跟被除数相同。,2、关系运算符 = = 运算结果为True或False。进行算术运算时,True当成-1False当成0 3、逻辑运算符 And(与) Or(或) Not(非) 运算结果为True或False 4、连接运算符&和+ &:将两个表达式作字符串连接 例:”2+3”&”=”&(2+3) 运算结果为2+3=5 +:将两个表达式均为字符串时,才将两个表达式连接成一个新字符串。 例:”2+3”&”=”+(2+3)出错,二、表达式和

30、优先级(参照表8.9),(1)优先级:算术连接比较逻辑 (2)优先级相同时,按从左到右顺序处理 (3)算术运算和逻辑运算必须按照表8.9所列优先顺序处理. (4)括号的优先级最高.,8.4 VBA流程控制语句,按照语句所执行的功能,VBA的程序语句有赋值语句、声明语句、控制语句、注释语句等。 8.4.1 赋值语句 是最基本的语句。它的功能是给变量或对象的属性赋值。其格式为 或 例如, Rate = 0.1 给变量赋值 Me!Text1.Value = 欢迎使用ACCESS 给控件的属性赋值,“=”为赋值号,表示赋值的动作,不要理解为数学上的等号。,控制语句,控制语句分三种结构是顺序结构、分支结

31、构和循环结构 顺序结构是最简单的一种结构,按照语句的排列顺序依次执行程序中的每一条语句。 分支结构又称选择结构、条件结构,根据条件选择执行路径,需要使用条件语句 循环结构:程序执行时,该语句中的一部分操作即循环体被重复执行多次,需要使用循环语句,程序的顺序控制,例8-1 创建如图8-5所示的窗体“计算圆的面积和周长”。要求在文本框中输入了圆的半径后,单击“计算”按钮,在窗体的另外两个文本框中分别输出圆的面积和周长。,“计算”按钮的Click事件过程如下。 Private Sub cmd计算_Click() 定义变量和符号常量 Dim r As Single r为圆的半径 Dim s As Si

32、ngle s为圆的面积 Dim l As Single l为圆的周长 Const PI As Single = 3.1415926 给变量r赋值 r = txt半径 计算圆的面积和周长 s = PI * r 2 l = 2 * PI * r 用文本框输出结果 txt面积 = s txt周长 = l End Sub,8.4.2条件语句,1、If-Then语句(单分支结构) If Then End If 例8.4 自定义过程Procedure1的功能是:如果当前系统时间超过12点,则在立即 窗口显示“下午好!” Sub Procedure1() If Hour(Time()=12 then Deb

33、ug.print “下午好!” End Sub,2、If-Then-Else(双分支结构),语句结构: If Then Else End If 例8.5 修改过程Procedrue1,新增功能是,如果当前系统时间为12点至18点,则在立即窗口显示“下午好!”,否则显示“欢迎下次光临!” Sub Procedure1() If Hour(Time()=12 and Hour(time()18 then Debug.print “下午好!” Else Debug.Print “欢迎下次光临!” End if End Sub,例:输入两个数并在立即窗口输出其中较大的数 Dim x As Intege

34、r, y As Integer x = InputBox(请输入x的值:) y = InputBox(请输入y的值:) If x y Then Debug.Print x Else Debug.Print y End If,例8-2 用VBA程序实现窗体“系统登录”。,“确定”按钮的Click事件过程 Private Sub cmd确定_Click() Dim name As String, pass As String Dim r As Integer 存放MsgBox消息框的返回值 name = Me!txt用户名 pass = Me!txt口令 If pass = 1234 And na

35、me = cueb Then 如果用户名和口令正确,显示消息框,运行学生管理模块窗体 MsgBox 欢迎进入学生管理模块!, vbOKOnly + vbCritical, 欢迎 DoCmd.Close 关闭系统登录窗体 DoCmd.OpenForm 学生管理模块 打开学生管理模块窗体 Else MsgBox 密码错误!, vbOKOnly显示消息框 Me!txt用户名 = 使文本框清空 Me!txt口令 = Me!txt用户名.SetFocus 使文本框获得焦点,准备重新输入 End If End Sub,3、 If-Then-ElseIf(多分支结构),If Then ElseIf The

36、Else End If 例8.6 定义过程Procedure3功能:如果当前系统时间为8至12点钟之间,在立即窗口显示“上午好!”,系统时间为12点至18点,则显示“下午好!”,其他时间均显示“欢迎下次光临!” Sub Procedure3() If Hour(time()=8 and Hour(time()=12 and Hour(time()18 then Debug.Print “下午好!” Else Debug.Print “欢迎下次光临!” End If End Sub,例8.7试用If-Else语句结构编程实现由X的值计算表达式Y的值,x0 Y= 0 x=0 |x| x0,程序段1

37、: If x0 Then y=Sqr(x) Else If x=0 Then y=0 Else y=Abs(x) End If End If,程序段2: If x0 Then y=Sqr(x) ElseIf x=0 Then y=0 Else y=Abs(x) End If,例 编程根据输入的学生成绩,评定其等级。标准是:90100分为“优秀”,8089分为“良好”,7079分为“中等”,6069分为“及格”,60分以下“不合格”。,Public Sub gc1() Dim x As Integer x = InputBox(请输入成绩:) If x = 90 Then Debug.Print

38、 优秀 ElseIf x = 80 Then Debug.Print 良好 ElseIf x = 70 Then Debug.Print 中等 ElseIf x = 60 Then Debug.Print 及格 Else Debug.Print 不及格 End If End Sub,4、 Select Case-End Select语句,当条件比较多时,用If-End If需要多重嵌套,使用程序变得复杂。用Select Case-End Select语句就可以方便解决 语句格式为 Select Case Case 语句块1 表达式的值与表达式列表1相等时执行 Case 语句块2 表达式的值与表

39、达式列表2相等时执行 Case Else 语句块n+1 上面的情况均不符合时执行 End Select,说明: (1)执行过程是先计算Select Case后的变量或表达式的值,然后从上至下逐个比较,决定执行哪一个语句块。如果有多个Case后的表达式列表与其相匹配,则只执行第一个Case后的语句块。 (2)Select Case后的变量或表达式只能是数值型或字符型表达式。 (3)Case表达式可以是: 单一数值: 5 用逗号分隔的一组枚举表达式: 2, 4, 6, 8 表达式1 To 表达式2 60 to 100 Is 关系运算符表达式 Is 60,例8.8使用Select Case-End

40、Select完成例8.6的功能 Sub Proedure3() Select Case Hour(Time() Case 8 To 11 Debug.Print “上午好!” Case 12 to 17 Debug.Print “下午好!” Case Else Debug.Print “欢迎下次光临!” End Select End Sub,例 编程根据输入的学生成绩,评定其等级。标准是:90100分为“优秀”,8089分为“良好”,7079分为“中等”,6069分为“及格”,60分以下“不合格”。 Dim x As Integer x = InputBox(请输入成绩:) Select Ca

41、se x Case 90 To 100 Debug.Print 优秀 Case 80 To 89 Debug.Print 良好 Case 70 To 79 Debug.Print 中等 Case 60 To 69 Debug.Print 及格 Case Else Debug.Print 不及格 End Select,5、条件函数,VBA中还提供了3个函数来实现条件语句 (1)IIf函数:IIf(条件式,表达式1,表达式2) 例:Max=IIf(ab,a,b) (2)Switch函数:Switch(条件式1,表达式1,条件式2,表达式2,条件式n,表达式n) 例:y=Switch(x0,1,x=

42、0,0,x0,-1) (3)Choose函数:Choose(索引式,选项1,选项2,选项n) 根据索引式的值来返回选项列表中的某个值。索引值为1,返回选项1,索引值为2,返回选项2,以此类推。 注意:只有索引值在界于1到可选择项目数之间,才返回其后的选项值,否则返回无效值Null,8.4.3 循环语句,重复执行一行或几行程序代码。VBA支持以下循环语句结构:For-Next 、Do-Loop和While-Wend 1.For-Next语句 语句格式为 For to Step 条件语句序列 Exit For Next ,说明: (1)循环控制变量的类型必须是数值型。 (2)步长可以是正数,也可以

43、是负数。如果步长为1,Step短语可以省略。 (3)根据初值、终值和步长,可以计算出循环的次数,因此For语句一般用于循环次数已知的情况。 (4)使用Exit For语句可以提前退出循环。 例8.12 分析下列程序段的循环结构 For K=5 to 10 Step 2 K=2*K Next K,例 编程用For语句求1+2+3+10之和 Public Sub gc2() Dim s As Integer, i As Integer s=0 For i = 1 To 10 Step 1 s = s + i Next i Debug.Print s End Sub,例8.14 在立即窗口中显示有星号(*)组成的55的正方形 Sub Procedure5() const MAX=5 Dim Str As String Str=“” For n=1 to MAX Str=Str+”*” Next n For n=1 to MAX Debug.Print Str Next n End Sub,2. Do WhileLoop循环语句,Do While 循环体 条件为真时执行循环体 条件语句序列 Exi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论