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

下载本文档

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

文档简介

第8章 模块与VBA编程基础,8.1 模块的基本概念,模块是Access中一个重要的数据库对象,模块中可包含一个或多个过程。 过程是由一系列VBA代码组成的。它包含许多VBA语句和方法,以执行特定的操作或计算数值。 简而言之,模块是装着VBA代码的容器。 特点: 模块比宏的功能更强大,运行速度更快,能直接运行Windows的其他程序。 使用模块可以建立用户自己的函数,完成复杂的计算、执行宏所不能完成的任务。 使用模块可以开发十分复杂的应用程序,使数据库系统功能更加完善。 Access中,模块分为类模块和标准模块两种。,8.1.1 标准模块,标准模块一般用于存放供其他Access数据库对象使用的公共过程。 标准模块通常安排一些公共变量或过程供类模块里的过程调用。在标准模块内部也可以定义私有变量和私有过程仅供本模块内部使用 特点:标准模块中的公共变量和公共过程具有全局特性,其作用在整个应用程序里,生命周期是伴随着应用程序的运行而开始、关闭而结束。 创建方法:选择模块对象,然后单击新建按钮或插入菜单选择模块。,8.1.2 类模块,类模块是以类的形式封装的模块,是面向对象编程的单位。 类模块按照形式不同分为两大类: 系统对象类模块 用户定义类模块,系统对象类模块,窗体和报表都可以含有自己的事件代码和处理模块,这些模块属于系统对象类模块。进入相应的模块代码设计区域的方法:一单击“代码”按钮;二是单击事件过程。 特点:类模块具有局部特性,其作用范围局限在所属窗体或报表内部,而生命周期则是伴随着窗体或报表的打开而开始、关闭而结束。,用户定义类模块,创建方法: 在模块对象下: 单击”插入”|“类模块”,8.2 创建模块,创建模块就是创建过程 过程是模块的单元组成,由VBA代码编写而成。 过程是一段可以实现某个具体功能的代码 过程分为两类:Sub子过程和Function函数过程。 一、在模块中加入过程: 创建方法: 打开窗体或报表的事件过程进入 选中单击模块对象,单击“新建” 一个模块包含一个声明区域,且可以包含一个或多个子过程或函数过程。模块的声明区域是用来声明模块使用的变量等项目。,1、Sub过程(子过程)无返回值。 定义格式:Sub 过程名 程序代码 End Sub 过程的调用:Call 过程名 Sub jc() Dim str1, str2, str3 str1 = “beijing“ : Rem 给变量str1赋值 str2 = “shanghai“ 给变量str2赋值 str3 = str1 + str2 Debug.Print str3 End Sub,Debug.Print在立即 窗口中显示结果,: Rem Dim定义变量,立即窗口的显示:视图|立即窗口,Public Sub name Private Sub name Public 表示 Sub 过程可被所有 Script 中的所有其他过程访问。 Private 表示 Sub 过程只可被声明该过程的 Script 中的其他过程访问。 Name Sub 的名称,遵循标准变量命名约定。 Integer-数据类型 Integer 字节或者整数 。如果知道变量总是存放整数,则应该将其申明为Interger类型或Long 类型。整数的运算速度快,而且占用的内存少。 Dim (定义变量) 方法为:Dim 变量 As 变量类型,2、Function过程(又称函数)有返回值 定义格式:Function 过程名 AS(返回值)类型 程序代码 END Function 调用:直接用函数名调用,过程test的定义如下: Sub test() Dim n As Integer, k As Long n = InputBox(“n=“) Debug.Print jc(n) k = jc(n) + jc(n+2) 调用函数jc Debug.Print “n!+(n+2)!=“; k End Sub,函数jc的定义如下: Function jc(n As Integer) As Long 函数的返回值为Long型 Dim i As Integer, s As Long s = 1 For i = 1 To n s = s * i Next i jc = s 给函数赋值 End Function,二、在模块中执行宏,在模块的过程定义中,使用Docmd对象的RunMacro方法可以执行设计好的宏 调用格式: Docmd. RunMacro 宏名,宏的运行次数,数值表达式 注意:宏名用双引号引起来,8.3 VBA程序设计基础,VBA是Microsoft Office内置的编程语言,其语法与VB语言兼容。不是一个独立的开发工具,一般被嵌入到像Word、Excel、Access这样的宿主软件中,与其配套使用 VBA采用了面向对象的程序设计方法。,8.3.1、程序语句书写原则,1、语句书写规则 通常一个语句写在一行,语句较长一行写不下时,可以用续行符(_)将语句连续写在下一行 可以使用冒号将几个语句分隔写在一行中 例如模块2 当输入一行语句并按下回车键后,代码以红色文本显示表明该语句存在错误 2、注释语句 两种方式: :Rem 注释语句 注释语句 注释默认以绿色文本显示。 还可以利用“编辑”工具栏中的“设置注释块”按钮和“解除注释块”按钮对大块代码进行注释或解除注释,例题:定义变量,赋值并添加注释 Sub ab() Dim str1, str2 str1 = “shanghai“ : Rem 为变量str1赋值 str2 = “ shi bo hui“ 为变量str2赋值 Debug.Print str1 + str2 End Sub 3、采用缩进格式书写程序 显示出流程中的结构 也可以利用编辑缩进或凸出,8.3.2 面向对象程序设计的概念,1对象和集合 对象:在采用面向对象程序设计方法的程序中,程序处理的目标被抽象成了一个个对象,每个对象具有各自的属性、方法和事件。一个对象就是一个实体。对象的方法就是对象的可以执行的行为,一个对象都有多种方法。 对象集合:Access数据库窗口左侧的7类对象列表形成对象类。7类对象。 集合表示的是某类对象所包含的实例构成 Access中除了数据库的7类个对象外,还提供一个重要的对象:DoCmd。主要功能是通过调用包含在内部的方法实现VBA编辑中对Access的操作。,属性和方法描述了对象的性质和行为 格式:对象.属性或对象.行为 属性:用来表示对象的状态,如窗体的Name(名称)属性、Caption(标题)属性等。 如:Label1.caption 方法:用来描述对象的行为,如窗体有Refresh方法,例如,利用Docmd对象的方法可以打开报表“教师信息”,其格式为: Docmd.OpenReport “教师信息” Debug对象有Print方法等。 Debug对象:该对象可在调试阶段用Print方法在立即窗口输出信息 Debug.print,2属性和方法,3事件和事件过程,事件:是对象可以识别的动作,通常由系统预先定义(附录E列出了Access数据库对象的事件) 事件过程:对象在识别了所发生的事件后执行的程序 例如,下面的事件过程描述了单击按钮之后所发生的一系列动作。 Private Sub Command1_Click() Command1.Caption = “首都经济贸易大学“ End Sub,8.3.3 数据类型和数据库对象,Access数据库系统创建表对象时所涉及的字段数据类型(除了OLE对象和备注数据类型外),在VBA中都有数据类型相对应 一、标准数据类型 定义数据类型时,也可以用符号定义 Dim a as single dim a! 1、布尔型数据:两个值True和False。 True=-1 False=0 2、日期型数据:前后必须用#号,如#2012/11/23 3、变体类型数据:除定长字符串类型及用户自定义类型外,包含其他任何类型数据。 VBA中规定,程序中如果没有显式声明或使用符号来定义变量的数据类型,则默认为变体类型,二、用户自定义的数据类型,在应用过程中利用VBA标准数据类型自己定义需要的多种数据类型 格式: Type 数据类型名 As As End Type 例:定义一个学生信息数据类型 Type NewStudent txtNo As String*7 学号,7位定长字符串 txtName As string 姓名,变长字符串 txtSex As String*1 性别,1位定长字符串 txtAge As Integer 年龄,整型 End Type,当需要建立一个变量用来保存包含不同数据类型字段的数据表的一条或多条记录时,用户自定义数据类型就特别有用。 一般用户自定义数据类型使用时,首先要在模块区域中定义用户数据类型,然后显式以Dim,Public或Static关键字来定义此用户类型变量 用户定义类型变量的取值:变量名.分量名 例:Dim NewStud as NewStudent NewStud.txtno=“980306” NewStud.txtName=“冯伟” NewStud.txtSex=“女” NewStud.txtAge=20 也可以使用With关键字简化一下程序中的重复部分。 Dim NewStud as NewStudent With NewStud .txtno=“980306” .txtName=“冯伟” .txtSex=“女” .txtAge=20 End With,三、数据库对象(略),8.3.4变量与常量 变量是指程序运行时值会发生变化的数据。程序运 行时,变量代表的就是内存中的某块临时存储空间 1、变量的命名规则 (1)以字母或汉字开头,后可跟字母、数字或下划线。 (2)变量名最长为255个字符。 (3)不区分变量名的大小写 (4)不能包含空格 2、常量是指在程序中可以直接引用的实际值,其值在程序运行中不变。VBA中有三种常量:直接常量、符号常量、系统常量。,一变量的声明,变量声明就是定义变量名称及类型,使系统为变量 分配存储空间。一般,变量在使用前应该先声明。 VBA声明变量有两种方法:显式声明 隐含声明 显式声明: 格式为 Dim 变量名 AS 数据类型(或者字符) 例如 Dim ab As integer , sum As single 或 Dim ab%, sum! 隐含声明 没有直接定义而通过一个值指定给变量名,或dim定义 中省略了AS 数据类型,或在变量名称后没有附加类型说 明字符来指明隐含变量的数据类型时,默认为Variant 数据类型。 例如:Dim m,n m,n为变体变量 ab=123 ab为变体变量,值是123 建议在程序中显式声明变量,二、强制声明,在默认情况下,VBA允许在代码中使用未声明的变量,如果在模块设计窗口的顶部“通用-声明”区域中,加入语句: Option Explicit 强制要求所有变量必须定义才能使用。这种方法 只为当前模块设置了自动变量声明功能。 如果想为所有模块都启用此功能,“工具”菜单“选项”对话框,在“编辑器”选项卡中选中“要求变量声明”选项即可。,三、变量的作用域,VBA编程中,变量定义的位置和方式不同,则它存在的时间和起作用的范围也有所不同。这就是变量的生命周期和作用域。VBA中变量的作用域有3个层次: 1、局部范围:变量定义在模块的过程内部 在子过程或函数内部使用Dim、 Static(静态)As关键字说明的变量就是局部范围的。 2、模块范围:变量定义在模块的所有过程之外的起始位置 在模块的通用说明区,用Dim 、Static、private(私有)As关键自定义的变量作用域都是模块范围。 3、全局范围:定义在标准模块的所有过程之外的起始位置,作用范围所有类模块和标准模块的所有子过程与函数过程。 在标准模块的变量定义区域,用PublicAs关键字说明,四、数据库对象变量,Access建立的数据库对象及其属性均可被看成是 VBA程序代码中的变量及其指定的值来加以引用。 引用格式: Forms!窗体名称!控件名称.属性名称或 Reports!报表名称!控件名称.属性名称 如果对象名称中含有空格或标点符号,就要用方括号把名称括起来。 例如:forms!系统登录!用户名=“cueb” forms!系统登录!用 户名=“cueb” 此外还可以用Set关键字来建立控件对象的变量。当需要多次引用对象时,这种方法很方便。 例如: Dim txtName as control 定义控件类型变量 Set txtname= Forms!窗体名称!控件名称.属性名称 txtName=“冯伟”,五、数组,问题:求10个成绩的平均值,并对它们按照从大到小排序,这10个数怎么组织?,如果在程序中要对一组数据进行处理,通常的解决方法是将这组数放在数组中。,放在10个变量中? 放在一个数组中?,数组是一组相同数据类型的数据的集合,1一维数组的定义,使用数组必须先定义数组,格式为 Dim 数组名(to)As 例如,dim score(1 to 10)as Integer 定义了一个有10个元素的整型数组,所有数组元素具有同一个标识即数组名,数组名后括号内的序号称为数组元素的下标。 (1)所有数组元素在内存连续存放 (2)根据下标区分数组元素,关于数组的定义,还有下面的说明。 (1)定义数组时数组名的命名规则与变量名的命名规则相同 (2)一般在定义数组时应给出数组下标的上限和下限。但也可以省略下限,缺省为0。 例如,Dim a(10) As Single 默认情况下,数组a由11个元素组成。 若希望下标从1开始,可在模块的通用声明段使用Option Base语句声明。其使用格式为 Option Base 1 (3)和不能使用变量,必须是常量,常量可以是字面常量或符号常量,一般是整型常量。 (4)如果省略As子句,则数组的类型为Varient变体类型。,2二维数组的定义,格式为 Dim 数组名(to,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例出了最常用变量标识符的前缀。 为了易于记忆变量名 p212,七、符号常量(固定不变的值),如果程序中多处用到某个常量,将其定义成符号常量可增加代码的可读性,也便于维护。 用关键字Const定义符号常量: 格式:Const 符号常量名称=常量值 Const PI =3.1415926 符号常量一般需要大写,以便与变量区分 在定义符号常量时,如果前面加上Global或Public 关键字,这一符号常量会涵盖全局或模块级别范围。 例如:Global Const PI=3.1415926,八、系统常量,True False Yes No On Off Null等 单击“视图”菜单选择“对象浏览器”就可以查看Access、VBA等对象库中提供的常量。,8.3.5 常用标准函数,VBA提供了大量的内置函数,这些函数极大地丰富了VBA的功能 了解和使用函数,应从下面三个方面: 函数名 参数(指参数的个数、顺序和类型 ) 函数值(每个函数被调用时都会有一个返回值) 常用函数的使用可以参照附录A学习 下面介绍一些常用函数,一、算术函数(完成数学计算功能),1、绝对值函数:Abs() 返回数值表达式的绝对值。如Abs(-3)=3 2、向下取整函数:Int() 向下取整数的结果,参数为负值时返回小于等于参数值的第一个负数。只取整数部分,不考虑四舍五入 3、取整函数:Fix() 参数为正数时与Int结果一样,参数为负数时返回大于等参数值的第一个负数 例:Int(-3.25)=-4 Fix(-3.25)=-3,4、四舍五入函数: Round(,) 按照指定的小数进行四舍五入。 就是用来指定小数位数的。 例:Round(3.255,1)=3.3 5、开平方函数:Sqr() Sqr(9)=3 6、产生随机数函数:Rnd() 数值表达式: 小于0,每次产生相同的随机数 大于0,每次产生新的随机数 等于0,产生最近生成的随机数 省略参数,默认为大于0,二、字符串函数,1、字符串检索函数: InStr(start,compare) 检索子字符串str2在字符串str1中最早出现的位置,返回一整型数。Start为可选参数,为数值式,设置检索的起始位置。如省略,从第一个字符开始检索。 Compare也为可选参数,指定字符串的比较方法。值可以是1、2和0(缺省)。0做二进制比较,1不区分大小写的文本比较,2基于数据库中包含信息的比较。 例:str1=“98765” str2=“65” S=Instr(str1,str2)=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、生成空格字符函数:Space() 返回数值表达式的值指定的空格字符数 5、大小写转换函数:ucase:小写转换成大写 Lcase:大写转换成小写 6、删除空格函数: LTrim():删除开始的空格 RTrim():删除尾部的空格 Trim():删除开始和尾部的空格,三、日期/时间函数,1、获取系统日期和时间函数 Date() time() Now() 2、截取日期分量函数 Year() Month() Day() Weekday() 3、截取时间分量函数 Hour() Minute() Second() 4、日期/时间增加或减少一个时间间隔 DateAdd(,) 对表达式表示的日期按照间隔类型加上或减去指定的时间间隔值。间隔值正数为加,负数为减 间隔类型参照8.6,5、计算两个日期的间隔值函数 DateDiff(,W1,W2) 返回日期1和日期2之间按照间隔类型所指定的时间间隔数目。 W1可选参数,指定一个星期的第一天是星期几的常数 W2可选参数,指定一年的第一个周的常数(参照表8.7) 6、返回日期指定时间部分函数 DatePart(,W1,W2) 返回日期中按照间隔类型所指定的时间部分值 7、返回包含指定年月日的日期函数 DateSerial(表达式1,表达式2,表达式3) 返回由表达式1值为年,表达式2值为月,表达式3值为日而组成的日期值。 每个参数的取值范围应该是可接受的。当任何一个参数的取值超出可接受范围时,它会适时进位到下一个较大的时间单位。,四、类型转换函数,1、字符串转换字符代码函数:Asc() 返回字符串首字符的ASCII值。 2、字符代码转换成字符函数:Chr() 返回与字符代码相关的字符。 3、数字转换成字符串函数:Str() 将数值表达式转换成字符串。表达式值为正,返回的字符串包含一前导空格表示有一正号 4、字符串转换成数字函数:Val() 将数字字符串转换成数值型数字。注意,数字串转换成自动将字符串中的空格、制表符和换行符去掉,当遇到它不能识别为数字的第一个字符时,停止读入字符串,5、字符串转换日期日期函数: DateValue() 将字符串转换成日期值 例:D=DateValue(“February 29,2004”),返回#2004-2-29# 6、Nz函数:Nz(表达式或字段属性值,规定值 当一个表达式或字段属性值为Null时,函数可返回0、零长度字符串(”)或其他指定的值。 当缺省“规定值”时,如果表达式或字段属性值为数值型且值为Null,Nz函数返回0 如果表达式或字段属性值为字符型且值为Null,Nz函数返回空字符串。,8.3.6 运算符和表达式,一、运算符(算术运算符、关系运算符、逻辑运算符和连接运算符) 1、算术运算符 乘幂()、乘法(*)、除法(/)、整数除法() 求模运算(Mod)、加法、减法。 整数除法():对两个数做除法运算并返回一个整数 如果操作数有小数部分,舍去小数后再运算,如果结果有小数也要舍去 求模运算(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)出错 二、表达式和优先级(参照表8.9)p220,一个语句就是能够完成某项操作的一条命令。VBA程序就是有大量语句构成的。 按照语句所执行的功能,VBA的程序语句有赋值语句、声明语句、控制语句、注释语句等。 控制语句分三种结构是顺序结构、分支结构和循环结构 顺序结构是最简单的一种结构,按照语句的排列顺序依次执行程序中的每一条语句。 分支结构又称选择结构,根据条件选择执行路径,需要使用条件语句 循环结构:程序执行时,该语句中的一部分操作即循环体被重复执行多次,需要使用循环语句,8.4 VBA流程控制语句,8.4 VBA流程控制语句,8.4.1 赋值语句 是最基本的语句。它的功能是给变量或对象的属性赋值。其格式为 例如, Ra = 0.1 给变量赋值 Text1.Value = “欢迎使用ACCESS “给控件的属性赋值,“=”为赋值号,表示赋值的动作,不要理解为数学上的等号。,程序的顺序结构,例8-1 创建如图8-5所示的窗体“计算圆的面积和周长”。要求在文本框中输入了圆的半径后,单击“计算”按钮,在窗体的另外两个文本框中分别输出圆的面积和周长。,“计算”按钮的Click事件过程如下。 Private Sub command0_Click() 定义变量和符号常量 Dim r As Single r为圆的半径 Dim s As Single s为圆的面积 Dim l As Single l为圆的周长 Const PI = 3.1415926 给变量r赋值 r = text0 计算圆的面积和周长 s = PI * r 2 l = 2 * PI * r 用文本框输出结果 text2 = s text4 = l End Sub,语句块,语句块,8.4.2条件语句,1、If-Then语句(单分支结构)流程图见P222 If Then End If 或者If Then 例8.4 自定义过程Procedure1的功能是:如果当前系统时间超过12点,则在立即 窗口显示“下午好!” Sub Pro1() If Hour(Time()=12 then Debug.print “下午好!” End Sub,2、If-Then-Else(双分支结构),语句结构: 流程图见P222 If Then Else End If 例8.5 修改过程Pro1,新增功能是,如果当前系统时间为12点至18点,则在立即窗口显示“下午好!”,否则显示“欢迎下次光临!” Sub Pro1() If Hour(Time() = 12 And Hour(Time() 18 Then Debug.Print “下午好!“ Else Debug.Print “欢迎下次光临!“ End If End Sub,例8-5-2:输入两个整数并在立即窗口输出其中较大的数 Dim x ,yAs Integer x = InputBox(“请输入x的值:“) y = InputBox(“请输入y的值:“) If x y Then Debug.Print x Else Debug.Print y End If,例8.6试用If-Else语句结构编程实现由X的值计算表达式Y的值,x0 Y= 0 x=0 |x| x0,程序段1: 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,例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 name = “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 Then ElseIF Then Else End If 流程图见P223,例8.7 定义过程Pro3 功能:如果当前系统时间为8至12点钟之间,在立即窗口显示“上午好!”,系统时间为12点至18点,则显示“下午好!”,其他时间均显示“欢迎下次光临!” Sub Pro3() If Hour(time()=8 and Hour(time()=12 and Hour(time()18 then Debug.Print “下午好!” Else Debug.Print “欢迎下次光临!” End If End Sub,例8-7-2 编程根据输入的学生成绩,评定其等级。标准是:90100分为“优秀”,8089分为“良好”,7079分为“中等”,6069分为“及格”,60分以下“不合格”。,Public Sub gc1() Dim x As Integer x = InputBox(“请输入成绩:“) If x = 90 and x= 80 and x= 70 and x= 60 and x70 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 表达式的值与表达式列表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 Select完成定义过程Pro3 功能:如果当前系统时间为8至12点钟之间,在立即窗口显示“上午好!”,系统时间为12点至18点,则显示“下午好!”,其他时间均显示“欢迎下次光临!” Sub Proe3() 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 Case 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=0,0,x0,-1) (3)Choose函数:Choose(索引式,选项1,选项2,选项n) 根据索引式的值来返回选项列表中的某个值。索引值为1,返回选项1,索引值为2,返回选项2,以此类推。 注意:只有索引值在界于1到可选择项目数之间,才返回其后的选项值,否则返回无效值Null,知识回顾,程序流程控制结构: 顺序结构 分支结构 循环结构 分支结构: 单分支结构 双分支结构 多分支结构,单分支结构,If-Then语句 If Then End If,双分支结构,If-Then-Else 语句结构: If Then Else End If,多分支结构,1、If-Then-ElseIf 语句结构: If Then ElseIf Then Else End If,2、Select Case-End Select 语句格式为 Select Case Case 语句块1 表达式的值与表达式列表1相等时执行 Case 语句块2 表达式的值与表达式列表2相等时执行 Case Else 语句块n+1 上面的情况均不符合时执行 End Select,标准模块的编译顺序,Sub 过程名() Dim 变量名 as 数据类型 可省略 为变量赋值 可省略 输入流程控制结构 Debug.print 变量名 可省略 End sub,Access对象中的事件过程模块,右击控件,选择属性|事件 选择一种事件的事件过程 清楚sub-end sub 中的语句 输入新的语句,习题: 创建一个窗体,此窗体包括3个文本框和一个命令按钮,要求此窗体实现下列功能: 其中两个文本框可以输入数据 单击命令按钮时,在第三个文本框中显示前两个文本框中较大的值,8.4.3 循环语句,重复执行一行或几行程序代码。VBA支持以下循环语句结构:For-Next 、Do While-Loop和While-Wend 1.For-Next语句 语句格式为 For to Step 条件语句序列 Exit For Next ,说明: (1)循环控制变量的类型必须是数值型。 (2)步长可以是正数,也可以是负数。如果步长为1,Step短语可以省略。如果步长值为0,该循环执行无数次,造成“死循环” (3)根据初值、终值和步长,可以计算出循环的次数,循环次数=(终值-初值+1)/步长 因此For语句一般用于循环次数已知的情况。 (4)使用Exit For语句可以提前退出循环。 例8.12 分析下列程序段的循环结构 For K=5 to 10 Step 2 K=2*K Next K,例8.13 编程用For语句求1-100之间奇数的和 Public Sub gc2() Dim s, i As Integer s=0 For i = 1 To 100 Step 2 s = s + i Next i Debug.Print s End Sub,例8.14 在立即窗口中显示有星号(*)组成的55的正方形 Sub Pro5() Dim Str As String For n = 1 To 5 Step 1 Str = Str + “ * “ Next n For n = 1 To 5 Step 1 Debug.Print Str Next n End Sub,另一种编译方法: Sub Pro5() 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 循环体 条件为真时执行循环体 条件语句序列 Exit Do 结束条件语句序列 Loop,例题8.15 用Do WhileLoop语句 求1+2+3+100之和,Dim s, i As Integer s =

温馨提示

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

评论

0/150

提交评论