2016计算机应用技术-Access(邮电版)
:实验9 Access 宏
课程教案
课题: 理论课 授课类型 第10章 模块与VBA程序
(1)
实验9 Access 宏 第14周第1-4节 授课时间 课时: 2+2
教学目标:了解模块的概念;掌握模块的基本操作;掌握VBA的基础知识。 教学要点:模块的概念与基本操作,VBA的基础知识。
教学重点:VBA的基础知识。
教学难点:VBA的基础知识。
教学手段与
:讲解法,操作演示法
教学过程:
第10章 模块与VBA程序设计(1)
10.1 模块与VBA概述
10.1.1 模块的概念
模块就是由VBA通用声明和一个或多个过程组成的单元。组成模块的基础是过程,VBA过程通常分为Sub过程(子程序)、Function过程(函数)和Property过程(属性)。每个过程作为一个独立的程序段,实现某个特定的功能。
从与其他对象的关系来看,模块又可分为两种基本类型:标准模块和类模块。标准模块是指与窗体、报表等对象无关的程序模块,在Access数据库中是一个独立的模块对象。类模块是指包含在窗体、报表等对象中的事件过程,这样的程序模块仅在所属对象处于活动状态下有效,也称为绑定型程序模块。
1(标准模块
在标准模块中放置的是可供整个数据库系统中其他过程使用的公共过程,这些过程不与任何对象关联。如果想使设计的VBA代码具有在多个地方使用的通用性,就把它放在标准模块中。在标准模块定义的变量和过程可供整个数据库应用系统使用。每个标准模块有唯一的名称,在数据库窗口的“模块”对象中,可以查看数据库中的标准模块。
2(类模块
类模块其实是一个对象的定义,它封装了一些属性和方法,VBA中类模块有3种基本变形:窗体模块、报表模块和自定义类模块。
窗体模块中包含指定的窗体或其控件的事件所触发的所有事件过程的代码,这些过程用于响应窗体中的事件,可以使用事件过程来控制窗体的行为以及它们对用户操作的响应。报表模块与窗体模块类似,不同之处是过程响应和控制的是报表的行为。
数据库的每一个窗体和报表都有内置的窗体模块和报表模块,这些模块中包括事件过程模板,可以向其中添加程序代码,使得当窗体、报表或其上的控件发生相应的事件时,运行这些程序代码。 还有一种类模块,不与窗体和报表相关联,允许用户自定义所需的对象、属性和方法。 10.1.2 VBA开发环境
1
VBE的启动
启动VBE的方法有很多种,常用的方法有:
(1)在Access数据库窗口中选中“模块”对象,再单击工具栏上的“新建”按钮,或在“模块”对象中双击所要显示的模块名,就会打开VBE窗口并显示该模块的内容。
(2)在窗体、报表的设计视图中,单击“视图”?“代码”命令或单击工具栏上的“代码”按钮。 (3)在窗体、报表的设计视图中,右键单击控件对象,再单击快捷菜单上的“事件生成器”命令,打开“选择生成器”对话框,选择其中的“代码生成器”选项,单击“确定”按钮。或单击属性窗口的“事件”选项卡,选中某个事件并单击属性栏右边的省略号按钮,也可以打开“选择生成器”对话框,选择其中的“代码生成器”选项,单击“确定”按钮。
(4)单击“工具”?“宏”?“Visual Basic编辑器”命令。
(5)使用Alt+F11组合键,可以在数据库窗口和VBE窗口之间进行切换。
启动VBE后,屏幕出现VBE窗口,这就是VBA的开发环境,如图10-1所示。 图10-1 VBE窗口
2(VBE窗口的组成
(1)VBE主窗口
VBE主窗口有菜单栏和工具栏。VBE的菜单栏包括文件、编辑、视图、插入、调试、运行、工具、外接程序、窗口和帮助10个菜单项,其中包含了各种操作命令。
在默认情况下,在VBE窗口中显示的是标准工具栏,其中包括创建模块时常用的命令按钮。用户可以通过“视图”?“工具栏”菜单命令来显示其他工具栏。
(2)工程资源管理器窗口
工程资源管理器窗口列出了在应用程序中用到的模块。使用该窗口,可以在数据库内各个对象之间快速地浏览。各对象以树形图的形式分级显示在窗口中,包括Access类对象、模块和类模块。要查看对象的代码,只须在该窗口双击对象即可。要查看对象的窗体,可以右击对象名,然后在弹出的快捷菜单中选择“查看对象”命令。
(3)属性窗口
属性窗口列出了所选对象的各种属性,可按字母和分类排序来查看属性。可以直接在属性窗口对这些属性进行编辑,还可以在代码窗口中用VBA语句设置对象的属性。
(4)代码窗口
在代码窗口中可以输入和编辑VBA代码。可以打开多个代码窗口来查看各个模块的代码,而且可以方便地在代码窗口之间进行复制和粘贴。
在代码窗口的顶部是两个组合框,左边是对象组合框,右边是事件组合框。对象组合框中列出了所有可用的对象名称,选择某一个对象后,在事件组合框中将列出该对象所有的事件。 (5)立即窗口
立即窗口常用于程序在调试期间输出中间结果、帮助用户在中断模式下测试表达式的值等,也可以在立即窗口中直接输入VBA命令并按Enter键后,VBA会实时解释并执行该命令。例如,用户可直接在立即窗口利用“?”或Print命令或Debug.Print(Debug对象的Print方法)输出表达式的值。 10.1.3 模块的创建
创建模块对象,需启动VBE。在VBE中可以编写VBA函数和过程。关于过程的详细使用方法将在10.4节介绍,下面只是使用过程的简单形式来说明创建模块的方法。
1(创建模块的方法
模块的创建有以下几种方法。
(1)在Access中每创建一个窗体或报表,Access都会自动创建一个对应的窗体模块或报表模块。 (2)在Access数据库窗口中单击“模块”对象,再单击工具栏上的“新建”按钮,可以打开VBE窗口并创建标准模块;在“模块”对象中双击所要显示的模块名称,就会打开VBE窗口并显示该模
2
块的内容。
(3)在VBE编辑器中,单击VBE菜单的“插入”?“模块”命令可以创建新的标准模块;单击VBE菜单的“插入”?“类模块”命令可以创建新的类模块。或单击VBE工具栏中的“插入模块”按钮,从下拉菜单中选择“模块”命令或“类模块”命令。
例10-1 在“教学管理”数据库中创建一个标准模块。
创建标准模块及运行结果
2(对象的引用
引用对象属性的语法格式为:
对象名.属性名
在程序代码中改变属性的值,其语句格式为:
对象名.属性名=属性值
例如,将Command1命令按钮的Caption属性设置为“计算”,在程序代码中实现的语句是: Command1.Caption="计算"
引用方法的语法格式为:
对象名.方法名(参数1,参数2,„)
如果引用的方法没有参数,则可以省略括号。
在Access中,可能需要通过多重对象来确定一个对象,这时需要使用运算符“!”来逐级确定对象。例如,要确定在MyForm窗体对象上的一个命令按钮控件Cmd_Button1,可表示为: MyForm!Cmd_Button1
对于当前对象,可以省略对象名,也可以使用Me关键词代替当前对象名。
当引用对象的多个属性时,可使用With„End With结构,而不需要重复指出对象的名称。例如,如果要给命令按钮Cmd1的多个属性赋值,可表示为:
With Cmd1
.Caption="确定"
.Height=2000
.Width=2000
End With
Access中提供一个重要的对象:DoCmd对象,它的主要功能是通过调用包含在内部的方法实现VBA程序设计中对Access的操作。
例如,利用DoCmd对象的OpenReport方法打开“学生”报表,语句格式为:
DoCmd.OpenReport "学生"
DoCmd对象的方法大都需要参数。有些是必需的,有些是可选的,被忽略的参数取默认值。例如,上述OpenReport方法有4个参数,一般调用格式为:
DoCmd.OpenReport ReportName[, View][, FilterName][, WhereCondition]
其中只有ReportName(报表名称)参数是必需的,其他参数均可省略。View表示报表的输出形式,可以是系统常量acViewNormal(默认值,以打印机形式输出)、acViewDesign(以报表设计视图形式输出)、acViewPreView(以打印预览形式输出)。FilterName与WhereCondition两个参数用于对报表的数据进行过滤和筛选。
DoCmd对象还有许多方法,如 OpenTable 、OpenForm、OpenQuery、OpenModule、RunMacro、Close、Quit等,可以通过帮助文件查询它们的使用方法。
3(编写对象响应的程序代码
各种对象所能响应的事件有所不同,可以在对象设计视图中单击对象,在打开的属性表中选择“事件”选项卡查看。可以通过两种方法来处理窗体、报表或控件的事件响应。
3
(1)使用宏操作来设置事件的属性。
(2)在代码窗口中为某个事件创建事件过程。
在代码窗口右上角的组合框中可以查看每一种对象所能识别的事件,在事件组合框的左边是对象组合框。当在对象组合框中选定对象后再在事件组合框中选定需要的事件,系统就会自动生成一个约定名称的子程序,例如,命令按钮Command1的Click事件过程名为“Command1_Click”。该子程序就是处理该事件的程序,称为事件过程,一般格式如下:
Private Sub 对象名_事件名([参数表])
„(事件过程代码)
End Sub
其中参数表中的参数名随事件过程的不同而不同,也可以省略。程序代码就是根据需要解决的问题由用户编写的程序。
例10-2 在“教学管理”数据库中创建如图10-3所示的窗体,窗体中包含两个文本框和相应的标签以及两个按钮,单击第一个按钮时将第一个文本框中的内容显示在第二个文本框中,单击第二个按钮时关闭该窗体。
图10-3 窗体模块运行界面
10.2 VBA的数据类型及运算
10.2.1 数据类型
1(标准数据类型
其中Variant数据类型是一种特殊数据类型,具有很大的灵活性,可以表示多种数据类型,其最终的类型由赋予它的值来确定。如果变量在使用前未加以类型说明,默认为Variant型 。 2(用户自定义数据类型
VBA允许用户自定义数据类型,使用Type语句就可以实现这个功能。用户自定义类型可包含一个或多个某种数据类型的数据元素型。Type语句的语法格式如下:
Type 数据类型名
数据元素定义语句
End Type
10.2.2 常量与变量
1(常量
(1)直接常量
不同类型的直接常量有不同的表示方法,使用时应遵循相应的规则,常用的表示方法有: ? 十进制整数由数字0~9和正、负号组成,实数可采用小数表示形式或科学记数表示形式。科学计数法用E表示10的乘幂。
? 字符串常量是一个用双引号括起来的字符序列。在字符串中,字母的大小写是有区别的。 ? 布尔常量有True和False两个值。
? 日期常量以字面上可被认作日期和时间的字符并用一对“#”括起来表示。 (2)符号常量
符号常量是用标识符来表示某个常量,用户一旦定义了符号常量,在以后的程序中不能用赋值语句来改变它们的值,否则,在运行程序时将出现错误。
标识符是用来表示用户所定义的常量、变量、过程、函数等程序要素的符号。在VBA中,标识符的命名必须是以字母或汉字开头,且只能由汉字、字母(a~z或A~Z)、数字(0~9)或下划线(_)所组成,其最大长度为255个字符。此外,不能使用VBA的关键字作为标识符,标识符不区分大小写。 在VBA中声明常量的语句格式是:
Const常量名 [As 数据类型|类型符]=表达式[,常量名 [As 数据类型|类型符]=表达式] 例如:
4
Const TotalCount As Integer=1000
Const IDate=#7/30/2011#
Const NDate=IDate+5
Const MyString$="You are welcome."
(3)系统常量
系统常量是VBA预先定义好的常量,用户可以直接使用。例如VBA用vbKeyReturn来表示回车键,它的ASCII码值是13。
2(变量
(1)变量的命名规则
VBA的变量名要遵循标识符的命名规则。为了增加程序的可读性和可维护性,可以在命名变量时使用前缀的约定。这样通过变量名就可以知道变量的数据类型。例如,可以用intNumber、strMytext、blnFlag等名字来分别作为整型、字符串型和逻辑型变量的名字。
(2)变量的声明
声明变量有两个作用,一是指定变量的数据类型,二是指定变量的作用范围。如果在程序中没有明确声明变量,VBA会默认地将它声明为Variant数据类型。虽然默认声明变量很方便,但可能会在程序代码中导致严重的错误。因此使用前声明变量是一个很好的编程习惯。
在VBA中可以强制要求在过程中使用变量前必须进行声明,方法是在模块通用声明部分中包含一个Option Explicit语句,它要求在模块级别中强制对模块中所有使用的变量显式声明。 声明变量要使用 Dim 语句,Dim 语句的格式为:
Dim 变量名 [As 数据类型|类型符][,变量名 [As 数据类型|类型符]]
例如:
Dim Var1%,Var2 As String,Var3 As Date,Var4
其中Var1的数据类型为整型(Integer类型,其类型符为%),Var2为字符型,Var3为日期型,Var4的类型为Variant,因为声明时没有指定它的类型。
对于字符型变量,分为定长和变长两种。例如:
Dim s1 As String, s2 As String*10
其中s1是变长字符变量,s2是定长字符变量。
(3)变量的赋值
声明了变量后,变量就指向了内存的某个单元。在程序的执行过程中,可以向这个内存单元写入数据,这就是变量的赋值。给变量赋值的语句格式如下:
变量名=表达式
例如:
Dim MyName As String
MyName="Better City, Better Life."
3(数组变量
数组的声明方式和其他的变量是一样的,可以使用Dim语句来声明,其一般格式为: Dim 数组名([下标1下界 To] 下标1上界[, [下标2下界 To] 下标2上界]„) As 数据类型 下标下界的默认值为0,在使用数组时,可以在模块的通用声明部分使“Option Base 1”语句来指定数组下标下界从1开始。
数组可以分固定大小数组和动态数组两种类型。若数组的大小被指定,则它是个固定大小数组。若程序运行时数组的大小可以被改变,则它是个动态数组。
(1)声明固定大小的数组
下面的语句声明了一个固定大小的数组:
Dim MyArray(10,10) As Integer
5
其中MyArray是数组名,它是含有11×11个元素的Integer类型的二维数组。 (2)声明动态数组
若声明为动态数组,则可以在执行程序时去改变数组大小。可以利用Dim语句来声明数组,不须给出数组大小。每当需要时,可以使用ReDim语句去更改动态数组,此时数组中存在的值会丢失。若要保存数组中原先的值,则可以使用ReDim Preserve语句来扩充数组。例如: Dim sngArray() As Single '使用Dim语句声明动态数组
ReDim sngArray(2) '使用ReDim语句声明动态数组的大小
sngArray(1)=10 '为动态数组各个元素赋值
sngArray(2)=20
ReDim Preserve sngArray(10) '再次改变动态数组大小,保留了原来数组元素的值 10.2.3 内部函数
1(数学函数
数学函数完成数学计算功能,常用的数学函数如表10-2所示。
2(字符串函数
常用的字符串函数如表10-3所示。
3(日期或时间函数
常用的日期或时间函数如表10-4所示。
4(类型转换函数
常用的类型转换函数如表10-5所示。
5(测试函数
常用的测试函数如表10-6所示
10.2.4 表达式
1(算术表达式
VBA提供了8个算术运算符,除负号“-”是单目运算符外,其他均为双目运算符,如表10-7所示。 2(关系表达式
VBA中的关系运算有大于(>)、小于(<)、大于或等于(>=)、小于或等于(<=)、等于(=)、不等于(<>)。
关系运算的运算对象可以是数值、字符串、日期、逻辑型等数据类型。数值按大小比较;日期按先后比较,早的日期小于晚的日期;False大于True;字符串按ASCII码排序的先后比较,也就是先比较两个字符串的第一个字符,按字符的ASCII码值比较大小, ASCII码值大的字符串大,如第一个字符相等,则比较第二个字符,直到比较出大小或比较完为止。汉字字符大于西文字符,汉字的比较是根据Unicode码的大小来比较的。
3(逻辑表达式
逻辑表达式可以表示比较复杂的比较关系,结果是布尔型数据。表10-8列出了常用逻辑运算符和它们表示的逻辑关系,在表中,True用T代表,False用F表示。
4(字符串表达式
字符串表达式由字符串运算符将字符串数据连接而成。VBA中的连接运算符有“+”和“&”,作用是将两个字符串连接起来。
当两个被连接的数据都是字符串时,“&”和“+”的作用相同,当数值型和字符型连接时,“&”把数据转化成字符型后再进行连接,而用“+”连接则会出错。
对于包含多种运算符的表达式,在计算时,将按预定的顺序计算每一部分,这个顺序被称为运算符的优先级。各种运算符的优先级由高到低顺序为:函数运算符、算术运算符、连接运算符、关系运算符、逻辑运算符。如果在运算时出现了括号,则先执行括号内的运算,在括号内部,仍按运算符的优先顺序计算。
6
思考题、讨论题及其他形式的作业:
理论
p.279一、1--5,二、1--4,三、1--4 实验教材: p.25 二、1—5。
参考资料(含参考书、文献、网址等):
1、Access数据库基础与应用,刘卫国,北邮
2、Access数据库基础与应用实验指导,刘卫国,北邮 板书设计:
演示文稿:第9章 宏.ppt(内容略) 课后记载与
:
7