《第8章 模块与VBA编程ppt课件.pptx》由会员分享,可在线阅读,更多相关《第8章 模块与VBA编程ppt课件.pptx(163页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第8章 模块与VBA编程Access2010第8章 模块与VBA编程通过本章的学习,应该掌握以下内容:(1)VBA编程环境。(2)VBA编程的基本概念。(3)VBA程序设计基础。(4)VBA程序控制语句。(5)面向对象程序设计的基本概念。(6)VBA模块的创建、过程调用和参数传递。(7)VBA常用操作。(8)VBA的数据库编程技术。(9)VBA程序调试与错误处理。学习目标8.1 VBA的编程环境 Visual Basic 编辑器(VBE,Visual Basic Editor)是编辑VBA代码时使用的界面。VBE提供了完整的开发和调试工具,可以用于创建和编辑VBA程序。8.1.1 打开VBE窗
2、口 在Access 2010中,打开VBE窗口有以下几种方法。n 在数据库中,单击“数据库工具”选项卡“宏”组“Visual Basic”。n 在数据库中,单击“创建”选项卡“宏与代码”选项组“Visual Basic”。n 创建新的标准模块:单击“创建”选项卡“宏与代码”选项组“模块”,则在VBE编辑器中创建一个空白模块。n 如果已有一个标准模块,可选择“导航窗格”窗口上的“模块”对象,在模块对象列表中双击选中的模块,则在VBE编辑器中打开该模块。n 对于属于窗体或报表的模块可以打开窗体或报表的设计视图,单击属性窗口的“事件”页中某个事件框右侧的“生成器”按钮 ,打开“选择生成器”对话框,选
3、择其中的“代码生成器”选项即可。8.1.2 VBE窗口 VBE窗口由VBE工具栏、工程窗口、属性窗口和代码窗口组成,如图8-2所示。 工程资源管理器 属性窗口 代码窗口 两句之间输入代码 视图Microsoft Office Access8.1.2 VBE窗口1VBE工具栏 VBE工具栏如图所示。8.1.2 VBE窗口2工程窗口 工程窗口,也叫工程资源管理器,其中的列表框中列出了在应用程序中用到的模块文件。可单击“查看代码”按钮显示相应的代码窗口,或单击“查看对象”按钮,显示相应的对象窗口,也可单击“切换文件夹”按钮,隐藏或显示对象文件夹。8.1.2 VBE窗口3属性窗口 属性窗口中列出了所选
4、对象的各种属性,分“按字母序”和“按分类序”两种格式查看属性。可以直接在属性窗口中编辑对象的属性,这种方法称对象属性的一种“静态”设置方法;此外,还可以在代码窗口内用VBA代码编辑对象的属性,这属于对象属性的“动态”设置方法。 为了在属性窗口中显示Access类对象,应先在设计视图中打开对象。8.1.2 VBE窗口4代码窗口 单击VBE窗口菜单栏中的“视图”菜单“代码窗口”命令,即可打开代码窗口。可以使用代码窗口来编写、显示以及编辑VBA程序代码。实际操作时,在打开各模块的代码窗口后,可以查看不同窗体或模块中的代码,并且在它们之间做复制以及粘贴的动作。 双击工程窗口上的一个模块或类,相应的代码
5、窗口就会显示出来。8.1.2 VBE窗口5立即窗口 单击VBE窗口菜单栏中的“视图”菜单“立即窗口”命令,即可打开立即窗口。立即窗口是用来进行快速计算的表达式计算、简单方法的操作及进行程序测试的工作窗口。在代码窗口中编写代码时,要在立即窗口打印变量或表达式的值,可以使用Debug.Print语句。在立即窗口中使用“?”或“Debug.Print”语句显示表达式的值。8.1.2 VBE窗口6本地窗口 单击VBE窗口菜单栏中的“视图”菜单“本地窗口”命令,即可打开本地窗口。 在本地窗口中,可自动显示出所有在当前过程中的变量声明及变量值。8.1.2 VBE窗口7监视窗口 单击VBE窗口菜单栏中的“视
6、图”菜单“监视窗口”命令,即可打开监视窗口。监视窗口用于调试 Visual Basic 过程,通过在监视窗口增添监视表达式的方法,程序可以动态了解一些变量或表达式的值的变化情况,进而对代码的正确与否有清楚的判断。8.2 VBA模块简介 模块是Access数据库中的一个数据库对象,它以VBA语言为基础编写。通俗来说,模块是 Access数据库中用于保存VBA程序代码的容器。模块基本上是由声明、语句和(Sub和Function)过程组成的集合,它们作为一个已命名的单元存储在一起,对VBA程序代码进行组织。 Access有两种类型的模块:标准模块和类模块。8.2.1 标准模块 标准模块包含在数据库窗
7、口的模块对象列表中,标准模块包括通用过程和常用过程,这些过程不与Access数据库文件中的任何对象相关联。也就是说,如果控件没有恰当的前缀,这些过程就没有指向Me(当前对象)或控件名的引用。但可以在数据库中任何其他对象中引用标准模块中的过程。8.2.2 类模块 类模块是包含类的定义的模块,包括其属性和方法的定义。类模块有3种基本形式:窗体类模块、报表类模块和自定义类模块,它们各自与某一窗体或报表相关联。为窗体(或报表)创建第一个事件过程时,Access将自动创建与之关联的窗体或报表模块。单击窗体(或报表)设计视图中“工具”选项组中“查看代码”按钮,可以查看窗体(或报表)的模块。8.2.3 VB
8、A代码编写模块的过程 过程是模块的主要单元组成,由VBA代码编写而成。过程分为两种类型:Sub子过程和Function函数过程,具体编写模块的过程请参见本章的节。8.2.4 将宏转换为模块的过程 使用 Access 2010 自动将宏转换为 VBA 模块或类模块。可以转换附加到窗体或报表的宏,而不管它们是作为单独的对象存在还是作为嵌入的宏存在。还可以转换未附加到特定窗体或报表的全局宏。8.2.5 在模块中执行宏 在模块的定义过程中,使用Docmd对象的RunMacro方法,可以执行设计好的宏。其调用格式为: Docmd.RunMacro MacroName,RepeatCount ,Repea
9、tExpression8.3 VBA程序设计基础 VBA是Microsoft Office套装软件的内置编程语言,其语法与Visual Basic编程语言互相兼容。在Access程序设计中,当某些操作不能用其他Access对象实现或实现起来很困难时,就可以利用VBA语言编写代码,完成这些复杂任务。8.3.1 程序书写原则1.程序书写规定 通常将一个语句写在一行中,但当语句较长,一行写不下时,也可以利用续行符(下划线)“_”将语句接续到下一行中。有时需要在一行中写几句代码,这时需要用到冒号“:”将不同的几个语句分开。 mycount = 10 * x + 7 * y + z / 5 mycoun
10、t = 10 * x + 7 * y _ + z / 5 Text1.Value = Hello : Text1.ForeColor = 2552.注释语句注释语句用于对程序或语句的功能给出解释和说明。通常一个好的程序都会有注释语句,这对程序的维护有很大的好处。在VBA程序中,注释的内容被显示成绿色文本。可以通过以下两种方式添加注释。(1)使用“”,格式如下: 注释语句 这种注释语句可以直接放在其他语句之后而无需分隔符。(2)使用Rem语句,格式如下: Rem 注释语句 这种注释语句需要另起一行书写,也可以放在其他语句之后,但需要用冒号隔开。3.书写格式 利用空格、空行、缩进使得程序层次分明。
11、8.3.2 数据类型 VBA一般用变量保存计算的结果,进行属性的设置,指定方法的参数以及在过程间传递数值。为了高效率地执行,VBA为变量定义了一个数据类型的集合。在Access里,很多地方都要指定数据类型,包括过程中的变量、定义表和函数的参数等。1标准的数据类型 VBA支持多种数据类型,下表列出了VBA程序中的标准数据类型,以及它们所占用的存储空间和取值范围。数据类型类型标识符号所占字节数范围字节型Byte无1字节0255布尔型Boolean无2字节True或False整型Integer%2字节3276832767长整型Long&4字节21474836482147483647单精度Single
12、!4字节负数:3.402823E381.401298E45正数:1.401298E453.402823E38双精度Double#8字节负数:1.79769313486232E3084.94065645841247E324正数:4.94065645841247E3241.7976931 3486232E308货币型Currency8字节922337203685477.5808922337203685477.5807日期型Date无8字节100年1月1日到9999年12月31日字符型String$与串长有关065535个字符对象型Object无4字节任何对象引用变体型Variant无根据分配确定
13、2用户自定义的数据类型 当需要使用一个变量来保存包含不同数据类型字段的数据表的一条或多条记录时,用户自定义数据类型就特别有用。 用户自定义数据类型可以在Type End Type关键字间定义,定义格式如下。Type 自定义类型名 元素名 As 类型 元素名 As 类型End Type 2用户自定义的数据类型例如,定义一个学生信息的数据类型如下:Type Student SNo As String SName As String SAge As IntegerEnd Type上述例子定义了由SNo(学号)、SName(姓名)、SAge(年龄)3 个分量组成的名为Student的数据类型。2用户自
14、定义的数据类型【例8.1】 声明一个学生信息类型的变量Stu,并操作分量。Dim Stu As Student 定义一个学生信息类型变量Stu Stu.SNo=201109001 Stu.SName=“张丽 Stu.SAge=182用户自定义的数据类型【例8.1】 声明一个学生信息类型的变量Stu,并操作分量。可以用关键字With简化程序中的重复部分。例如,为上面Stu变量赋值可以用:With Stu .SNo=201109001 注意分量名前用的英文句点 .SName=“张丽 .SAge=18End With8.3.3 变量与常量 变量是指在程序运行过程期间取值可以变化的量。在VBA代码中声
15、明和使用指定的变量来存储值、计算结果或操作数据库中的任意对象。1变量的命名规则变量命名时应遵循以下准则。(1)变量名必须以英文字母开头,可以包含字母、数字或下划线字符“_”。(2)变量名不能包含空格、句点等字符。(3)变量名的长度不能超过255个字符,且变量名不区分大小写。(4)不能在某一范围内的相同层次中使用重复的变量名。(5)变量的名字不能是VBA的关键字。2变量的声明 变量一般应先声明再使用,变量声明有两个作用,一是指定变量的数据类型,二是指定变量的适用范围。VBA应用程序并不要求在过程中使用变量以前明确地进行声明。如果使用一个没有明确声明的变量,Visual Basic会默认地将它声明
16、为Variant数据类型。变量声明语句:Dim As 2变量的声明 【例8.2】声明字符串变量,并为之赋值。 Dim StudentName As String 该语句声明了一个名为StudentName的String(字符串)型变量,声明之后,就可以给它赋值: StudentName=张丽 赋值之后,还可以再改变它的值: StudentName=吴薇 VBA允许在同一行内声明多个变量,变量间用英文逗号分隔。2变量的声明 【例8.3】在一个语句中声明3个不同类型的变量,其中aaa为布尔型变量,bbb为变体型变量,ccc为日期型变量。 Dim aaa As Boolean,bbb,ccc As
17、Date 其中bbb的类型为Variant,因为声明时没有指定它的类型。3变量的作用域 变量的作用域确定了能够使用该变量的那部分代码。一旦超出了作用范围,就不能引用它的内容。变量的作用范围是在模块中声明确定的。声明变量时可以使用3种不同的作用范围:Public、Private、Static和Dim。( 1)过程内部使用的变量过程级变量只有在声明它们的过程中才能被识别,也称它们为局部变量。用Dim或者Static关键字来声明它们。例如:Dim V1 As Integer或Static V1 As Integer( 1)过程内部使用的变量在过程结束之前,Dim语句一直保存着变量的值,也就是说,使用
18、Dim语句声明的变量在过程之间调用时会丢失数据。而用Static语句声明的变量则在模块内一直保留其值,直到模块被复位或重新启动。在非静态过程中,用Static语句来显式声明只在过程中可见的变量,但其存活期与定义了该过程的模块一样长。在过程中,对在过程之间调用时保留值的变量,用关键字Static来声明它的数据类型。在过程结束之前,清除静态变量的方法是:单击“运行”菜单“重新设置”命令。(2)模块内部使用的变量模块级变量对该模块的所有过程都可用,但对其他模块的代码不可用。可在模块顶部的声明段用Private关键字声明变量,从而建立模块级变量。例如:Private V1 As Integer在模块级
19、,Private和Dim之间没有什么区别,但Private更好些,因为很容易把它和Public区别开来,使代码更容易理解。(3)所有模块使用的变量为了使模块级的变量在其他模块也有效,可用Public关键字声明变量。公用变量中的值可用于应用程序的所有过程。和所有模块级变量一样,也在模块顶部的声明中来声明公用变量。例如:Public V1 As Integer用户不能在过程中声明公用变量,而在模块中声明的变量可用于所有模块。也可以用Static关键字来声明函数和子程序,以便在模块的生存期内保留函数和子程序内的所有局部变量。4数据库对象变量 Access建立的数据库对象及其属性,均可被看成是VBA程
20、序代码中的变量及其指定的值来加以引用。例如,Access中窗体与报表对象的引用格式为: Forms!窗体名称!控件名称.属性名称 Reports!报表名称!控件名称.属性名称 关键字Forms或Reports分别表示窗体或报表对象集合。感叹号分隔开对象名称和控件名称。“属性名称”部分缺省,则为控件基本操作。5数组数组是在有规则的结构中包含一种数据类型的一组数据,也称作为数组元素变量。数组变量由变量名和数组下标构成,通常用Dim语句来定义数组。(1)一维数组定义格式如下:Dim ( to ) As 缺省情况下,下标下限为0【例8.4】定义一维数组。Dim y (10) As Integer5数组
21、数组的下标也可以不从0开始定义,模块的顶部使用Option Base语句,将第一个元素的默认索引值从0改为其他值。【例8.5】声明一个有10个元素的数组变量y,类型为整型,其下标起始值设置成1。Option Base 1Dim y(10) As Integer声明的数组变量y有10个元素。因为Option Base语句将数组下标的起始值变成了1。5数组(2)多维数组多维维数指有多个下标的数组。在VBA中可以声明变量最多到60维。【例8.7】Dim T(3,2) As Integer定义了一个二维数组,数组名为T,类型为Integer,该数组有4行(03)3列(02),占据12(43)个整型变量
22、的空间,如图8-8所示。 第0列第1列第2列第0行T(0,0)T(0,1)T(0,2)第1行T(1,0)T(1,1)T(1,2)第2行T(2,0)T(2,1)T(2,2)第3行T(3,0)T(3,1)T(3,2)6变量标识命名法则在编写VBA程序代码时,会用到大量的变量名称和不同的数据类型。对于控件对象,可以用VBA的Set关键字将每个命名的控件对象指定为一个变量名称。目前,VB和VBA均推荐使用Hungarian符号法作为命名法则。该方法也被广泛用在C和C+等一些程序中。Hungarian符号法使用一组代表数据类型的码。用小写字母作为变量的第一个字符。例如,代表文本框的字首码是txt,那么文
23、本框变量名为txtName。7符号常量对于程序中经常出现的常量,以及难以记忆且无明确意义的数值,使用符号常量可使代码更容易读取与维护。常量是指在程序运行过程中始终固定不变的量。VBA的常量包括数值常量、字符常量、日期常量、符号常量、固有常量和系统定义常量等。符号常量是需要声明的常量,用Const语句来声明并设置其值。格式如下:Const 符号常量名称 = 常量值例:Const PI = 3.1415926。若是在模块的声明区中定义符号常量,则建立一个所有模块都可使用的全局符号常量。一般是Const前加上Global或Public关键字。例如:Global Const PI = 3.141592
24、6这一符号常量会涵盖全局或模块级的范围。8系统常量Access系统内部包含若干个启动时就建立的系统常量,有True、False、Yes、No、On、Off和Null等。在编码时可以直接使用。8.3.4 常用的标准函数在VBA中,除在模块创建中可以定义子过程与函数过程完成特定功能外,又提供了近百个内置的标准函数,可以方便完成许多操作。标准函数一般用于表达式中,有的能和语句一样使用。其使用形式如下:函数名(参数1,参数2,参数3,参数4,参数5)其中,函数名必不可少,函数的参数放在函数名后的圆括号中,参数可以是常量、变量或表达式,可以有一个或多个,少数函数为无参函数。关于常用函数部分,请参见第1章
25、小节函数部分。8.3.5 运算符和表达式在VBA编程语言中,提供了许多运算符来完成各种形式的运算和处理。根据运算不同,可以分成4种类型的运算符:算术运算符、关系运算符、逻辑运算符和连接运算符。表达式是各种数据、运算符、函数、控件和属性的组合,其运算结果是某个确定数据类型的值。表达式能实现数据计算、条件判断、数据类型转换等许多作用。关于运算符和表达式部分,请参见第1章小节部分。8.4 VBA程序流程控制语句 在VBA程序中,按语句代码执行的顺序可以分为顺序、选择和循环结构。顺序结构:按照语句顺序顺次执行。如赋值语句、过程调用语句。选择结构:又称为分支结构,根据条件选择执行路径。循环结构:重复执行
26、某一段程序语句。8.4.1 赋值语句赋值语句指定一个值或表达式给变量。赋值语句通常会包含一个等号“=”。语法形式如下:Let = 说明:赋值语句用于指定变量为某个值或某个表达式。用Let语句赋值,对应的数据类型为字符、数值类型等。Let通常可以省略。【例8.8】赋值语句示例。Dim y As Integer 定义一个变量为整型y=18 给y赋值18 8.4.2 选择结构语句 在解决一些实际问题时,往往需要按照给定的条件进行分析和判断,然后根据判断结果的不同执行程序中不同部分的代码,这就是选择结构。1.If条件语句(1)单分支结构 格式:If Then 功能:若为真时,执行,否则,执行If语句后
27、的语句。(1)单分支结构 【例8.9】 If xy Then t=x: x=y: y=t 如果x小于y,就把x和y交换1.If条件语句(2)双分支结构格式:If Then Else End If 功能:若为真时,执行,之后转向执行End If 后的语句;若为假时,由Else语句执行,没有Else语句,执行End If后的语句。(2)双分支结构 【例8.10】 电费的收费标准是100度以内(包括100度)0.48元/度,超过部分0.96元/度。编写程序,要求根据输入的任意用电量(度),计算出应收的电费。电费收费程序窗体如图所示。(2)双分支结构窗体中【计算】按钮的鼠标单击事件代码设计如下: Pr
28、ivate Sub cmd1_Click( ) Dim y as single 定义一个变量用于表示用电量 Dim p as single 定义一个变量用于表示费用 y = Val(Txt1.Value) Txt1为第1个文本框的名称,用来输入用电量 If y 100 Then p =(w - 100)* 0.96 + 100 * 0.48 Else p = w * 0.48 End If Txt2.Value = p Txt2为第2个文本框的名称,用来显示金额 End Sub(3)多分支结构格式:If Then ElseIf Then ElseIf Then Else End If功能:若为
29、真,则执行,之后转向执行End if 后的语句;否则,再判,为真时,执行,依次类推,当所有的条件都不满足时,执行。 (3)多分支结构【例8.11】成绩等级鉴定窗体如图所示,功能为:输入一个学生的一门课分数x(百分制),并根据成绩划分等级 当x90时,输出“优秀”; 当80 x90 时,输出“良好”; 当 70 x80 时,输出“中”; 当60 x70 时,输出“及格”; 当 x60 时,输出“不及格”。(3)多分支结构其中【确定】按钮的鼠标单击事件代码如下:Private Sub Cmd1_Click() 确定命令按钮单击事件 Dim score As single score = val(T
30、xt1.Value) Txt1为第1个文本框的名称,用来输入学生分数 If score = 90 Then Txt2.Value = 优秀 Txt2为第2个文本框的名称,用来显示等级 ElseIf score = 80 Then Txt2.Value= 良好 ElseIf score = 70 Then Txt2.Value = 中 ElseIf score = 60 Then Txt2.Value = 及格 Else Txt2.Value = 不及格 End IfEnd SubVBA提供了3个函数来完成相应的选择操作(1)IIf函数: IIf(条件式,表达式1,表达式2),该函数是根据条件式
31、的值来决定函数返回值。条件式的值为真(True),函数返回表达式1的值;条件式的值为假(False),函数返回表达式2的值。【例8.12】将变量a和b中值大的量存放在变量Max中。Max=IIf(ab,a,b)VBA提供了3个函数来完成相应的选择操作(2)Switch函数: Switch(条件式1,表达式1,条件式2,表达式2,条件式n,表达式n),该函数是分别根据条件式1、条件式2,直至条件式n的值来决定函数返回值。【例8.13】根据变量x的值来为变量y赋值。y=Switch(x0,1,x=0,0,x0,-1)VBA提供了3个函数来完成相应的选择操作(3)Choose函数: Choose(索
32、引式,选项1,选项2,选项n),该函数是根据索引项的值来返回列表中的某个值。索引式值为1,函数返回选项1的值;索引式值为2,函数返回选项2的值;以此类推。【例8.14】根据变量x的值来为变量y赋值。x=2 : m=5y=Choose(x,5,m+1,n)程序运行后,y的值为62. Select Case语句如果条件复杂,分支太多,使用If语句就会显得累赘,而且程序变得不易阅读。这时可使用Select Case语句来写出结构清晰的程序。Select Case语句可根据表达式的求值结果,选择几个分支中的一个执行。其语法形式如下:Select Case Case Case Case Else End
33、 Select2.Select Case语句Select Case 语句具有以下几个部分: 表达式:必要参数。可为任何数值表达式或字符串表达式 值1n:可以为单值或一列值(用逗号隔开),与表达式的值进行匹配。 如果“值”中含有关键字To,如 2 To 8,则前一个值必须是小的值(如果是数值,指的是数值大小;如果是字符串,则指字符排序),且的值必须介于两个值之间。如果中含有关键字Is,则的值必须为真。 语句1n+1:都可包含一条或多条语句。 如果有一个以上的Case子句与匹配,则VBA只执行第一个匹配的Case后面的语句。如果前面的Case子句与都不匹配,则执行Case Else子句中的。 可将
34、另一个Select Case语句放在Case子句后的语句中,形成Select Case语句的嵌套。2.Select Case语句【例8.15】用Select Case语句实现分数划分等级输出。 Select Case score 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 Select8.4.3 循环结构语句 在解决一些实际问题时,往往需要重复某些相同的操
35、作,即对某一语句或语句序列执行多次,解决这类问题要用到循环结构。VBA提供了多种循环结构语句。1.ForNext语句 ForNext循环语句能够重复执行程序代码区域特定次数,使用格式如下: For 循环变量=初值 To 终值 Step 步长 循环体 条件语句序列 Exit For 结束条件语句序列 Next 循环变量1.ForNext语句其执行步骤如下:循环变量取初值;循环变量与终值比较,确定循环是否进行: 步长0时 若循环变量值终值,循环结束,退出循环。 步长=0时 若循环变量值终值,一次也不执行循环。 步长=终值,循环继续,执行步骤;若循环变量值终值,循环结束,退出循环。执行循环体;循环变
36、量值增加步长(循环变量=循环变量+步长),程序跳转至。1.ForNext语句【例8.16】利用ForNext循环语句,求1+2+100之和。Dim n As integer, s As integer s=0 For n=1 to 100 s=s+n Next n Debug.Print s 在立即窗口中打印s的值2.DoLoop语句 用DoLoop语句可以定义要多次执行的语句块。也可以定义一个条件,当这个条件为假时,就结束这个循环。 DoLoop语句有以下两种格式。2.DoLoop语句 格式一Do While | Until Exit Do Loop Do WhileLoop循环语句 Do
37、WhileLoop循环语句,当条件结果为真时,执行循环体,并持续到条件结果为假或执行到选择Exit Do语句,结束循环。Do WhileLoop循环语句【例8.17】Do WhileLoop循环语句示例。程序段k=0Do While k=5 k=k+1Loop循环执行的次数为 。Do UntilLoop循环语句 Do UntilLoop循环语句,当条件结果为假时,执行循环体,并持续到条件结果为真或执行到选择Exit Do语句,结束循环。Do UntilLoop循环语句【例8.18】Do UntilLoop循环语句示例。 程序段 k=0 Do Until k=5 k=k+1 Loop以上循环的执
38、行次数是 次。2.DoLoop语句 格式二Do Exit Do Loop While|UntilDoLoop While循环语句 DoLoop While循环语句,程序执行时,首先执行循环体,然后再判断条件。当条件结果为真时,执行循环体,并持续到条件结果为假或执行到选择Exit Do语句,结束循环。程序流程图如图所示。DoLoop While循环语句【例8.19】DoLoop While循环语句示例。程序段 num=0 Do num=num+1 Debug.Print num Loop While num3运行程序,结果是 。DoLoop Until循环语句 DoLoop Until循环语句,
39、程序执行时,首先执行循环体,然后再判断条件。当条件结果为假时,执行循环体,并持续到条件结果为真或执行到选择Exit Do语句,结束循环,程序流程图如图所示。DoLoop Until循环语句【例8.20】Do Loop Until循环语句示例。程序段 num=0 Do num=num+1 Debug.Print num Loop Until num4运行程序,结果是 。3.WhileWend语句 ForNext循环,它适合于解决循环次数事先能够确定的问题。对于只知道控制条件,但不能预先确定需要执行多少次循环体的情况,我们可以使用While循环。 While语句格式如下: While 条件 循环体
40、 Wend3.WhileWend语句【例8.21】WhileWend语句示例。程序段x=1While x=500 then GoTo MlineNext iMline:Debug.print s在立即窗口中显示结果为528。8.5 面向对象程序设计的基本概念VBA程序设计是一种面向对象的程序设计。面向对象程序设计是一种系统化的程序设计方法,它基于面向对象模型,采用面向对象的程序设计语言编程实现。在VBA编程中,首先必须理解对象、属性、方法和事件。8.5.1 对象对象:对于任何可操作实体,例如数据表,窗体、查询、报表、数据访问页、宏、文本框、列表框、对话框和命令按钮等也都视为对象。8.5.2 属
41、性属性:每个对象都有自己的固有特征。对象的特征通过数据来描述,这称为对象的“属性”。在程序代码中,则通过赋值的方式来设置对象的属性,其格式为对象.属性 = 属性值【例8.23】 使用属性示例。Label1.Caption = 教师基本情况 设置标签Label1的标题属性为“教师基本情况”8.5.3 方法方法:每个对象都有自己的若干方法,从而构成该对象的方法集。可以把方法理解为内部函数,可以用来完成某种特定的功能。对象方法的调用格式为对象.方法 参数名表 说明:方括号内的内容是可选的,以下同此。【例8.24】 使用Debug对象的Print方法,输出表达式“2+3”的结果。Debug.Print
42、 2+3 输出2+3的结果8.5.3 方法Access中除数据库的7个对象外,还提供一个重要的对象:DoCmd对象。它的主要功能是通过调用包含在内部的方法实现VBA编程中对Access的操作。例如,利用DoCmd对象的OpenForm方法可以打开窗体“教师”,语句格式为DoCmd.OpenForm 教师DoCmd对象的方法大都需要参数,有些是必需的,有些是可选的,被忽略的参数取缺省值。例如,上述OpenForm方法有4个参数,见下面调用格式:DoCmd.OpenForm formname ,view,filtername,wherecondition8.5.3 方法其中只有formname(窗
43、体名称)参数是必需的。DoCmd对象还有很多方法,可以通过帮助文件查询使用。另外,对窗体、控件来说,还有SetFocus(获得控制焦点)、Requery(更新数据)等方法。8.5.4 事件 事件:对于对象而言,事件就是发生在该对象上的事情或消息。在Access系统中,不同的对象可以触发的事件不同。总体来说,Access中的事件主要有键盘事件、鼠标事件、窗口事件、对象事件和操作事件等。8.5.4 事件 【例8.25】 鼠标单击Command1命令按钮时,使标签label0的字体颜色变为红色。 鼠标的单击事件 Private Sub Command1_Click() label0.ForeColo
44、r = 255 标签label0的字体颜色设置为红色 End Sub 8.5.4 事件 【例8.26】 窗体加载时,窗体的标题设置为当前的系统日期。 Private Sub Form_Load() Me.Caption=Date() 窗体加载时,窗体的标题设置为当前的系统日期 End Sub8.6 VBA模块的创建 模块将数据库中的VBA过程和函数放在一起,作为一个整体来保存。利用VBA模块可以开发十分复杂的应用程序。 过程是用VBA语言的声明和语句组成的单元,作为一个命名单位的程序段,它可以包含一系列执行操作或计算值的语句和方法。一般使用的过程有两种类型:Sub(子程序)过程和Functio
45、n(函数)过程。8.6.1 VBA标准模块1.创建模块 操作步骤如下: (1)在数据库窗口中,单击“创建”选项卡“宏与代码”选项组“模块”,则在VBE编辑器中创建一个空白模块。(2)在模块代码窗口中输入模块程序代码。8.6.1 VBA标准模块2.确定数据访问模型 Access支持两种数据访问模型:传统的数据库访问对象DAO和ActiveX数据对象ADO。DAO的目标是使数据库引擎能够快速和简单地开发。ADO使用了一种通用程序设计模型来访问一般数据,而不是基于某一种数据引擎,它需要OLEDB提供对低层数据源的链接。OLEDB技术最终将取代以前的ODBC,就像ADO取代DAO一样。 8.6.1 V
46、BA标准模块3.模块的调用 模块的调用是对其中过程的使用。创建模块后,就可以在数据库中使用该模块中的过程了。模块的调用有以下两种方式:(1)直接调用 对于所建立的模块对象,可以直接通过模块名进行调用。(2)事件过程调用 事件过程的调用是将过程与发生在对象(如窗体或控件)上的事件联系起来,当事件发生后,相应的过程即被执行。8.6.2 Sub子过程的创建和调用1.子过程的定义 Sub过程是执行一系列操作的过程,在执行完成后不返回任何值,是能执行特定功能的语句块。Sub过程可以被置于标准模块和类模块中。 声明Sub过程的语法形式如下:Public|PrivateStatic Sub 子程序名(As
47、数据类型) Exit Sub End Sub8.6.2 Sub子过程的创建和调用【例8.27】创建一个过程swap,该过程的功能为将给定的两个参数x和y互换。Public Sub swap(x As Integer, y As Integer) Dim z As Integer z = x x = y y = zEnd Sub8.6.2 Sub子过程的创建和调用2. 子过程的创建 下面以创建例子过程swap为例,介绍子过程的创建。操作步骤: (1)打开数据库。 (2)单击“创建”选项卡“宏与代码”选项组“模块”。 (3)单击“插入”菜单“过程”命令,显示如图所示的“添加过程”对话框,并按照对话
48、框输入相应信息。 (4)单击“确定”按钮。 (5)此时在弹出的Visual Basic编辑器窗口中添加了一个名为swap的过程,并在该过程中输入如图所示的代码。8.6.2 Sub子过程的创建和调用3. 子过程的调用 子过程名 参数列表 或 Call 子过程名(参数列表)说明: (1)参数列表称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。 (2)调用时把实参值传递给对应的形参。其中值传递(形参前有ByVal说明)时实参的值不随形参的值变化而改变,而地址传递时实参的值随形参值的改变而改变。 (3)当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省。 (4)调用子过程的
49、形式有两种,用Call关键字时,实参必须加圆括号括起,反之则实参之间用“,”分隔。8.6.2 Sub子过程的创建和调用【例8.28】调用上面定义的swap子过程。操作过程如下:(1)添加过程Data_In_Out,实现数据的输入/输出,如图所示。(2)单击工具栏上的“保存”按钮,保存模块。(3)将光标位于Data_In_Out过程的任何位置,单击工具栏上的“运行子过程/用户窗体”按钮,在立即窗口中显示排序结果,如图所示。8.6.3 Function函数过程的创建和调用1. Function函数过程的定义 Function过程又称为函数,也是能执行特定功能的语句块。函数也是一种过程。在VBA中,
50、提供了大量的内置函数,编程时可以直接引用。但有时需要按自己的要求定义函数,不过它是一种特殊的、能够返回值的Function过程。有没有返回值,是Sub过程和Function过程之间最大的区别。1. Function函数过程的定义声明函数的语法形式如下:Public | Private Static Function 函数名(As 数据类型)As 返回值数据类型 函数名= Exit Function 函数名=End Function说明:使用Public、Private和Static关键字的意义与Sub过程相同。1. Function函数过程的定义【例8.29】自定义一个函数A,功能为求圆面积。