第15讲 模块和VBA编程选讲.docx
- 文档编号:2164553
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:51
- 大小:251.68KB
第15讲 模块和VBA编程选讲.docx
《第15讲 模块和VBA编程选讲.docx》由会员分享,可在线阅读,更多相关《第15讲 模块和VBA编程选讲.docx(51页珍藏版)》请在冰点文库上搜索。
第15讲模块和VBA编程选讲
第11章模块与VBA编程
Access的宏对象能够完成一般的数据库管理和数据库的界面管理,但是对于一些复杂的数据库维护和数据处理的工作,仅仅使用宏是远远不够的。
Access拥有一套功能强大的编程工具──VBA,使用这套编程工具,用户可以开发出功能比较完善的数据库系统。
11.1模块的概念
模块是Access数据库中最后一个重要的对象,它是用VBA语言编写的,模块起着存放用户编写的VBA代码的作用。
11.1.1模块的分类
在Access中,模块有两种基本类型:
标准模块和类模块
1.标准模块
标准模块包含的是通用过程和常用过程,这些通用过程不与任何对象相关联,常用过程可以在数据库中的任何位置运行。
2.类模块
类模块是含有类定义的模块,包括其属性和方法的定义。
窗体模块和报表模块都是类模块,它们分别与某个窗体或报表相关联。
11.1.2宏与模块
第9章介绍的宏的操作功能,同样可以在模块对象中通过编写VBA语句来实现,也可以将已创建好的宏转换为等价的VBA事件过程或模块。
1.将宏转换为模块
根据要转换宏的类型不同,转换操作有两种情况,—是转换窗体或报表中的宏,另一个是转换不属于任何窗体和报表的全局宏。
(1)转换窗体或报表中的宏
操作过程如下:
①在“设计视图”中打开窗体。
②选择“工具”菜单中的“宏”命令项,在级联菜单中单击“将窗体的宏转换为VisualBasic代码”,屏幕显示“转换窗体宏”对话框,如图11.1所示。
图11.1“转换窗体宏”对话框
在对话框中单击“转换”按钮,弹出“转换完毕”对话框。
④单击“确定”按钮完成转换。
转换报表中的宏,过程与转换窗体时完全一样,只是将有窗体的地方改为报表即可
(2)将全局宏转换为模块
操作过程如下:
①在“数据库”窗口中单击“宏”对象,选择要转换的宏。
②选择“文件”菜单中的“另存为”命令项,屏幕显示“另存为”对话框,如图11.2所示。
图11.2“另存为”对话框
在对话框的“保存类型”下拉列表框中选择“模块”,然后单击“确定”按钮,屏幕显示“转换宏”对话框。
④在对话框中单击“转换”按钮,弹出“转换完毕”对话框
⑤单击“确定”按钮完成转换。
2.宏和模块的选择
虽然宏可以完成的操作,使用模块也可以完成,但在使用时,应根据具体的任务来确定选择宏还是模块。
对于以下的操作,使用宏更为方便。
(1)在首次打开数据库时,执行—个或一系列操作。
(2)建立自定义的菜单栏。
(3)为窗体创建菜单。
(4)使用工具栏上的按钮执行自己的宏或程序。
(5)随时打开或关闭数据库的对象。
对于以下的操作,要使用模块来实现。
(1)复杂的数据库维护和操作。
(2)自定义的过程和函数。
(3)运行出错时的处理。
(4)在代码中定义数据库的对象,用于动态地创建对象。
(5)一次对多个记录进行处理。
(6)向过程传递变量参数。
(7)使用ActiveX控件和其他应用程序对象。
总之,凡是宏无法实现的或者用宏实现起来比较繁琐的功能,都可以通过VBA来完成。
11.1.3模块的组成
模块由声明和过程两个部分组成,一个模块中有一个声明区域和一个或多个过程,在声明区域对过程中用到的变量进行声明,过程是模块的组成单元,分为子(Sub)过程和函数(Function)两类。
1.子过程
子过程又称为Sub过程,用来执行一系列的操作,子过程没有返回值,它的定义格式如下:
Sub过程名
[程序代码]
EndSub
其中的程序代码表示要完成的一系列操作。
调用子过程时可以直接引用子过程的名称,也可以在过程名称之前加上关键字Call。
2.函数过程
函数过程又称为Function过程,函数过程有返回值,它的定义格式如下。
Function过程名
[程序代码]
EndFunction
调用函数过程时,直接引用函数过程的名称。
10.1.4创建VBA模块与编程环境
Access系统提供了一个编程界面—VBE(VisualBasicEditor)。
在VBE窗口可以完成Access的模块设计。
1.进入VBE编程环境
对于类模块和标准模块,它们进入VBE环境的方法是不一样的。
(1)进入类模块的3种方法
方法1:
在设计视图中打开窗体或报表,然后单击设计工具栏上的“代码”按钮。
方法2:
在设计视图中打开窗体或报表,然后右击需要编写代码的控件,在弹出的快捷菜单中选择“事件生成器”命令项。
方法3:
在设计视图中打开窗体或报表,打开需要编写代码控件的“属性”对话框,单击“事件”选项卡,单击某一事件属性右侧的“生成器”按钮,弹出“选择生成器”对话框,如图11.3所示,选择“代码生成器”,然后单击“确定”按钮。
图11.3“选择生成器”对话框
(2)进入标准模块的3种方法
方法1:
在“数据库”窗口中,选择“工具”菜单中的“宏”命令,在其级联菜单中选择“VisualBasic编辑器”。
方法2:
选择“数据库”窗口中的“模块”对象,然后单击“新建”按钮。
方法3:
对已存在的标准模块,在“数据库”窗口中单击“模块”对象,然后在模块列表中双击选择的模块,或选择模块后单击“设计”按钮。
不论在什么状态下,使用上述哪种方法,都将打开并进入VBE环境,如图11.4所示。
图11.4VBE环境
2.VBE界面
进入VBE后,可以看到多种窗口和工具栏。
使用好这些窗口和工具栏将有助于提高编辑和调试代码的效率。
(1)VBE工具栏
VBE界面中包括有“标准”、“编辑”、“调试”和“用户窗体”等多种工具栏,可选择“视图”菜单中“工具栏”命令下的子命令显示和隐藏这些工具栏。
图11.5为“标准”工具栏。
图11.5“标准”工具栏
“标准”工具栏中各按钮的功能如表11.1所示。
表11.1VBE“标准”工具栏按钮功能
按钮
名称
功能
Access视图
用于从VBE切换到数据库窗口
插入模块
插入新的模块
运行子过程/用户窗体
运行模块程序
中断运行
中断正在运行的程序
重新设置
结束正在运行的程序,重新进入模块设计状态
设计模式
进入和退出设计模式
工程资源管理器
打开工程资源管理器窗口
属性窗口
打开属性窗口
对象浏览器
打开对象浏览器窗口
(2)工程窗口
即工程资源管理器,该窗口显示应用程序的所有模块文件,以分层列表的方式显示。
该窗口中有3个按钮,“查看代码”按钮
可以打开相应的代码窗口;“查看对象”按钮
可以打开相应的对象窗口,“切换文件夹”
可以隐藏或显示对象的分类文件夹。
(3)属性窗口
属性窗口列出了所选对象的属性,可以按字母查看这些属性,也可以按分类查看这些属性。
属性窗口由“对象”框和“属性”列表组成。
其中,“对象”框用于列出当前所选的对象,“属性”列表可以按字母或分类对对象属性进行排序。
可以在属性窗口中直接编辑对象的属性,这是以前各章所用的方法,还可以在代码窗口中用VBA代码编辑对象的属性,前者属于“静态”的属性设置方法,后者属于“动态”的属性设置方法。
(4)代码窗口
代码窗口主要是用来编写、显示以及编辑VBA代码,如图11.6所示。
图11.6代码窗口
代码窗口的顶部有两个下拉列表框,左侧的是对象列表,右侧的是过程列表。
从左侧选择一个对象后,右侧的列表框中就会列出该对象的所有事件过程,从该事件过程列表框中选择某个事件过程名后,系统会自动在代码编辑区生成相应事件过程的模板,用户可以向模板中添加代码。
代码窗口实际上是一个标准的文本编辑器,它提供了功能完善的文本编辑功能,可以简单、高效地对代码进行复制、删除、移动及其他操作。
此外,在输入代码时,系统会自动显示关键字列表、关键字属性列表、过程参数列表等提示信息,用户可以直接从列表中选择,方便了代码的输入。
11.2VBA编程基础
11.2.1数据类型
VBA提供了较为完备的的数据类型,它包含了除Access表中的OLE对象和备注类型以外的其他所有数据类型。
VBA的数据类型、类型说明符以及取值范围如表11.2所示。
表11.2VBA基本数据类型
数据类型
类型标识
类型后缀
范围
默认值
整数
Integer
%
-32768~32767
0
长整数
Long
&
-2147483648~2147483647
0
单精度数
Single
!
负数:
-3.402823E38~-1.401298E-45
正数:
1.401298E-45~3.402823E38
0
双精度数
Double
#
负数:
-1.79769313486232E308~
-4.9465645841247E-324
正数:
4.9465645841247E-324~
1.79769313486232E308
0
货币
Currency
@
-922337203685477.5808~
922337203685477.5807
0
字符串
String
$
0~65500个字符
“”
布尔型
Boolean
Tree或False
False
日期型
Date
100年1月1日~
9999年12月31日
0
对象型
Object
变体类型
Variant
数字和双精度同
文本和字符串同
Empty
除系统提供的上述基本数据类型外,VBA还支持用户自定义数据类型。
11.2.2常量
常量表示一个具体的、不变的值。
VBA的常量包括数值常量、字符常量、符号常量、系统常量和内部常量5种。
其中数值常量和字符常量最常用。
1.数值常量
数值常量由数字等组成,如256、123.45、34.123E-5等。
2.字符常量
由定界符括起来的一串字符,如”Computer”、”ABC””武汉”等。
3.符号常量
符号常量可用Const语句创建,格式如下:
Const符号常量名称=常量值
其中符号常量的名称一般用大写命名,以便和变量区分。
例如,下面语句定义了符号常量PI,其值为3.1416。
ConstPI=3.1416
如果在Const前面加上Global或Public,则定义的符号常量就是全局符号常量,这样,在所有的模块中都可以使用。
在定义符号常量时,不需要为常量指出数据类型,VBA会自动按存储效率最高的方式确定其数据类型。
在程序运行过程中对符号常量只能作读取操作,而不能对其进行修改或重新赋值。
4.系统常量
系统常量是指Access启动时自动建立的常量,包括True、False、Yes、No、Off、On和Null等,可以在Access中的任何地方使用系统常量。
5.内部常量
内部常量是VBA预定义的内部符号常量,所有内部常量均可在宏或VBA代码中使用。
通常,内部常量通过前两个字母来指明定义该常量的对象库。
来自Access库的常量以“ac”开头,例如acCmdSaveAs,来自ActiveXDataObjects(ADO)库的常量以“ad”开头,而来自VB库的常量则以“vb”开头。
可以在任何允许使用符号常量的地方使用内部常量。
11.2.3变量
变量是指在应用过程中其值可以改变的量。
1.变量的命名规则
每个变量有一个名称和相应的数据类型,数据类型决定了该变量的存储方式,而通过变量名可以引用一个变量。
在为变量命名时,应遵循以下的原则:
(1)变量名只能由字母、数字和下划线组成。
(2)变量名只能以字母开头。
(3)变量名不能使用系统保留的关键字,例如PRINT、WHERE等。
(4)在VBA的变量名中不区分大小写字母,例如ABC、abc或abc表示同一个变量。
除了变量名外,在VBA中的过程名、符号常量名、自定义类型名、元素名等在命名时都遵循以上的规则。
在命名变量时,通常采用大小写字母混合的方式,例如PhntText,这样定义的变量名更具有可读性。
2.变量类型的定义
根据对变量类型定义的方式不同可以将变量分为两种形式。
(1)隐含型变量
隐含型变量是指在使用变量时,在变量名之后添加不同的后缀表示变量的不同类型。
例如,下面的语句定义了一个整数类型的变量:
NewVar%=65
如果在变量名称后面没有添加后缀字符来指明隐含变量的类型时,系统会默认为Vahant数据类型。
(2)显式变量
显式变量是指在使用变量时要先定义,后使用,定义变量采用下面的方式:
Dim变量名As类型名
例如,下面的语句定义了整型变量:
NewVar:
DimNewVarAsInteger
下面的语句定义了定长字符串变量MyName:
DimMyNameAsString*10
在一条Dim语句中也可以定义多个变量,例如,下面的语句将Varl和Var2分别定义为字符串变量和双精度变量:
DimVarlASString,Var2ASDouble
在Dim语句中省略了As和类型名时表示定义的是变体类型。
例如,下面的语句将Varl和Var2分别定义为变体类型变量和双精度变量:
DimVarl,Var2AsDouble
3.变量的作用域
变量的作用域是指变量在程序中可使用的范围,定义变量的位置不同,其作用范围也不同。
根据变量的作用域,可以将变量分为3类,分别是局部变量、模块变量和全局变量。
(1)局部变量
局部变量是指定义在模块过程内部的变量,即在子过程或函数过程中定义的或者是不用Dim…As而直接使用的变量,这些都是局部变量。
局部变量的作用域是它所在的过程,这样,在不同的过程中就可以定义同名的变量,它们之间是相互独立的。
(2)模块变量
模块变量是在模块的起始位置、所有过程之外定义的变量,运行时模块所包含的所有子过程和函数中都可以使用该变量。
(3)全局变量
全局变量是在标准模块的所有过程之外的起始位置定义的变量,运行时在所有类模块和标准模块的所有子过程和函数过程中都可以使用该变量。
在标准模块的变量定义区域,用下面的语句定义全局变量:
Public变量As数据类型
4.数据库对象变量
在Access数据库中建立的对象与属性,均可作为VBA程序代码中的变量及其指定的值来加以引用。
窗体对象的引用格式如下:
Forms!
窗体名称!
控件名称[.属性名称]
报表对象的引用格式如下:
Repons!
报表名称!
控件名称[.属性名称]
上面的格式中如果省略了属性名称,则表示控件的基本属性。
例如,设置“学生基本情况”窗体中“学号”文本框的属性,用VBA程序代码表示如下:
Forms!
学生基本情况!
学号=”070501”
等价于:
Forms!
学生基本情况!
学号.Value=”070501”
上面的引用方式书写比较长,当需要多次引用对象时,显得很烦琐,下面使用Set建立控件对象的变量,这样,在引用对象时就很方便。
首先定义一个控件类型的变量:
DimtxtNameASControl
然后为该变量指定窗体控件对象:
SettxtName=Forms!
学生基本情况!
学号
以后就可以使用下面的方法引用对象了:
txtName=”070501”
10.2.4运算符与表达式
表达式是指用运算符将常量、变量和函数连接起来的有意义的式子。
VBA中有算术运算符、关系运算符、逻辑运算符、连接运算符和对象运算符。
1.算术运算符与算术表达式
算术运算符用于算术运算,主要包括乘幂“^”、乘法“*”、除法“/”、整数除法“\”、求模“Mod”、加法“+”和减法“—”7个运算符。
这7个运算符中,其中乘法、除法、加法和减法不需要解释,下面对乘幂、整数除法和求模运算符做一些说明。
乘幂运算符“^”完成乘方运算,例如,2^3的结果是8,(-2)^3的结果是-8。
整数除法运算符“\”用来对两个操作数做除法运算并返回一个整数,如果操作数中有小数部分,系统会先取整后再运算,运算结果有小数时也舍去。
例如,10\3的结果是3,10.2\4.8的结果是2。
求模运算符“Mod”返回两个操作数相除后的余数,如果操作数有小数部分,系统会先四舍五入将其变成整数后再运算,运算结果的符号与被除数相同。
例如,10Mod4的结果是2,12Mod-5的结果是2,-12.8Mod4的结果是-1。
这7个运算符的优先级从高到低顺序是乘幂、乘除、整数除法、求模、加减法。
2.关系运算符关系表达式
关系运算符用来表示两个值或表达式之间的大小关系,有相等“=”、不等“<>”、大于“>”、大于等于“>=”、小于“<”、小于等于“<=”6个运算符。
关系运算符用来对两个操作数据进行大小的比较,比较运算的结果为逻辑值,分别是True(真)和False(假)。
例如,表达式10<5的结果是False。
表达式”ab>aa”的结果是True。
表达式#2008/5/12#<#2008/10/1#的结果是True。
所有关系运算符的优先级别相同。
3.逻辑运算符与逻辑表达式
逻辑运算符有逻辑与“AND”、逻辑或“OR”'和逻辑非“NOT”3个运算符,其运算规则见表11.3的真值表。
表11.3逻辑运算真值表
A
B
NOTA
AANDB
AORB
True
True
False
True
True
True
False
False
False
True
False
True
True
False
True
False
False
True
False
False
优先级顺序依次为:
NOT→AND→OR
例如,6>8AND10>3的结果是True,6>8AND2>3的结果是False。
由逻辑量构成的表达式进行算术运算时,True值当成-1,False的值当作0来处理
4.连接运算符
连接运算符的运算量是字符串,它的作用是将两个字符串连接。
连接运算符有“+”和“&”两个。
“+”运算符是当两个运算量都是字符串数据时,将其连接成一个新的字符串。
例如,"abc"+"xyz"的结果是"abcxyz"。
“&”用来对两个表达式强制进行连接。
例如,"2+3"&"="&(2+3)的结果是"2+3=5"。
以上的4类运算符优先级从高到低的顺序是算术运算符、连接运算符、关系运算符、逻辑运算符。
5.对象运算符与对象运算表达式
VBA中有各种对象,包括表、查询、窗体、报表等。
窗体上的控件,如文本框、命令按钮等都是对象。
所谓对象表达式是指用来说明具体对象的表达式。
对象表达式中使用“!
”和“.”两种运算符。
!
运算符的作用是指明随后用户定义的内容。
使用!
运算符可以引用一个已经打开的窗体、报表或其上的控件,也可以在表达式中引用一个对象或对象的属性。
例如:
Forms!
学生基本情况!
学号‘引用已经打开的“学生基本情况”窗体上的“学号”控件
点运算符(.)通常指出随后为Access定义的内容。
使用.运算符可引用窗体、报表或控件等对象的属性。
例如:
Repons!
学生成绩单!
学号.Visible
10.2.5属性、方法和事件
属性、方法和事件构成了对象的基本元素,创建了一个对象后,对一个对象的操作是通过与该对象有关的属性、方法和事件来描述的
1.属性
属性描述了对象的性质,例如,标签对象中的字体名称、字体大小。
属性也可以反映对象的某个行为,例如,某个对象是否锁定或者是否可见等,设置属性就是为了改变对象的外观和特性。
对象的属性可以通过“属性”对话框进行设置,也可以通过编程设置。
用VBA程序代码设置属性的一般格式为:
对象名.属性名=属性值
2.方法
对象的方法描述了对象的行为,即在特定的对象上执行的一种特殊的过程或函数。
方法通常在代码中使用,其格式为:
对象名.方法
例如,使用SetFocus方法将焦点移到“学生基本情况”窗体上的“学号”文本框中,用VBA程序代码表示如下:
txtName.SetFocus
3.事件
事件是由Access定义好的,可以被对象识别的动作,例如,命令按钮就具有单击、双击等事件,事件通常由VBA的子过程或函数过程实现。
11.2.6常用的事件
在Access系统中,常用事件有:
鼠标事件、键盘事件、窗口事件、对象事件和操作事件等。
1.鼠标常用事件
(1)Click事件:
每单击一次鼠标,激发一次该事件。
(2)Dblelick事件:
每双击一次鼠标,激发一次该事件。
(3)MouseMove事件:
移动鼠标所激发的事件。
(4)MouseUp事件:
释放鼠标所激发的事件。
(5)MouseDown事件:
按下鼠标所激发的事件。
2.键盘常用事件
(1)KeyPress事件:
每敲击一次键盘,激发一次该事件。
该事件返回的参数KeyAscii是根据被敲击键的ASCII码来决定的。
如A和a的ASCII码分别是65和97,则敲击它们时的KeyAscii返回值也不同。
(2)KeyDown事件:
每按下一个键,激发一次该事件。
该事件返回的参数KeyCode是由键盘上的扫描码决定的。
如A和a的ASCII码分别是65和97,但是它们在键盘上却是同一个键,因此它们的KeyCode返回值相同。
(3)KeyUp事件:
每释放一个键,激发一次该事件。
该事件的其他方面与KeyDown事件类似。
3.窗体常用事件
(1)Open事件:
打开窗体事件。
(2)Load事件:
加载窗体事件。
(3)Resize事件:
重绘窗体事件,
(4)Active事件:
激活窗体事件。
(5)Unload事件:
卸载窗体事件。
(6)Close事件:
关闭窗体事件。
在打开窗体时,将按照下列顺序发生相应的事件:
Open→Load→Resize→Activate。
在关闭窗体时,将按照下列顺序发生相应的事件:
Unload→Close
4.对象常用事件
(1)GotFocus事件:
获得焦点事件。
(2)LostFocus事件:
失去焦点事件。
(3)BeforeUpdate事件:
更新前事件。
(4)AfterUpdate事件:
更新后事件。
(6)Chang事件:
更改事件。
5.操作常用事件
(1)Delete事件:
删除事件。
(2)BeforeInsert事件:
插入前事件。
(3)AfterInsert事件:
插入后事件。
11.2.7DOCmd对象及其常用的方法
1.DoCmd对象
DoCmd是Access提供的又一个重要的对象。
通过该对象,可以调用Access内部的方法,这样就可以在VBA程序中实现对数据库进行操作,例如,打开窗体、打开报表、显示记录、指针移动等。
用DoCmd调用方法的格式如下:
DoCmd.方法名参数表
格式中DoCmd和方法名之间用圆点连起来,这里的方法名是第9章介绍的绝大多数宏操作名,格式中的参数表列出了该操作的各个参数,这些参数就是在第9章的宏设计窗口左下方显示的操作参数,而且参数的顺序也与宏设计窗口中参数显示的顺序一致,如图11.7所示。
图11.7DoCmd对象与宏设计窗口的对应
在宏操作命令中,有一部分操作的方法是DoCmd对象不支持的,这些操作在VBA中用其他方式实现,这些方法及对应的操作见表11.4。
表11.4DoCmd对象不支持的宏操作命令
方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第15讲 模块和VBA编程选讲 15 模块 VBA 编程