收藏 分享(赏)

第8章 模块与VBA编程基础.ppt

上传人:hwpkd79526 文档编号:10069279 上传时间:2019-10-04 格式:PPT 页数:80 大小:310KB
下载 相关 举报
第8章  模块与VBA编程基础.ppt_第1页
第1页 / 共80页
第8章  模块与VBA编程基础.ppt_第2页
第2页 / 共80页
第8章  模块与VBA编程基础.ppt_第3页
第3页 / 共80页
第8章  模块与VBA编程基础.ppt_第4页
第4页 / 共80页
第8章  模块与VBA编程基础.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

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 Integert = x: x = y: y = t End Sub,2、Function过程(又称函数)有返回值 定义格式:Function 过程名 AS(返回值)类型程序代码END Function 调用:直接用函数名调用,函数jc的定义如下: Public Function jc(n As Integer) As Long 函数

5、的返回值为Long型Dim i As Integer, s As Longs = 1For i = 1 To ns = s * iNext ijc = s 给函数赋值 End Function,过程test的定义如下: Public Sub test()Dim n As Integer, k As Longn = InputBox(“n=“)Debug.Print jc(n)k = jc(3) + jc(5) 调用函数jcDebug.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对象和集合 对象:在采用面向对象程序设计方法的程序中,程序处理的目标被抽象成了一个个对象,每个对象具有各自的属性、方法和事件。一个对象就是一个实体。 对象集合:是由一组对象组成的集合,这些对象的类型可以相同,也可以不同。 Acce

7、ss中除了数据库的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 NewStudentNewStud.txtSno=“980306”NewStud.txtName=“冯伟”NewStud.txtSex=“女”NewStud.txtAge=20 也可以使用With关键字简化一下。 Dim NewStud as NewStudent With NewStud.txtSno=“980306”.txtName=“冯伟”.txtSex=“女”.txtAge=20 End With

15、,三、数据库对象,不详细介绍 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、模块范围:模块内所有过程 Dim 、Stati

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

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

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

20、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(,) 按照指定的小数进行四舍五入。 就是用来指定小数位数的。 例:Round(3.255,1)

23、=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,str2)=4 S=Instr(3,”aSsiAB”

24、,”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() 返回数值表达式的值

25、指定的空格字符数 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() 将字符串转换成日期值 例:D=DateValue(“February 29,

28、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)出错,二、表达式和优先级(参照表8.9),(1)优先级:算术连接比较

30、逻辑 (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 Single s为圆的面积 Dim l As Si

32、ngle 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 ThenEnd If 例8.4 自定义过程Procedure1的功能是:如果当前系统时间超过12点,则在立即 窗口显示“下午好!” Sub Procedure1() If Hour(Time()=12 thenDebug.print “下午好!” End Sub,2

33、、If-Then-Else(双分支结构),语句结构: If ThenElseEnd 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 Integer, y As Integer x = InputBo

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

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

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

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

38、“良好“ElseIf x = 70 ThenDebug.Print “中等“ElseIf x = 60 ThenDebug.Print “及格“ElseDebug.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 上面的情况均不符合

39、时执行 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完成例8.6的功能 Sub Proedure3()Select

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

41、o 89Debug.Print “良好“Case 70 To 79Debug.Print “中等“Case 60 To 69Debug.Print “及格“Case ElseDebug.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,选

42、项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)步长可以是正数,也可以是负数。如果步长为1,Step短语可以省略。 (3)根据初值、终值和步长,可以计算出循环

43、的次数,因此For语句一般用于循环次数已知的情况。 (4)使用Exit For语句可以提前退出循环。 例8.12 分析下列程序段的循环结构 For K=5 to 10 Step 2K=2*K Next K,例 编程用For语句求1+2+3+10之和 Public Sub gc2()Dim s As Integer, i As Integers=0For i = 1 To 10 Step 1s = s + iNext iDebug.Print s End Sub,例8.14 在立即窗口中显示有星号(*)组成的55的正方形 Sub Procedure5()const MAX=5Dim Str As

44、 StringStr=“”For n=1 to MAXStr=Str+”*”Next nFor n=1 to MAXDebug.Print StrNext n End Sub,2. Do WhileLoop循环语句,Do While 循环体 条件为真时执行循环体条件语句序列 Exit Do结束条件语句序列 Loop 用Do WhileLoop语句求1+2+3+10之和。 Dim s As Integer, i As Integer s = 0: i = 1 Do While i = 10s = s + ii = i + 1 Loop Debug.Print s,例8.16 已知斐波那契序列的定

45、义如下: F(0)=0,f(1)=1f(n)=f(n-1)+f(n-2) 当n=2时 编写程序,在立即窗口显示n为2到10时对应的序列值Sub Procedure6()n=1f1=0f2=1 Do while n10f=f1+f2debug.print ff1=f2f2=fn=n+1 Loop End sub,3.Do UntilLoop语句,条件为假时执行循环体,条件为真时结束循环 Do Until 循环体条件语句序列 Exit Do结束条件语句序列 Loop 用Do UntilLoop语句求1+2+3+10之和。 Dim s As Integer, i As Integer s = 0:

46、i = 1 Do until i10s = s + ii = i + 1 Loop Debug.Print s,4.DoLoop While语句,Do 循环体条件语句序列 Exit Do结束条件语句序列 Loop While 先执行循环体,再判断条件 问题: 下面的程序执行结果是什么?控制循环执行的判断被执行了几次? Dim s As Integer, i As Integer s = 0: i = 1 Dos = s + ii = i + 1 Loop While i = 10 Debug.Print s,5.DoLoop Until语句,Do 循环体条件语句序列 Exit Do结束条件语句

47、序列 Loop Until ,8.4.4 GoTo语句,无条件转移语句 goto 标号; 标号必须是首先在程序中定义好,否则无法实现 Dim i,sum as Integeri=1sum=0 loop: if(i=100)sum=sum+ii=i+1goto loop,8.5 过程调用和参数传递,8.5.1 过程调用 1、子过程的定义和调用 格式: public|Privatestaticsub 过程名(形参)exit sub End sub Public:使过程适用于所有模块中的所有其他过程 Private:使该子过程只适用于同一模块中的其他过程 Static:只要模块是打开的,运行时变量值

48、都将被保留。(举例),子过程的调用,Call 子过程名()或子过程名 例8.18 下面编写一个打开指定窗体的子过程openforms() Sub openforms(strformname as string) If strformname=“” then Msgbox “打开窗体名称不能为空!”,vbcritical,”警告” End if Docmd.openform strformname End sub 调用过程: Call openforms(“学生管理”)或openforms”学生管理”,2、函数过程的定义和调用,Public|PrivateStatic Function 函数过程名()as 数据类型函数过程名=Exit Function函数过程语句= End Function 调用过程:函数过程名(),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报