模块和VBA程序设计.ppt_第1页
模块和VBA程序设计.ppt_第2页
模块和VBA程序设计.ppt_第3页
模块和VBA程序设计.ppt_第4页
模块和VBA程序设计.ppt_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

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

文档简介

1,1,第8章 模块和VBA程序设计,2,本章要求: 1、了解VBA编程环境; 2、掌握VBA编程基础:常量,变量,表达式; 3、掌握顺序控制,选择控制,循环控制 4、了解VBA模块 本章要点: 掌握顺序控制,选择控制,循环控制 学时安排: 6学时(理论)+6学时(实践),第8章 模块和VBA程序设计,3,第8章 模块和VBA程序设计, VBA程序设计基础, 模块的概念, 常用标准函数, VBA的程序结构, VBA的数据库编程, 过程调用和参数传递,4,在Access系统中,把宏、窗体和报表等对象结合起来,不用编写程序代码就可以建立功能较完善的数据库管理系统。但宏的功能是有局限性的,它只能处理一些简单的操作,如果要实现功能强大的数据管理,以及灵活的控制功能,宏对象就无能为力了。这时,就需要编写程序模块来实现上述的功能。本章介绍模块的概念和用来建立模块的VBA语言的基础知识。,第8章 模块和VBA程序设计,5,8.1 模块的概念,模块对象是Access系统中所包含的7种对象之一,模块和宏的使用有一些相似之处。宏是由系统自动生成的程序模块,而模块对象是用VBA语言编写的,VBA是Office软件中内置的编程语言,语法与Visual Basic兼容。 1.模块的分类 在Access中,模块分为类模块和标准模块两种类型。 (1)类模块 类模块包括窗体模块和报表模块,它们与各自的 窗体 或报表相关联。 窗体模块中的事件过程的代码用于响应窗体或窗体 上控件的触发事件。报表模块中的事件过程的代码用于 响应报表或报表上控件的触发事件。,6,8.1 模块的概念,在窗体或报表的设计视图中,可以使用下面方法打开模块代码的编辑窗口: 工具栏上的“代码”按钮。 为窗体或报表创建事件过程时,系统会自动打开模块代码编辑窗口。,窗体模块和报表模块的作用范围在其所属窗体或报表内部,并随着窗体或报表的打开而开始,随着窗体或报表的关闭而结束。 类模块也可以不依赖窗体或报表而单独存在,7,8.1 模块的概念,(2)标准模块 标准模块包含与任何其他对象都无关的常规过程,以及可以从数据库任何位置运行的经常使用的过程。标准模块和某个特定对象无关的类模块的主要区别在于其范围和生命周期。 标准模块显示在数据库窗口的“模块”对象中,窗体、报表和标准模块也都显示在“对象浏览器”对话框中。“对象浏览器”对话框用于显示与当前项目有关和引用对象库中对象、属性、方法和常数的信息。,8,模块由声明区域和过程两部分组成,声明区域用来声明模块使用的变量,过程是模块的组成单元。过程分为两种类型:子过程(Sub)和函数过程(Function)。 (1)子过程 子过程又称为Sub过程,可以执行一系列操作,无返回值。定义格式如下: Sub 过程名 程序代码 End Sub 可以引用子过程的名称来调用该子过程。在过程名前加上关键字Call,可以显式调用一个子过程。,8.1 模块的概念,2模块的组成,9,例:简单的计算,8.1 模块的概念,任意两个数的和,两个3的和,两个1的和并且能调用show2,10,例:通过窗体事件也可调用子过程,8.1 模块的概念,11,例8-1:下面是一个简单的验证密码的Sub过程。 Sub CheckPwd( ) Dim Pwd As String Pwd=InputBox(“请输入密码!”) If Pwd=”123456” Then MsgBox ”密码正确,欢迎进入系统!” Else MsgBox ”密码错误!” End if End Sub,8.1 模块的概念,12,(2)函数过程 函数过程又称为Funtion过程,可以执行一系列操作,有返回值。定义格式如下: Function 过程名 程序代码 End Function 调用函数过程时,需要直接引用函数过程的名称,而不能使用Call来调用执行。,8.1 模块的概念,2模块的组成,13,例8-2:下面是编写求圆面积的函数过程。 Function area(r As Single) As Single If r = 0 Then MsgBox “圆半径必须是正数!“ End If area = 3.14159 * r * r End Function,8.1 模块的概念,调用过程:,14,例:通过窗体事件也可调用函数,15,3将宏转换为模块,8.1 模块的概念,根据要转换宏的类型不同,转换操作有两种情况,一种是转换窗体或报表中的宏,另一种是转换不属于任何窗体和报表的全局宏。 (1)转换窗体或报表中的宏 在设计视图中打开窗体。 执行“工具/宏/将窗体的宏转换为Visual Basic代码”命令,屏幕显示“转换窗体宏”对话框。,16,将全局宏转换为模块的具体步骤说明如下: 在数据库窗口中,单击“宏”对象,选择要转换的宏。 执行“文件”菜单中的“另存为”命令,打开“另存为”对话框,(2)转换全局宏,8.1 模块的概念, 在对话框的“保存类型”下拉列表框中,选择“模块”列表项,然后单击“确定”按钮,屏幕显示“转换宏”对话 框。,3将宏转换为模块,17,VBA是Visual Basic for Application的缩写,是 微软Office系列软件的内置编程语言,与Visual Basic具有相同的语言功能。 在VBA中,程序是由过程组成的,过程由根据VBA规则书写的指令组成。一个程序包括语句、变量、运算符、函数、数据库对象、事件等基本要素。 在Access程序设计中,当某些操作不能用其他Access对象实现或实现起来很困难时,就可以利用VBA语言编写代码,完成这些复杂任务。,8.2 VBA程序设计基础,18,8.2.1 面向对象程序设计的基本概念 Access内嵌的VBA编程语言,采用的是目前主流的面向对象编程机制和可视化编程环境,同时也提供了访问数据库和操作数据表中记录的基本方法。,8.2 VBA程序设计基础,1对象和类,Access中的表、查询、窗体、报表、页、宏和模块等都是数据库的对象,而控件是窗体或报表中的对象。每个不同的对象都通过不同的属性相互区分。对象的属性按其类别会有所不同,而且同一对象的不同实例属性构成也可能有差异。,19,具有相同属性和方法的对象就组成了类,工具箱中的每个控件就是一个类,而在窗体或报表中创建的具体控件则是这个类的对象。而属于同一个类的两个对象是通过属性值来区分的 。,8.2 VBA程序设计基础,1对象和类,Access中的表、查询、窗体、报表、页、宏和模块对象也是类,称为对象类。Access数据库窗口左侧显示的就是数据库的对象类,单击某个对象类可以打开相应对象窗口。,对象除了属性以外还有方法。对象的方法就是对象可以执行的行为。,20,属性、方法和事件构成了对象的基本要素。 属性描述了对象的性质 例如,文本框控件对象中的名称、字体的相关属性等。 引用方式为:对象.属性 例如:Label6.Caption = area(x),8.2 VBA程序设计基础,2属性、方法和事件,方法描述了对象的行为,即在某个对象上执行的一个过程, 例如, 打开和关闭报表对象。 引用方式为:对象.方法 例如: Text1.SetFocus,事件是由Access定义好的,可以被窗体、报表以及窗体或报表上的控件等对象所识别的动作 。 如单击,失去焦点.,事件,方法,属性,21, 使用宏对象来设置事件属性。 为某个事件编写VBA代码过程,完成指定动作,这种代码过程称为事件过程或事件响应代码。 (对象事件,参考书P199-200),8.2 VBA程序设计基础,在Access数据库系统里,可以通过以下两种方式来处理窗体、报表或控件的事件响应。,22,8.2.2 VBE编程环境 VBE是Visual Basic Editor的缩写,是Access提供的一个编程环境。 VBE窗口主要由标准工具栏、工程窗口、属性窗口和代码窗口4部分组成.,8.2 VBA程序设计基础,23,8.2 VBA程序设计基础,24,8.2 VBA程序设计基础,编程步骤: 1创建用户界面 创建VBA程序的第一步是创建用户界面,用户界面的基础是窗体以及窗体上的控件。 2设置对象属性 属性的设置可以通过两种方法实现。一是在窗体设计视图中,通过对象的属性表设置;二是通过程序代码设置。 3对象事件过程的编写 建了用户界面并为每个对象设置了属性后,重点考虑的就是需要操作哪个对象,激活什么事件,事件代码如何编写。 4运行和调试 事件过程编写好后,即可运行程序。若在程序运行过程中出错,系统会显示出错信息,这时应针对出错处对事件代码进行修改,然后再运行,直到正确为止。 5保存窗体,25,8.2.3 VBA的基本数据类型 VBA支持多种数据类型,可以使用“类型说明标点符号“来定义数据类型,还可以使用“类型说明字符“来定义数据类型.,8.2 VBA程序设计基础,1数据类型,26,(2). 长整形 Long 类型申明符为“&”,(1) 整型 integer 类型申明符为“%”,表示范围:- 32768 + 32767 例:8% -21 +5% 5,(3). 单精度数 Single 类型申明符为“! ( E )”,最多有7位有效数字, 表示范围:- 3.402823E+38 (1038) + 3.402823E+38 例:-3.4! 1.0E+2 (1.0 102),1数据类型,8.2 VBA程序设计基础,表示范围:- 2147483648 + 2147483647 例如:32768 -21&,27,(4). 双精度数 Double类型申明符为“# ( D )”,最多有15位有效数字,,(5). 字符型数据 string 类型申明符为“ $ ” 字符型数据是用双引号括起来的一串ASCII码字符。专门用来存放文字信息的。 字符串是放在双引号内的若干个字符,其中长度为0(即不含任何字符)的字符串称为空字符串。 例:“This a book “ “ “,(6).逻辑型 Boolean 逻辑型数据只有真和假两种值,长度固定为1个字符。,1数据类型,8.2 VBA程序设计基础,28,(7).日期时间型 Date 日期时间型(Date Time)数据是描述日期和时间的数据,长度固定为8个字符。 日期时间型数据除包括日期数据的年、月、日外,还包括时、分、秒以及上午、下午等内容。,(8) . 货币型(Currency)类型申明符为 货币数据为表示钱款而设置的。,(9)变体形(Variant) 变体形是指所有未定义的变量默认的数据类型,是一种可变的数据类型,可以表示任何值,1数据类型,8.2 VBA程序设计基础,29,使用数据类型时,应注意以下问题: 布尔型数据(Boolean) 布尔型数据只有两个值:True和False,布尔型数据转换为其他类型数据时,True转换为-1,False转换为0。其他类型数据转换为布尔型数据时,0转换为False,其他值转换为True。,8.2 VBA程序设计基础,1数据类型,8.2.3 VBA的基本数据类型,30,使用数据类型时,应注意以下问题: 日期型数据(Date) 任何可以识别的文本形式的日期数据都可以赋给日期变量,日期类型数据必须前后用“#”号括住, 例如,#20070317# 变体类型数据(Variant) VBA中规定,如果没有显式声明或使用符号来定义变量的数据类型,默认为变体类型,8.2 VBA程序设计基础,1数据类型,8.2.3 VBA的基本数据类型,31,在编程过程中,有时需要将某种类型数据转换成另一种数据类型。例如,窗体文本框控件中显示的数值数据为字符串型,要想作为数值处理就应进行数据类型转换。,8.2 VBA程序设计基础,8.2.3 VBA的基本数据类型,2数据类型之间的转换,32,数据库中对象,如数据库、表、查询、窗体和报表等,也有对应的VBA对象数据类型,这些对象数据类型由引用的对象库所定义。,8.2 VBA程序设计基础,3对象数据类型,8.2.3 VBA的基本数据类型,33,用户定义数据类型可以在TypeEndType关键字间定义, 定义格式如下: Type 数据类型名 As As EndType,8.2 VBA程序设计基础,4用户定义的数据类型,8.2.3 VBA的基本数据类型,34,例8-3:定义一个学生信息数据类型。 Type NewStudent StuNo As String*8 StuName As String StuSex As String*1 StuAge As Integer EndType,8.2 VBA程序设计基础,35,例8-4:定义一个学生信息类型变量NewStud。 Dim NewStud As NewStudent NewStud.StuNo=“07010101” NewStud.StuName=“柳志杰” NewStud.StuSex=“女” NewStud.StuAge=20,8.2 VBA程序设计基础,36,可以用关键字With简化程序中重复的部分。例如,为上面NewStud变量的赋值语句可以修改为如下形式: With NewStud StuNo=“07010101” .StuName=“柳志杰” .StuSex=“女” .StuAge=20 EndWith,8.2 VBA程序设计基础,37,常量是指在程序运行时其值不会发生变化的数据VBA的常量有直接常量和符号常量两种表示方法。 直接常量就是直接表示的整数、单精度数和字符串,如1234、17.28E+9、“StuID”等。 符号常量就是用符号表示常量,符号常量有用户定义的符号常量、系统常量和内部常量3种。,8.2 VBA程序设计基础,8.2.4 VBA的常量、变量、运算符和表达式,1常量,38,(1)用户定义的符号常量 在VBA编程过程中,对于一些使用频度较多的常量,可以用符号常量形式来表示。符号常量使用关键字Const来定义,格式如下: Const 符号常量名称=常量值,8.2 VBA程序设计基础,8.2.4 VBA的常量、变量、运算符和表达式,1常量,例如:Private Sub Command3_Click() Const pi = 3.14 r=10 msgbox “面积为” & pi * r * r End Sub,好处是什么?,39,(2)系统常量 系统常量是指Access系统启动时建立的常量,有True、False、Yes、No、On、Off和Null等,编写代码时可以直接使用。 (3)内部常量 VBA提供了一些预定义的内部符号常量,它们主要作为DoCmd命令语句中的参数。内部常量以前缀ac开头,如acCmdSaveAs。,8.2 VBA程序设计基础,1常量,8.2.4 VBA的常量、变量、运算符和表达式,40,变量是指程序运行时值会发生变化的数据。在程序运行时数据是在内存中存放的,内存中的位置是用不同的名字表示的,这个名字就是变量的名称,该内存位置上的数据就是该变量的值。,8.2 VBA程序设计基础,2变量,8.2.4 VBA的常量、变量、运算符和表达式,41,(1)变量的命名规则 在为变量命名时,应遵循以下规则: 变量名只能由字母、数字和下划线组成。 变量名必须以字母开头。 不能使用系统保留的关键字,例如Sub,Function 长度不能超过255个字符。 不区分英文大小写字母, (2)变量类型的定义 根据变量类型定义的方式,可以将变量分为隐含型变量和显示变量两种形式。,8.2 VBA程序设计基础,2变量,8.2.4 VBA的常量、变量、运算符和表达式,42,(2)变量类型的定义 根据变量类型定义的方式,可以将变量分为隐含型变量和显示变量两种形式。 隐含型变量 利用将一个值指定给变量名的方式来建立变量, 如: NewVar=127 当在变量名称后没有附加类型说明字符来指明隐含变量的数据类型时,默认为Variant数据类型。,8.2 VBA程序设计基础,2变量,8.2.4 VBA的常量、变量、运算符和表达式,43, 显式变量 显式变量是指在使用变量时要先定义后使用 定义显式变量的方法如下: Dim 变量名 As 类型名 在一条Dim语句中可以定义多个变量,如: Dim Var1,Var2 as String 在模块设计窗口的顶部说明区域中,可以加入Option Explict语句来强制要求所有变量必须定义才能使用。,8.2 VBA程序设计基础,2变量,8.2.4 VBA的常量、变量、运算符和表达式,44,在VBA编程语言中,可以将运算符分为算术运算符、关系运算符、逻辑运算符和连接运算符4种类型。不同的运算符用来构成不同的表达式,来完成不同的运算和处理。表达式是由运算符、函数和数据等内容组合而成的,根据运算符的类型可以将表达式分为算数表达式、关系表达式、逻辑表达式和字符串表达式4种类型。 (1)算术运算符 算术运算符用于数值的算术运算,VBA中的算术运算符有7个,8.2 VBA程序设计基础,3运算符和表达式,45,8.2 VBA程序设计基础,46,算术运算符之间存在优先级,优先级是决定算术表达式的运算顺序的原则,算术运算符优先级从高到低依次为乘幂、乘除法、整数除法、求模和加减法。由算术运算符、数值、括号和正负号等构成的表达式称为算术表达式。在算术表达式中,括号和正负号的优先级比算术运算符要高,括号比正负号的优先级高。 例8-17:算术表达式-8+20*4 Mod 6 (52)的结果。计算 的过程如下: 1)计算(52)的结果为2,表达式化为-8+20*4 Mod 6 2 2)计算6 2的结果为36,表达式化为-8+20*4 Mod 3 3)计算20*4的结果为80,表达式化为-8+80 Mod36 4)计算80 Mod 36的结果为8,表达式化为-8+8 5)计算-8+8的结果为0,8.2 VBA程序设计基础,47,(2)关系运算符 关系运算符用来表示两个值或表达式之间的大小关系,从而构成关系表达式。6个关系运算符的优先级是相同的,如果它们出现在同一个表达式中,按照从左到右的顺序依次运算。但关系运算符比算术运算符的优先级低。 关系运算的结果为逻辑值:真(True)和假(False)。,8.2 VBA程序设计基础,3运算符和表达式,48,8.2 VBA程序设计基础,49,(3)逻辑运算符 逻辑运算符也叫布尔运算符,用于完成逻辑运算。VBA中有与(And)、或(Or)和非(Not)等6个逻辑运算符,8.2 VBA程序设计基础,50,使用逻辑运算符可以对两个逻辑量进行逻辑运算, 其结果仍为逻辑值真(True)或假(False),逻辑运算符的优先级低于关系运算符,常用的3个逻 辑运算符之间的优先级由高到低依次为: 非运算Not, 与运算符(And),或运算符(Or)。,8.2 VBA程序设计基础,51,(4)连接运算符 连接运算符具有连接字符串的功能。在VBA中有“&”和“+”两个运算符。 “&”运算符用来强制两个表达式作字符串连接。 “+”运算符是当两个表达式均为字符串数据时,才将 两个字符串连接成一个新字符串。 当一个表达式由多个运算符连接在一起时,运算进行的先后顺序是由运算符的优先级决定的。优先级高的运算先进行,优先级相同的运算依照从左向右的顺序进行。上述4种运算符的优先级由高到低依次为算术运算符、连接运算符、关系运算符、逻辑运算符。,返 回,8.2 VBA程序设计基础,3运算符和表达式,52,在VBA中提供了近百个内置的标准函数,用户可以直接调用标准函数来完成许多操作。标准函数的调用形式如下: 函数名(参数表列) 数学函数用来完成数学计算功能,8.3 常用标准函数,1数学函数,53,例8-20:常用数学函数举例如下: Abs(-7)=7 Exp(2)=7.389 056 098 930 65 Log(6)=1.791 759 469 228 05 Sqr(25)=5 Int(6.28)=6,Fix(6.28)=6 Int(-6.28)=-7,Fix(-6.28)=-6 Sin(90*3.14159/180) Cos(45*3.14159/180) Tan(30*3.14159/l80) Int(100*Rnd) Int(101*Rnd),8.3 常用标准函数,54,字符串函数完成字符串处理功能。 (1)字符串检索函数 函数格式:InStr(Start, Strl,Str2 ,Compare) 函数功能:检索子字符串Str2在字符串Strl中最早出现的位置,返回整型数。,8.3 常用标准函数,2字符串函数,例8-21:已知Strl=“123456”,Str2=“56”。 s=InStr(strl,str2) 返回5 s=InStr(3, “aBCdAb”, “a”,1) 返回5,55,(2)字符串长度检测函数 函数格式:Len(字符串表达式或变量名) 函数功能:返回字符串中所包含字符个数。 参数说明:对于定长字符串变量,其长度是定义时的长度,和字符串实际值无关。 (3)字符串截取函数 函数格式:Left(字符串表达式,N) Right(字符串表达式,N) Mid(字符串表达式,N1,N2),8.3 常用标准函数,2字符串函数,56,(4)生成空格字符函数 函数格式:Space(数值表达式) 函数功能:Space函数可以返回数值表达式的值指定的空格字符数。,8.3 常用标准函数,2字符串函数,5)大小写转换函数 函数格式:Ucase(字符串表达式) Lcase(字符串表达式) 函数功能:Ucase函数可以将字符串中小写字母转成大写字母。 Lcase函数可以将字符串中大写字母转成小写字母。,57,(6)删除空格函数 函数格式:LTrim(字符串表达式) RTrim(字符串表达式) Trim(字符串表达式) 函数功能:LTrim函数可以删除字符串的开始空格。RTrim函数可以删除字符串的尾部空格。Trim函数可以删除字符串的开始和尾部空格。,8.3 常用标准函数,2字符串函数,58,日期/时间函数的功能是处理日期和时间。主要包括以下函数: (1)获取系统日期和时间函数 函数格式:Date Time Now 函数功能:Date函数可以返回当前系统日期。Time函数可以返回当前系统时间。Now函数可以返回当前系统日期和时间。,8.3 常用标准函数,3日期/时间函数,59,(2)截取日期分量函数 函数格式:Year(日期表达式) Month(日期表达式) Day(日期表达式) Weekday(日期表达式,W) 函数功能:Year函数可以返回日期表达式年份的整数。Month函数可以返回日期表达式月份的整数。Day函数可以返回日期表达式日期的整数。Weekday函数可以返回17的整数,表示星期。 参数说明:Weekday函数中,参数W可以指定一个星期的第一天是星期几。缺省时周日是一个星期的第一天,W的值为vbSunday或1。,8.3 常用标准函数,3日期/时间函数,60,(3)截取时间分量函数 函数格式:Hour(时间表达式) Minute(时间表达式) Second(时间表达式) 函数功能:Hour函数可以返回时间表达式的小时数(0-23)。Minute函数可以返回时间表达式的分钟数(0-59)。Second函数可以返回时间表达式的秒数(059)。,8.3 常用标准函数,3日期/时间函数,61,(1)字符串转换字符代码函数 函数格式:Asc(字符串表达式) 函数功能:Asc函数可以返回字符串首字符的ASCII值。 (2)字符代码转换字符函数 函数格式:Chr(字符代码) 函数功能:Chr函数可以返回与字符代码相关的字符。,8.3 常用标准函数,4类型转换函数,类型转换函数可以将数据类型转换成指定类型。,62,(4)字符串转换成数字函数 函数格式:Val(字符串表达式) 函数功能:Val函数可以将数字字符串转换成数值型数字。 参数说明:数字字符串转换时可自动将字符串中的空格、制表符和换行符去掉,当遇到第一个不能识别的字符时,停止转换。,8.3 常用标准函数,(3)数字转换成字符串函数 函数格式:Str(数值表达式) 函数功能:Str函数可以将数值表达式值转换成字符串。 参数说明:数值表达式的值为正时,返回的字符串将包含一个前导空格。,4类型转换函数,63,5验证函数,Access提供了一些对数据进行校验的函数,8.3 常用标准函数,64,输入框函数用于在一个对话框中显示提示,等待用户输入正文并按下按钮,然后返回包含文本框内容的数据信息。 函数格式: InputBox(Prompt,Titlel(,Default,Xpos,Ypos,Helpfile,Context),8.3 常用标准函数,6输入框函数,例:Private Sub Command1_Click() q1 = InputBox(“请输入您的身份证号”,“输入身份证号”,“19781201”) msgbox “你的身份证号是:” & q1 End Sub,提示,缺省,标题,提示,缺省,标题,65,消息框用于在对话框中显示消息,等待用户单击按钮,并返回一个整型值指示用户单击了哪一个按钮。 函数格式: MsgBox(Prompt,Buttons,Title,Helpfile,Context),8.3 常用标准函数,7消息框函数,66,8.3 常用标准函数,函数实验方法:在VBE环境中打开”视图/立即窗口”,67,一个程序由多条不同功能的语句组成,每条语句能够完成某个特定的操作。 在VBA程序中,按照功能的不同将程序语句分为声明语句和执行语句两类。声明语句用于定义变量、常量或过程。执行语句用于执行赋值操作、调用过程和实现各种流程控制。 执行语句可以根据流程的不同分为顺序结构、条件结构和循环结构3种。顺序结构是按照语句的先后顺序依次执行。条件结构是根据条件选择执行不同的分支语句,又称为选择结构。循环结构是根据某个条件重复执行某一段程序语句。,8.4 VBA的程序结构,8.4.1 语句,68,(1)Rem语句 语句格式:Rem 注释内容 (2)英文单引号“” 语句格式:注释内容 注释可以添加到程序模块的任何位置,并且默认以绿色文本显示。,8.4 VBA的程序结构,8.4.1 语句,1注释语句,声明语句用于命名和定义常量、变量、数组和过程,同时也定义了它们的生命周期与作用范围。,2声明语句,69,赋值语句是为变量指定一个值或表达式。 格式:Let 变量名=值或表达式 例如:x=y x=x+1 label0.caption=“总成绩” Text11=“欢迎使用Access”,8.4 VBA的程序结构,3赋值语句,4GoTo语句,GoTo语句和语句标号一起用于实现无条件跳转。语句格式为: GoTo 语句标号,8.4.1 语句,70,8.4 VBA的程序结构,8.4.1 语句,例:计算鸡兔同笼,分析:h代表头, F代表脚,c代表鸡. R代表兔子 R+C=H 2C+4R=F 2 -得: R=(F-2H)/2 C=H-R,71,8.4 VBA的程序结构,8.4.1 语句,例:计算鸡兔同笼,Private Sub Command8_Click() Dim h%, f%, c!, r! h = Text0 f = Text2 r = (f - 2 * h) / 2 c = h - r Text4 = c Text6 = r End Sub,72,条件语句可以根据条件表达式的值来选择程序运行的分支语句,主要有以下一些结构:,8.4 VBA的程序结构,8.4.2 条件语句,(1)单分支If语句 格式: If 条件表达式 Then 语句序列 End If 当程序执行到这种格式的If语句时,如果条件表达式为真,将执行Then后面的语句序列,如果条件表达式为假,程序将跳过语句序列而直接执行End If后面的语句。,1If语句,73,例:完善鸡兔同笼,当算出的数据为小数时,不输出,8.4 VBA的程序结构,1If语句,8.4.2 条件语句,74,(2)双分支If语句 格式: If 条件表达式 Then 语句序列1 Else 语句序列2 End If 当程序执行到这种格式的If语句时,如果条件表达式为真,将执行Then和Else之间的语句序列1,如果条件表达式为假,程序将执行Else和End If之间的语句序列。,8.4 VBA的程序结构,8.4.2 条件语句,1If语句,75,例:完善鸡兔同笼,当算出的数据正确时输出,错误时提醒,8.4 VBA的程序结构,76,Dim x As Integer x=MsgBox(“真的要退出系统吗?”,1+64+0, “信息提示”) If x=VbOk Then MsgBox “你单击了确定按钮!”,0+64+0, “信息提示” Else MsgBox “你单击了取消按钮!”,0+64+0, “信息提示” End If,8.4 VBA的程序结构,例8-38:双分支If语句举例。,77,(3)嵌套的If语句 格式: If 条件表达式1 Then 语句序列1 Else If 条件表达式2 Then 语句序列2 Else 语句序列3 End If End If,8.4 VBA的程序结构,1If语句,8.4.2 条件语句,格式: If 条件表达式1 Then 语句序列1 ElseIf 条件表达式2 Then 语句序列2 Elseif 条件表达式3 Then 语句序列3 else 语句序列n End If End If,78,方法二: Dim x! X=inputbox(“x=”) If x0 Then y=Sqr(x) ElseIf x=0 Then y=0 Else y=Abs(x) End If Msgbox y,8.4 VBA的程序结构,例8-39:使用If语句嵌套结构计算表达式y的值。,方法一: Dim x! X=inputbox(“x=”) If x0 Then y=Sqr(x) Else if x=0 then y=0 Else y=Abs(x) endif End If Msgbox y,79,当条件选项较多时,Select语句就可以解决多重嵌套控制结构这类问题。 格式: Select Case 表达式 Case 表达式1 语句序列1 Case 表达式2 语句序列2 Case 表达式 n 语句序列n Case Else 语句序列n+1 End Select,8.4 VBA的程序结构,8.4.2 条件语句,2Select语句,80,Case表达式可以是下列4种格式之一: 单一数值,如Case 2。 一行并列的数值,数值之间用逗号隔开,如Case 5, 6,7 用关键字To分隔开两个数值或表达式之间的范围, 如Case 1 to 10 用关键字Is连接关系运算符,如=、=,后面跟变量或具体的值,Is=15。 Case语句是依次测试的,并执行第一个符合Case条件的相关的程序代码,即使再有其他符合条件的分支也不会再执行。如果没有找到符合条件的,并且有Case Else语句,就会执行该语句后面的程序代码。,8.4 VBA的程序结构,2Select语句,81,例:根据用户从键盘输入的数据,判断输入字符的类型。,8.4 VBA的程序结构,2Select语句,Dim str$, x$ x = InputBox(“x“) Select Case x Case “A“ To “Z“ str = “UpperCase“ Case “a“ To “z“ str = “LowerCase“ Case “0“ To “9“ str = “Number“ Case Else str = “其他符号“ End Select MsgBox x & “ “ & str,82,例:将百分制成绩按要求转换成相应的等次输出。,8.4 VBA的程序结构,2Select语句,Private Sub Command0_Click() Dim r!, G$ r = Text1 Select Case r Case Is = 90 G = “优秀“ Case Is = 80 G = “良好“ Case Is = 70 G = “中等“ Case Is = 60 G = “及格“ Case Else G = “不及格“ End Select Label5.Caption = r & “分“ & “为“ & G End sub,83,在VBA中,除了If和Select两种条件语句外,还有3个函数可以实现分支选择操作。 (1)IIf函数 函数格式:IIf(条件式,表达式1,表达式2) 函数功能:IIf函数根据“条件式”的值来决定函数返回值。如果“条件式”的值为真,函数返回“表达式1”的值,如果“条件式”值为假,函数返回“表达式2”的值。 例如: maxnum=iif (xy,x,y),8.4 VBA的程序结构,3分支功能的函数,8.4.2 条件语句,84,(2)Switch函数 函数格式:Switch(条件式1,表达式1,条件式2,表达式2 ,条件式n,表达式n) 函数功能:Switch函数根据“条件式1”、“条件式2”“条件式n”的值来决定函数返回值。条件式是由左至右进行计算判断的,在第一个相关的条件式为真时,将该表达式作为函数返回值。 例8-41:使用该函数实现符号函数的功能 x=10 y=switch(x0,1,x=0,0,x0,-1),8.4 VBA的程序结构,3分支功能的函数,8.4.2 条件语句,85,(3)Choose函数 函数格式:Choose(索引式,选项1,选项2,选项n) 函数功能:Choose函数根据“索引式”的值来返回选项列表中的某个值。如果“索引式”的值不在这个范围,函数返回无效值(Null)。 例:NOp取值范围为,使其对应转换成+,-,*, / nop=4 Op=choose(nop, “+“,“-“,“*“, “/ “),8.4 VBA的程序结构,3分支功能的函数,8.4.2 条件语句,86,在程序设计中,可以使用循环语句在满足条件的前提下重复执行一行或几行程序代码。 在VBA中,循环语句有3种: ForNext DoLoop WhileWend,8.4 VBA的程序结构,8.4.3 循环语句,87,功能:能够重复执行程序代码区域特定次数。 格式: For 循环变量=初值 To 终值 Step步长 循环体 条件语句序列 Exit For 结束条件语句序列 Next 循环变量,8.4 VBA的程序结构,1ForNext语句,8.4.3 循环语句,88,For语句的执行步骤如下: (1)循环变量取初值。 (2)循环变量与终值比较,确定循环是否进行. (3)执行循环体。 (4)循环变量值增加步长,即循环变量=循环变量+步长,程序跳转至(2)。,8.4 VBA的程序结构,1ForNext语句,8.4.3 循环语句,例8-44:使用ForNext语句计算1100之间数的和。 Private Sub Command1_Click() Dim i%, sum% For i = l To 100 sum = sum + i Next i Label2.Caption = sum End Sub,思考:如何计算2+4+.+100 1+1/2-1/3+1/4+.,89,8.4 VBA的程序结构,1ForNext语句,8.4.3 循环语句,例:输出1-10的数 For i = 1 To 10 s = s & “ “ & i Next Text0=s,例:输出10-1的数 For i = 10 To 1 step -1 s = s & “ “ & i Next Text0=s,思考:换成s=i & s ,程序结果如何?,90,8.4 VBA的程序结构,1ForNext语句,8.4.3 循环语句,例:输入任意10个数,求其最大数 Private Sub Command4_Click() Dim x!, max! x = InputBox(“第1个数“) Text0 = x For i = 2 To 4 x = InputBox(“第“ & i & “个数“) Text0 = Text0 & “ “ & x If x max Then max = x End If Next i Label3.Caption = “最大数为: “ & max End Sub,思考:如何求最大数的位置?,91,(1)Do WhileLoop 功能:当条件式结果为真时,重复执行循环体。当条件式结果为假或执行到Exit Do时,结束循环。 语句格式: Do While 条件式 循环体 条件语句序列 Exit Do 结束条件语句序列 Loop,8.4 VBA的程序结构,2DoLoop语句,8.4.3 循环语句,92,例8-45:用Do WhileLoop语句计算1100之间数的和。 Dim i As Integer Dim Sum As Integer i=1 Do While i=100 Sum=Sum+i i=i+1 Loop,8.4 VBA的程序结构,2DoLoop语句,8.4.3 循环语句,对比:使用ForNext语句计算1100之间数的和。 Dim i%, sum% For i = l To 100 sum = sum + i Next i,93,(2)Do UntilLoop 语句功能:Do UntilLoop循环结构是当条件式值为假时,重复执行循环体。当条件式值为真,结束循环。 语句格式: Do Until 条件式 循环体 条件语句序列 Exit Do 结束条件语句序列 Loop,8.4 VBA的程序结构,2DoLoop语句,8.4.3 循环语句,94,例8-46:用Do UntilLoop语句计算1100之间数的和。 Dim i As Integer Dim Sum As Integer i=1 Do Until i100 Sum=Sum+i i=i+1 Loop,返 回,8.4 VBA的程序结构,2DoLoop语句,8.4.3 循环语句,对比:用Do WhileLoop语句计算1100之间数的和。 Dim i As Integer Dim Sum As Integer i=1 Do While i=100 Sum=Sum+i i=i+1 Loop,95,功能:WhileWend循环与Do WhileLoop结构类似,但不能在WhileWend循环中使用Exit Do语句。 格式: While 条件式 循环体 Wend,返 回,8.4 VBA的程序结构,8.4.3 循环语句,3WhileWend语句,96,返 回,8.4 VBA的程序结构,4数组的使用,8.4.3 循环语句,数组 数组是一组具有相同属性和相同类型的数据,并用统一的名称作为标识的数据类型,这个名称称为数组名,数组中的每个数据称为数组元素,或称为数据元素变量。数组元素在数组中的序号称为下标,数组元素变量由数组名和数组下标组成,例如,A(1)、A(2)、A(3)表示数组A的3个元素。,97,数组在使用之前也要进行定义, 格式 : Dim 数组名(下标下限 to 下标上限, 下标下限 to 下标上限) As 数据类型,8.2 VBA程序设计基础,4数组的使用,例8-11: Dim A(10) As Integer Dim B(1 To 10) As Integer Dim c(1 to 3,1 to 5) As Integer,注意: Option Base 1 数组的默认下标下限设置为1 Option Base 0 数组的默认下标下限设置为0,98,8.2 VBA程序设计基础,4数组的使用,例:输入任意10个学生的成绩,输出大于平均成绩的数据。,Private Sub cmdStart_Click() Dim a(10) As Single, S!,av! For I = 1 To 10 a(I) = InputBox( “请输入第“ & I & “个数“) S = S + a(I) txt1 = txt1 & “ “ & a(I) Next I av = S / 10 For I = 1 To 10 If a(I) av Then Txt2 = Txt2 & “ “ & a(I) End If Next I End Sub,99,8.2 VBA程序设计基础,4数组的使用,例:求波斐那契数列,已经数列第一二项的值,从第三项开始每一项的值等于前两项之和 Private Sub Command4_Click() Dim a(10) As Single a(1) = Text0 a(2) = Text1 For i = 3 To 10 a(i) = a(i - 1) + a(i - 2) Text3 = Text3 & “ “ & a(i) Next i End Sub,100,8.2 VBA程序设计基础,5循环嵌套的使用,一个循环体内又包含了一个完整的循环结构称为循环的嵌套.,For ii =1 To 10 For jj=1 To 20 Next ii Next jj,For ii =1 To 10 For ii=1 To 20 Next ii Next ii,For ii =1 To 10 For jj=1 To 20 Next jj Next ii,For ii =1 To 10 Next ii For ii =1 To 10 Next ii,101,8.2 VBA程序设计基础,5循环嵌套的使用,例 : 百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。 设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为: x+y+=100 3x+2y+0.5z=100,102,8.2 VBA程序设计基础,5循环嵌套的使用,例 : 百元买百鸡问题,103,在VBA中,Access可以通过DoCmd对象调用系统内部的方法来实现对数据库的操作,例如,打开窗体、打开报表、打开查询和关闭这些对象等操作。 DoCmd对象调用方法: DoCmd.方法名 参数表,8.5 DoCmd对象及常用的操作方法,104,8.5 DoCmd对象及常用的

温馨提示

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

评论

0/150

提交评论