第9章 VBA与模块课件.ppt
数据库案例教程数据库案例教程第第9章章 VBA与模块与模块 VBA的各种语句的各种语句 过程与模块过程与模块 面向对象程序设计主要概念面向对象程序设计主要概念 VBA数据库编程数据库编程 VBA语言基础语言基础学习目标:学习目标: 从概念上掌握模块、模块的事件过程、调用和参数传递、VBA程序的设计基础 ;会为某个系统创建类模块 ,并将系统中的宏转化为模块 ,能为系统中的窗体和报表设计常用事件并编写含有各种流程结构的模块。v 9.1 VBA简介v VBA是事件驱动的,简单来说,它等待能激活它的事件发生,比如说当鼠标被点击,一个键被按下或者一个表单被打开,等等。当事件发生时,VBA调用Windows操作系统的功能去实现“模块”中设定好的语句。这样看来,“模块”和“宏”的使用是差不多的。其实Access中的“宏”也可以存成“模块”,这样运行起来的速度还会更快。“宏”的每个基本操作在VBA中都有相应的等效语句,使用这些语句就可以实现所有单独“宏”命令。v 模块是书写和存放VBA代码的地方。它是一个代码容器,可以将一段具备特殊功能的代码放入模块中,当指定的事件激活模块时,其中包含的代码对应的操作就会被执行。模块有两种形态:v 1标准模块v 简称“模块”,或称为“一般模块”。大多数模块都是标准模块,其中包含的代码和特定的数据库对象并无关联,当数据库中对象被移动时,模块还在原数据库中不动。v 标准模块包含与任何其他对象都无关的常规过程,以及可以从数据库任何位置运行的经常使用的过程。标准模块和与某个特定对象无关的类模块的主要区别在于其范围和生命周期。在没有相关对象的类模块中,声明或存在的任何变量、常量的值都仅在该代码运行时、仅在该对象中是可用的。2类模块 可以包含新对象定义的模块。一个类的每个实例都新建一个对象。在模块中定义的过程成为该对象的属性和方法。类模块可以单独存在,也可以与窗体和报表一起存在。和窗体、报表相关联的分别称为窗口(form)模块和报表(report)模块,这种模块中的代码和特定的报表或窗口相关联。当对应的窗口或报表被移动到另一个数据库时,模块和其中代码通常也会跟着被移动。v 窗体模块 (窗体模块:该模块中包含在指定的窗体或其控件上事件发生时触发的所有事件过程的代码。)和报表模块 (报表模块:该模块中包含在指定报表或其控件上事件触发时的所有事件过程的代码。)都是类模块,它们各自与某一特定窗体或报表相关联。窗体模块和报表模块通常都含有事件过程 (事件过程:自动执行的过程,以响应用户或程序代码启动的事件或系统触发的事件。),过程的运行用于响应窗体或报表上的事件。可以使用事件过程来控制窗体或报表的行为,以及对它们操作的响应,如单击命令按钮。9.1.1 VBA程序初识 VBA是Visual Basic for Application的缩写,是微软Office系列软件的内置编程语言,与Visual Basic具有相同的语言功能。在VBA中,程序是由过程组成的,过程由根据VBA规则书写的指令组成。一个程序包括语句、变量、运算符、函数、数据库对象、事件等基本要素。在Access程序设计中,当某些操作不能用其他Access对象实现或实现起来很困难时,就可以利用VBA语言编写代码,完成这些复杂任务。 9.1.2 VBA程序编辑环境 Access所提供的VBA开发界面成为VBE(Visual Basic Editor,VB编辑器),它为VBA程序的开发提供了完整的开发和调试工具。VBE就是VBA的代码编辑器,在Office的每个应用程序中都存在。可以在其中编辑VBA代码,创建各种功能模块。v1. 开启VBE有多种方式来打开VBE:v在Access应用程序中,在菜单栏里单击【工具】 | 【宏】| Visual Basic 编译器,打开VBE。v在Access应用程序中,在菜单栏里单击【插入】|【模块】或者【类模块】,打开VBE,并且直接在其中创建一个模块或类模块。v刚打开数据库时,在对象栏中选中【模块,然后选择【新建】,打开VBA,并在其中生成一个新的空标准模块。v 2. VBE窗口组成VBE窗口可大体分为六部分:v (1)菜单栏:VBE中所有的功能都可以在菜单栏中实现。v (2)帮助搜索:在图9-3中标号为2的位置,可以输入你所要查询的知识点,就会激活Visual Basic帮助,如图9-4中,就是在搜索栏中输入“属性”,按回车后,激活了Visual Basic帮助窗口,并把搜索到的相关条目列出,你再点击感兴趣的条目,就会打开Miscrosoft Visual Basic帮助文档,示条目的具体内容。帮助搜索和帮助文档 v (3)工具栏:工具栏中包含各种快捷工具按钮,根据功能类型的不同 各属于不同分组。比如:和代码编辑相关的工具按钮就属于“编辑”工具 和调试相关的工具按钮属于“调试”工具。v (4)工程资源管理器:用来显示和管理当前数据库中包含的工程。刚打开VBE时,会自动产生一个与当前Access数据库同名的空工程,可以在其中插入模块。一个数据库可以对应多个工程,一个工程可以包含多个模块。v 工程资源管理器窗口标题下面有三个按钮,分别为:“查看代码” ,显示代码窗口,以编写或编辑所选工程目标代码;“查看对象” ,显示选取的工程,可以是文档或是 UserForm 的对象窗口;“切换文件夹” ,当正在显示包含在对象文件夹中的个别工程时可以隐藏或显示它们。v (5)属性窗口:用来显示所选定对象的属性,同时可以更改对象的属性。v “对象下拉列表框”是用来列出当前所选的对象,只能列出现用窗体中的对象。如果选取了好几个对象,则以第一个对象为准。v “属性列表”:v “按字母序”选项卡 按字母顺序列出所选对象的所有属性。v “按分类序”选项卡 根据性质列出所选对象的所有属性。可以折叠这个列表,这样将只看到分类;也可以扩充一个分类,并可以看到其所有的属性。当扩充或折叠列表时,可在分类名称的左边看到一个加号 (+)或减号(-)图标。 v (6)主显示区域:用来显示当前操作所对应的主窗体。一般情况显示的是“代码窗口”,在其中可以编辑模块代码 9.2 VBA语言基础v 9.2.1 数据类型v 为了不同的操作需要,VB构造了多种数据类型,用于存放不同类型的数据:v (1)Byte 变量存储为单精度型、无符号整型、8 位(1个字节)的数值形式。Byte 数据类型在存储二进制数据时很有用。v (2)Boolean 变量存储只能是 True 或是 False。Boolean 变量的值显示为 True 或 False(在使用 Print 的时候),或者 #TRUE# 或 #FALSE#(在使用 Write # 的时候)。使用关键字 True 与 False 可将 Boolean 变量赋值为这两个状态中的一个。v 当转换其他的数值类型为 Boolean 值时,0 会转成 False,而其他的值则变成 True。当转换 Boolean 值为其他的数据类型时,False 成为 0,而 True 成为 -1。 v (3)Imteger,Long用来存储整形值。v (4)Single,Double用来存储浮点型值。v (5)Currency 变量一般用来存储货币型数值,整型的数值形式,然后除以 10,000 给出一个定点数,其小数点左边有 15 位数字,右边有 4 位数字。Currency 的类型声明字符为at号 ()。v (6)Decimal一般用来存储科学计数法表示的数值。v (7)Date用来存储日期值,时间可以从 0:00:00 到 23:59:59。任何可辨认的文本日期都可以赋值给 Date 变量。日期文字须以数字符号 (#) 扩起来,例如,#January 1, 1993# 或 #1 Jan 93#。 Date 变量会根据计算机中的短日期格式来显示。时间则根据计算机的时间格式(12 或 24 小时制)来显示。 当其他的数值类型要转换为 Date 型时,小数点左边的值表示日期信息,而小数点右边的值则表示时间。午夜为 0 而中午为 0.5。负整数表示 1899 年 12 月 30 日之前的日期。v (8)Object变量用来存储对象。v (9)String变量用来存储字符串,字符串有两种:变长与定长的字符串。v (10)Variant 数据类型是所有没被显式声明(用如 Dim、Private、Public等语句)为其他类型变量的数据类型。Variant 数据类型并没有类型声明字符。Variant 是一种特殊的数据类型,除了定长 String 数据及用户定义类型外,可以包含任何种类的数据。Variant 也可以包含 Empty、Error、Nothing 及 Null等特殊值。v (11)可以是任何用 Type 语句定义的数据类型。用户自定义类型可包含一个或多个某种数据类型的数据元素、数组或一个先前定义的用户自定义类型。 9.2.2 常量与变量v 1常量v 常量是指在程序运行时其值不会发生变化的数据,VBA的常量有直接常量和符号常量两种表示方法。直接常量就是直接表示的整数、单精度数和字符串,如1234、17.28E+9、“StuID”等。 符号常量就是用符号表示常量,符号常量有用户定义的符号常量、系统常量和内部常量3种。v (1)用户定义的符号常量v 在VBA编程过程中,对于一些使用频度较多的常量,可以用符号常量形式来表示。符号常量使用关键字Const来定义,格式如下:v Const符号常量名称=常量值v (2)系统常量v 系统常量是指Access系统启动时建立的常量,有True、False、Yes、No、On、Off和Null等,编写代码时可以直接使用。v (3)内部常量v VBA提供了一些预定义的内部符号常量,它们主要作为DoCmd命令语句中的参数。内部常量以前缀ac开头,如acCmdSaveAs。v v 2变量v 变量是指程序运行时值会发生变化的数据。在程序运行时数据是在内存中存放的,内存中的位置是用不同的名字表示的,这个名字就是变量的名称,该内存位置上的数据就是该变量的值。v (1)变量的命名规则v 在为变量命名时,应遵循以下规则:v 变量名只能由字母、数字和下划线组成。v 变量名必须以字母开头。v 不能使用系统保留的关键字,例如Sub,Function 等。长度不能超过255个字符。v 不区分英文大小写字母,如StuID、sutid和stuID表示同一个变量。v (2)变量类型的定义v 根据变量类型定义的方式,可以将变量分为隐含型变量和显示变量两种形式。 v 隐含型变量v 利用将一个值指定给变量名的方式来建立变量,如v NewVar=127v 该语句定义一个Variant类型变量NewVar,值127。在变量名后添加不同的后缀表示变量的不同类型。v 例如,下面语句建立了一个整数数据类型的变量。v NewVar=23v 当在变量名称后没有附加类型说明字符来指明隐含变量的数据类型时,默认为Variant数据类型。v 显式变量v显式变量是指在使用变量时要先定义后使用。例如,C、C+和Java语言中都要求在使用变量前先定义变量。v定义显式变量的方法如下:vDim 变量名As 类型名v 在一条Dim语句中可以定义多个变量,例如,上例中的语句可以改写如下。v Dim Var1,Var2 as Stringv在模块设计窗口的顶部说明区域中,可以加入Option Explict语句来强制要求所有变量必须定义才能使用。v(2)数据库对象变量v Access中的数据库对象及其属性,都可以作为VBA程序代码中的变量及其指定的值来加以引用。v Access中窗体对象的引用格式为:v Forms!窗体名称!控件名称.属性名称v Access中报表对象的引用格式为:v Reports!报表名称!控件名称.属性名称v关键字Forms或Reports分别表示窗体或报表对象集合。感叹号“!”分隔开对象名称和控件名称。如果省略了“属性名称”部分,则表示控件的基本属性。v 如果对象名称中含有空格或标点符号,就要用方括号把名称括起来。v 9.2.3 数组v 数组是一组具有相同属性和相同类型的数据,并用统一的名称作为标识的数据类型,这个名称称为数组名,数组中的每个数据称为数组元素,或称为数据元素变量。数组元素在数组中的序号称为下标,数组元素变量由数组名和数组下标组成,例如,A(1)、A(2)、A(3)表示数组A的3个元素。v 数组在使用之前也要进行定义,定义数组的格式如下:v 一维数组的定义格式:v Dim 数组名(下标下限 to 下标上限) As 数据类型v 二维数组的定义格式:v Dim 数组名(下标下限 to 下标上限, 下标下限 to 下标上限) As 数据类型v 除此之外,还可以定义多维数组,对于多维数组应该将多个下标用逗号分隔开,最多可以定义60维。缺省情况下,下标下限为0,数组元素从“数组名(0)”至“数组名(下标上限)”。如果使用to选项,则可以使用非0下限。 v在开发过程中,如果预先不知道数组需要定义多少元素时,动态数组是很有用的。当不需要动态数组包含的元素时,可以使用ReDim将其设为0个元素,释放该数组占用的内存。v可以在模块的说明区域加入Global或Dim语句,然后在程序中使用ReDim语句,以说明动态数组为全局的和模块级的范围。如果以Static取代Dim来说明数组,数组可在程序的示例间保留它的值。v数组的作用域和生命周期的规则和关键字的使用方法与传统变量的用法相同。9.2.4 用户自定义数据类型v用户可以使用Type语句定义任何数据类型。用户自定义数据类型可以包括数据类型数组,或当前定义的用户自定义类型的一种或多种元素。v语法:v Private | Public Type 类型名v 元素名 As 数据类型v 元素名 As 数据类型 v vEnd Typev v例如:定义班级中学生的基本情况数据类型如下:v vPublic Type Studentsv Name As String(8)vAge As IntegervEnd Typev v声明变量:v vDim Student As Studentsv v引用数据:v vStudent.Name=”张三”vStudent.Age=159.2.5 运算符和表达式v在VBA编程语言中,可以将运算符分为算术运算符、关系运算符、逻辑运算符和连接运算符4种类型。不同的运算符用来构成不同的表达式,来完成不同的运算和处理。表达式是由运算符、函数和数据等内容组合而成的,根据运算符的类型可以将表达式分为算数表达式、关系表达式、逻辑表达式和字符串表达式4种类型。v v(1)算术运算符v 算术运算符用于数值的算术运算,VBA中的算术运算符有7个 v算术运算符之间存在优先级,优先级是决定算术表达式的运算顺序的原则,算术运算符优先级从高到低依次为乘幂、乘除法、整数除法、求模和加减法。由算术运算符、数值、括号和正负号等构成的表达式称为算术表达式。在算术表达式中,括号和正负号的优先级比算术运算符要高,括号比正负号的优先级高。v(2)关系运算符v 关系运算符用来表示两个值或表达式之间的大小关系,从而构成关系表达式。6个关系运算符的优先级是相同的,如果它们出现在同一个表达式中,按照从左到右的顺序依次运算。但关系运算符比算术运算符的优先级低。 如表9. 3示。关系运算的结果为逻辑值:真(True)和假(False)。 v (3)使用逻辑运算符可以对两个逻辑量进行逻辑运算,其结果仍为逻辑值真(True)或假(False)v 逻辑运算符的优先级低于关系运算符,常用的3个逻辑运算符之间的优先级由高到低依次为:非运算Not), 与运算符(And),或运算符(Or)。v (4)连接运算符v 连接运算符具有连接字符串的功能。在VBA中有“&”和“+”两个运算符。v “&”运算符用来强制两个表达式作字符串连接。v “+”运算符是当两个表达式均为字符串数据时,才将两个字符串连接成一个新字符串。9.2.6 常用标准函数v 在VBA中提供了近百个内置的标准函数,用户可以直接调用标准函数来完成许多操作。标准函数的调用形式如下:v 函数名(参数表列)v 下面按分类介绍一些常用标准函数的使用。v 1数学函数v 数学函数用来完成数学计算功能。 v 2字符串函数v 字符串函数完成字符串处理功能。主要包括以下函数:v (1)字符串检索函数v (2)字符串长度检测函数v (3)字符串截取函数v 函数格式:Left(字符串表达式,N)v Right(字符串表达式,N)v Mid(字符串表达式,N1,N2)v 函数功能:Left函数可以从字符串左边起截取N个字符。Right函数可以从字符串右边起截取N个字符。Mid函数可以从字符串左边第N1个字符起截取N2个字符。v 参数说明:如果N值为0,Left函数和Right函数将返回零长度字符串。如果N大于等于字符串的字符数,则返回整个字符串。对于Mid函数,如果N1值大于字符串的字符数,返回零长度字符串。如果省略N2,返回字符串中左边起第N1个字符开始的所有字符。v (4)生成空格字符函数v 函数格式:Space(数值表达式)v 函数功能:Space函数可以返回数值表达式的值指定的空格字符数。v (5)删除空格函数v 函数格式:LTrim(字符串表达式)vRTrim(字符串表达式)vTrim(字符串表达式)v 函数功能:LTrim函数可以删除字符串的开始空格。RTrim函数可以删除字符串的尾部空格。Trim函数。v 可以删除字符串的开始和尾部空格。 v 3日期/时间函数v 日期/时间函数的功能是处理日期和时间。主要包括以下函数:v (1)获取系统日期和时间函数v 函数格式:Datev Timev Nowv 函数功能:Date函数可以返回当前系统日期。Time函数可以返回当前系统时间。Now函数可以返回当前系统日期和时间。v (2)截取日期分量函数v 函数格式:Year(日期表达式)v Month(日期表达式)v Day(日期表达式) v Weekday(日期表达式,W) v (3)截取时间分量函数v函数格式:Hour(时间表达式) v Minute(时间表达式)v Second(时间表达式)v函数功能:Hour函数可以返回时间表达式的小时数(0-23)。Minute函数可以返回时间表达式的分钟数(0-59)。Second函数可以返回时间表达式的秒数(059)。v(4)日期/时间增加或减少一个时间间隔vDateAdd(间隔类型,间隔值,表达式)v(5)计算两个日期的间隔函数vDateDiff(间隔类型,日期1,日期2)v(6)返回日期指定时间部分函数vDatePart(间隔类型,日期)v(7)返回包含指定年月日的日期函数vDateSerial(年值,月值,日值)v4类型转换函数v 类型转换函数可以将数据类型转换成指定类型。下面介绍一些类型转换函数。v(1)字符串转换字符代码函数v函数格式:Asc(字符串表达式)v函数功能:Asc函数可以返回字符串首字符的ASCII值。v(2)字符代码转换字符函数v函数格式:Chr(字符代码)v (3)数字转换成字符串函数v 函数格式:Str(数值表达式)v (4)字符串转换成数字函数v 函数格式:Val(字符串表达式) v 5验证函数v Access提供了一些对数据进行校验的函数 v 6输入框函数v 输入框函数用于在一个对话框中显示提示,等待用户输入正文并按下按钮,然后返回包含文本框内容的数据信息。v 函数格式:v InputBox(Prompt,Titlel(,Default,Xpos,Ypos,Helpfile,Context)v7消息框函数v 消息框用于在对话框中显示消息,等待用户单击按钮,并返回一个整型值指示用户单击了哪一个按钮。v函数格式:vMsgBox(Prompt,Buttons,Title,Helpfile,Context)9.3 VBA语句v一个程序由多条不同功能的语句组成,每条语句能够完成某个特定的操作。v在VBA程序中,按照功能的不同将程序语句分为声明语句和执行语句两类。声明语句用于定义变量、常量或过程。执行语句用于执行赋值操作、调用过程和实现各种流程控制。v 执行语句可以根据流程的不同分为顺序结构、条件结构和循环结构3种。顺序结构是按照语句的先后顺序依次执行。条件结构是根据条件选择执行不同的分支语句,又称为选择结构。循环结构是根据某个条件重复执行某一段程序语句。9.3.1 语句书写规则v(1)源程序不分大小写,英文字母的大小写是等价的(字符串除外)。但是为了提高程序的可读性,VBA编译器对不同的程序部分都有默认的书写规则,当程序书写不符合这些规则时,编译器会自动进行转换。例如,关键字默认首字母大写,其他字母小写。v(2)通常一个语句写在一行,但一行最多允许255个字符。当语句较长,一行写不下时,可以用续行符“_”将语句连续写在下一行。v(3)如果一条语句输入完成,按回车后该行代码呈红色,说明该行语句有错误,应及时修改。9.3.2 声明语句v声明语句用于命名和定义常量、变量、数组和过程,同时也定义了它们的生命周期与作用范围。v下面讲解VBA变量的声明v1.Dim 语句来声明变量v通常会使用 Dim 语句来声明变量。一个声明语句可以放到过程中以创建属于过程的级别的变量。或在声明部分可将它放到模块顶部,以创建属于模块级别的变量。v下面的示例创建了变量 strName 并且指定为 String 数据类型。vDim strName As Stringv 2.使用 Public 语句v 可以使用 Public 语句去声明公共模块级别变量。v Public strName As Stringv 公有变量可用于工程中的任何过程。如果公有变量是声明于标准模块或是类模块中,则它也可以被任何引用到此公有变量所属工程的工程中使用。v 3.使用 Private 语句v 可以使用 Private 语句去声明私有的模块级别变量。v Private MyName As Stringv 私有变量只可使用于同一模块中的过程。v 注意 在模块级别中使用 Dim 语句与使用 Private 语句是相同的。不过使用 Private 语句可以更容易的读取和解释代码。v4.使用 Static 语句v当使用 Static 语句取代 Dim 语句时,所声明的变量在调用时仍保留它原先的值。v5.使用 Option Explicit 语句v在 Visual Basic 中可以简单地通过一个赋值语句来隐含声明变量。所有隐含声明变量都为 Variant 类型,而 Variant 类型变量比大多数其它类型的变量需要更多的内存资源。如果显示地声明变量为指定的数据类型,则应用程序将更有效。显示声明所有变量减少了命名冲突以及拼写错误的发生率。v 6.为自动化声明一个对象变量v 当使用一个应用程序去控制另外一个应用程序的对象时,应该设置一个对于其它应用程序的类型库的引用。若设置一个引用,则可以根据它们最常指定的类型来声明对象变量。例如,如果是在 Microsoft Word 中,当对 Microsoft Excel 类型库做一引用设置时,可以在 Microsoft Word 中声明 Worksheet 类型的变量来表示 Microsoft Excel 中的 Worksheet 对象。v 如果使用其它的应用程序去控制 Microsoft Access 对象,在多数情况下,可以根据它们最常指定的类型来声明对象变量。也可以使用关键字 New 去自动生成一个对象的新实例。然而,可能要指示它是 Microsoft Access 对象。例如,当在 Microsoft Visual Basic 里面声明一个对象变量去表示 Microsoft Access form 时,必须区别它是 Microsoft Access Form 对象或是 Visual Basic Form 对象。 9.3.3 赋值语句v赋值语句是为变量指定一个值或表达式。v 语句格式:Let 变量名=值或表达式v 其中,Let为可选项,可以省略。v如a=123;form1.caption=”我的窗口;v对对象赋值可以用set myobject:=object 或myobject : =object9.3.4 流程控制语句v 1顺序结构v 顺序结构是结构化程序设计中最常见的程序结构,它按代码从上到下顺序依次执行关键字控制下的代码。v 另外,在顺序结构中可使用WithEnd With对同一对象执行一系列语句,这些语句按顺序执行,并可省略对象名。该关键字的语法格式如下所示。v With 对象名v Commandsv End Withv 2选择结构v 选择结构的程序根据条件式的值来选择程序运行的语句 v 1)If语句v If 条件表达式1 Thenv 条件表达式1为真时要执行的语句v Else If 条件表达式2 Thenv 条件表达式1为假,并且条件表达式2为真时要执行的语句v End If语句v 2)Select Case语句v Select Case语句是多分支选择语句,即可根据测试条件中表达式的值来决定执行几组语句中的依据。使用格式如下:v Select Case 表达式v Case 表达式1v 表达式的值与表达式1的值相等时执行的语句v Case 表达式2v 表达式的值介于表达式2和表达式3之间时执行的语句v Case Elsev 上述情况均不符合时执行的语句v End Selectv 3)函数v 除了以上两种方式外,VBA还提供了3个函数完成相应的操作。v IIf函数v IIf函数的调用格式如下:v IIf(条件式,表达式1,表达式2)v 它的跳转由最左边的“条件式”控制,当条件式为真(True)时,函数返回表达式1的值;当条件式为假(False)时,函数返回表达式2的值。v Switch函数v Switch函数的调用格式是:v Switch(条件式1,表达式1,条件式2,表达式2,条件式n,表达式n)v 该函数根据条件式1至条件式n从左到右来决定函数返回值,表达式在第一个相关的条件式为True时作为函数返回值返回。条件式和表达式必须成对出现,否则会出错。v Chosse函数v Chosse函数的调用格式如下:v Chosse(索引式,选项1,选项2,选项3 ,选项n)v 3循环结构v 循环结构使得若干语句重复执行若干次,实现重复性操作。在程序设计中,经常需要用到循环控制。 v 1)Do语句v Do语句根据条件判断是否继续进行循环操作。用在事先不知道程序代码需要重复多少次的情况下。v Do语句语法格式主要有以下4种:v 格式一:v Do While 条件表达式v 语句组1v Exit Dov 语句组2v Loopv2)For语句v For语句可以以指定次数来重复执行一组语句,这是最常用的一种循环控制结构。其语法结构如下:vFor 循环体变量=初值 To 终值Step 步长v 语句组1vExit Forv 语句组2vNext9.4 VBA过程与模块v 9.4.1 过程v 过程是VBA程序代码的容器,是程序中的若干较小的逻辑部件,每种过程都有其独特的功能。过程可以简化程序设计任务,还可以增强或扩展Visual Basic的构件。另外,过程还可用于共享任务或压缩重复任务,如减少频繁运算等。过程是由Sub和End Sub语句包含起来的VBA语句其格式如下:v Private|Public|Friend Sub 子过程名(参数列表)v v Exit Subv v End Sub9.4.2 函数v 函数是一种能够返回具体值的过程(如计算结果)。在Access中,包含了许多内置函数,如字符串函数Mid()、统计函数Max()等。除此之外,用户也可以根据需要创建自定义函数。函数有返回值,可以在表达式中使用。函数过程以关键字“Function”开始,并以“End Function”语句结束。 v 其格式如下:v Private|PublicStaticFunction 函数名(参数行)As 数据类型v v Exit Functionv v End Functionv 可以在函数和子过程定义时使用Public、Private或Static前缀来声明子过程和函数的作用范围。9.4.3 模块v模块作为Access的对象之一,主要用来存放用户编写的VBA代码,如同窗体是存放控件对象的容器一样,模块是代码的容器。v整个模块窗口分为两个部分:通用区和过程区 9.4.4 变量的作用域与生存期v1.变量的作用域v变量定义的位置不同,则其作用的范围也不同,这就是变量的作用域。v根据变量的作用域的不同,可以将变量分为局部变量、模块变量和全局变量3类。v v 局部变量v 局部变量是指定义在模块过程内部的变量,在子过程或函数过程中定义的或不用DimAs关键字定义而直接使用的变量,这些都是局部变量,其作用的范围是其所在的过程。v 模块变量v 模块变量是在模块的起始位置、所有过程之外定义的变量。运行时在模块所包含的所有子过程和函数过程中都可见,在该模块的所有过程中都可以使用该变量,用DimAs关键字定义的变量就是模块变量。v 全局变量v 全局变量就是在标准模块的所有过程之外的起始位置定义的变量,运行时在所有类模块和标准模块的所有子过程与函数过程中都可见,在标准模块的变量定义区域,用下面的语句定义全局变量:v Public 全局变量名 As 数据类型v 2.变量的生命周期v 定义变量的方法不同,变量的存在时间也不同,称为持续时间或生命周期。变量的持续时间是从变量定义语句所在的过程第一次运行到程序代码执行完毕并将控制权交回调用它的过程为止的时间。按照变量的生命周期,可以将局部变量分为动态局部变量和静态局部变量。v 动态局部变量v 动态局部变量是以DimAs语句说明的局部变量,每次子过程或函数过程被调用时,该变量会被设定为默认值。v 数值数据类型为0,字符串变量则为空字符串(“ ”)。这些局部变量与子过程或函数过程持续的时间是相同的。v 静态局部变量9.5 面向对象程序设计vVBA不仅支持结构化的编程技术,更能很好的使用于面向对象的编程技术(Object Oriented Programming,OOP)。面向对象的程序设计以对象为核心,以事件作为驱动,可以大提高程序的设计效率。9.5.1 类和对象v 客观世界里的任何实体都可以看作是对象。对象可以是具体的物,也可以指某些概念。例如一台计算机、一个相机、一个窗体、一个命令按钮等都可以作为对象。每个对象都有一定的状态,对一个窗体的大小、颜色、边框、背景、名称等。每一个对象也有自己的行为,如一个命令按钮的可以进行单击、双击等。v 使用面向对象的方法解决问题的首要任务是从客观世界里识别出相应的对象,并抽象出为解决问题所需要的对象属性和对象方法。属性用来表示对象的状态,方法用来描述对象的行为。v 类是客观对象的抽象和归纳,是对一类相似对象的性质描述,这些对象具有相同的性质:相同种类的属性以及方法。类好比是一类对象的模板,有了类定义后,基于类就可以生成这类对象中任何一个对象。9.5.2 对象的属性v 属性是对象所具有的物理性质及其特性的描述,通过设置对象的属性,可以定义对象的特征或某一方面的状态。如一个命令按钮的大小、标题、标题字号的大小、 按钮的位置等就是这个命令按钮的属性。 v 在VBA代码中引用对象的属性的格式为:v 对象名属性名v 例如将文本框Text1的值赋给变Name。v Name=MeText1Valuev 如将Command1的标题设置为“确定”。v Command1Caption=“确定”9.5.3 对象的方法v方法用来描述一个对象的行为,对象的方法就是对象可以执行的操作。如命令按钮的单击事件,双击事件,按下鼠标和释放鼠标等事件。v在VBA代码中引用对象方法的格式为:v对象名方法名(参数1,参数2) 9.5.4 对象的事件v 1事件v 事件是Access预先定义好的,能被对象识别的动作。事件作用于对象,对象识别事件并作出相应的反应,如单击事件(Click)、双击事件(DblClick)、移动鼠标事件(MouseMove)等都能引起对象作出操作。v 事件是固定的,由系统定义好的,用户不能定义新的事件,只能引用。v 2事件过程v 事件过程是为事件的响应编写的一段程序,又称为事件响应代码。当对象的某一个事件被触发时,就会自动执行事件过程中的程序代码,完成相应的操作。v 事件的处理遵循独立性原则,即处个对象识别并处理属于自己的事件。例如,当单击窗体中的一个命令按钮时,将引发命令按钮的“单击(Click)”事件,而不会引发窗体的单击事件,也不会引发别的命令按钮的单击事件。如果没有指定命令按钮“单击(Click)”事件代码,该事件将不会有任何反应。v3窗体事件的触发顺序vAccess窗体本身内置了许多事件,这些事件会被用户的动作所触发,且用户的一个动作可能触发窗体的多个事件。事件被触发是有先后顺序的,v1)窗体第一次打开时依次触发的事件v2)关闭窗体时依次触发的事件v3)插入数据时依次触发的事件v4)删除数据时依次触发的事件v5)更新数据依次触发事件9.6 VBA数据库编程v要想快速、有效地管理好数据,开发出更具实用价值的Access数据库应用程序,应当了解和掌握VBA的数据库编程方法。在VBA中主要提供了3种数据库访问接口:v(1)开放数据库互联应用编程接口v(2)数据访问对象v(3)Active数据对象9.6.1 ADO数据访问接口v数据访问对象(DAO)是VBA语言提供的一种数据访问接口。包括数据库、表和查询的创建等功能,通过运行VBA程序代码可以灵活地控制数据访问的各种操作。v当用户在Access模块设计中要使用DAO的访问对象时,首先应该增加一个对DAO库的引用。Access 2010的DAO引用库为DAO3.6,其引用设置方法为:先进入VBA编程环境,即打开VBE窗口,单击菜单栏中的“工具”,单击“工具”菜单中的“引用”项,弹出“引用”对话框,如图9-7所示,从“可使用的引用”的列表项中,选中“Microsoft DAO 3.6 Object Library”项,然后,单击“确定”按钮 9.7 VBA程序运行错误处理与调试v 在编写VBA程序代码时,程序错误是不可避免的。VBA中提供On Error GoTo语句进行程序错误处理。v On Error GoTo语句的语法如下:v On Error GoTo 标号:在程序执行过程中,如果发生错误将转移到标号位置执行错误处理程序。v On Error Resume Next v On Error GoTo 0关闭了错误处理,当错误发生时会弹出一个出错信息提示对话框。v 在VBA编程语言中,除On Error Goto语句外,还提供了一个对象Err、一个函数Errors()和一个语句Error来帮助了解错误信息。v 1设置断点v 断点就是在过程的某个特定语句上设置一个位置点以中断程序的执行。设置和使用断点是程序调试的重要手段。v 一个程序中可以设置多个断点。在设置断点前,应该先选择断点所在的语句行,然后设置断点。在VBE环境里,设置好的“断点”行是以“酱色”亮条显示,如图8.18所 v 设置和取消断点的4种方法:v (1)单击“调试”工具栏中的“切换断点”按钮,可以设置和取消断点。v (2)执行“调试”菜单中的“切换断点”命令,可以设置和取消断点。v (3)按“F9”键,可以设置和取消断点。v (4)用鼠标单击行的左端,可以设置和取消断点。v 2调试工具的使用v 在VBE环境中,执行“视图”菜单的级联菜单“工具栏”中的“调试”命令,可以打开“调试”工具栏,或用鼠标右键单击菜单空白位置,在弹出快捷菜单中选择“调试”选项也可以打开“调试”工具栏 v 3使用调试窗口v 在VBA中,用于调试的窗口包括本地窗口、立即窗口、监视窗口和快速监视窗口。v (1)本地窗口v 单击调试工具栏上的“本地窗口”按钮 ,可以打开本地窗口,该窗口内部自动显示出所有在当前过程中的变量声明