LOGO 8.1 认识 VBA
8.1.1 什么是 VBA
VBA( Visual Basic for Applications)是广泛流行的可视化应用程序开发语言 VB( Visual Basic)的子集。学过 VB语言的读者会发现 VBA语言的语法和特色与 VB语言基本类似。反过来,当有 VBA语言基础的读者阅读 VB程序代码也会感觉似曾相识,学习起来也会变得相当容易。
VBA语法简单但功能强大,支持基于面向对象( OOP)的程序设计,
非常适合初学者使用。
需要注意的是,VB语言开发系统是独立运行的开发环境,它创建的应用程序可以独立运行在 Windows平台上;而 VBA则不同,其编程环境和 VBA程序都必须依赖 Office应用程序(如 Access,Word,Excel等)。
返回首页
LOGO 8.1 认识 VBA
8.1.2 VBA与宏
Access宏实质上就是 VBA程序,宏的操作实际上就是用 VBA代码实现的。
宏的用法简单,上手容易,比较适合没有编程基础的用户开发普通应用程序。宏的不足是功能较弱、运行效率较差。
Access内嵌的 VBA功能强大,VBA具有较完善的语法体系和强大的开发功能,采用目前主流的面向对象机制和可视化编程环境,适用于开发高级 Access数据库应用系统。
返回首页
LOGO 8.1 认识 VBA
8.1.3 VBA 开发环境返回首页
LOGO 8.2 VBA语法基础
8.2.1 数据类型返回首页
LOGO 8.2 VBA语法基础
8.2.2 常数常数是指不变的数据,如数值 3、字母,a”等。 VBA常数也具有多种不同类型,不同的数据类型一般具有不同的书写形式。
◆ 数值型
◆ 布尔型
◆ 日期时间型
◆ 系统常量返回首页
LOGO 8.2 VBA语法基础
8.2.3 变量变量是被命名的内存区域,用以临时保存程序运行过程中需要的数据。在程序运行过程中,变量存储的数据可以发生变化,如同一间旅馆客房,昨天可住旅客 A,今天住旅客 B,明天又有可能被闲置。
一般地,使用变量前应先进行定义,VBA中定义变量的格式为:
Dim <变量名 >[ As <数据类型 >] [,…]
格式中 Dim是一个 VBA命令,此处用于定义变量; As是关键字,此处用于指定变量的数据类型。例如,Dim bAge as Byte
返回首页
LOGO 8.2 VBA语法基础
8.2.4 符号常量
VBA编程中,对一些使用频度较高的常量,可以用符号常量的形式来表示。符号常量也是一种被命名的内存区域,只不过在程序运行过程中符号常量的值不能被改变。
符号常量定义的格式为:
Const <常量名 > [ as <数据类型 >]=<数据 > [,...]
说明:格式中尖括号部分为必填内容,中括号部分为选填内容,[,…] 表示之前部分可重复。
例如,Const PI=3.1415926 或 Const PI as Single=3.1415926,dayHours as
Byte=10
圆周率 π是一个常量,上例中我们定义了这样的一个常量 PI可以代表其值。在编制程返回首页
LOGO 8.2 VBA语法基础
8.2.5 数组
数组也是一个被命名的内存区域,与变量只有一个存储单元不同,数组中可以包含多个存储单元,每个存储单元都被称为元素,都可存储数据,数组的各元素都应存储相同类型的数据。
为了识别数组中不同的元素,数组元素可以通过下标来访问,数组下标默认从 0开始。
定义数组
我们可以使用下面的方式定义数组。
Dim bAge(9) As Byte
本例定义了一个 Byte型数组,其下标默认从 0开始至 9结束,它的第一个元素被记为 bAge(0),
第二个元素被记为 bAge(1),依次类推。即该数组可存储 10个 Byte型数据。
定义数组还可以使用下面的方式
Dim bAge( 3 to 5 ) As Byte
其中对数组定义的含义是 bAge数组下标从 3开始至 5结束,该数组共有三个元素。
数组元素可以象普通变量一样使用,既可以存储数据,也可以读取数据,如
bAge(3)=21?为 bAge(3)元素赋值返回首页
LOGO 8.2 VBA语法基础
二维数组
前面我们定义的数组都属一维数组,即元素下标只有一个。二维数组元素有两个下标,它相当于一张由行和列组成的二维表格,
第一维下标相当于行,第二维下标相当于列。我们这样定义二维数组。
Dim sStudents(39,5 ) As Single
二维数组 sStudents拥有两个下标,由于默认下标从 0开始,所以它可以被看成一个 40行,6列的表格。
返回首页
LOGO 8.2 VBA语法基础
动态数组
在定义数组时可以不指定下标,而改在程序运行需要时再指定,即数组元素的数量是可动态改变的,这种数组被称作动态数组。
假定我们想用数组 sAges存储某班级学生的年龄,由于各班级的学生数量可能不同,因此我们在定义数组时不便指定数组大小,当班级学生数量确定后我们再指定数组的大小(即数组下标范围)。
我们先定义一个动态数组
Dim bAges( ) As Byte
如果我们知道某班有 N名学生,我们就可以重设该数组的大小。
ReDim bAges(N-1)
在定义常量、变量或数组时,如果未指定变量类型,系统默认为 Variant
型数据。
返回首页
LOGO 8.2 VBA语法基础
8.2.6 函数
函数是 VBA内置的具有某种功能的特殊程序。它就象一只黑匣子,接收外部输入的数据并向外部返回一个处理结果。函数的使用格式为:
函数名 (参数 [,…] )
如,Right(“abcdef”,2)
该函数的功能是从第一个字符串参数值的右端截取指定长度的字符。此例中将从字符串,abcdef”的右端截取 2个字符。下面的函数功能恰好与它相反,其作用是从指定字符型数据值的左端截取 2个字符。
如,Left("山东交通学院 ",2)
返回首页
LOGO 8.2 VBA语法基础
8.2.7 表达式
表达式是由常量、变量、函数、运算符和圆括号等构成。 VBA提供了丰富的运算符,其中包括算术运算符、
比较运算符、逻辑运算符和连接运算符等。参与运算的数据被称作操作数。运算符和操作数据构成表达式。
返回首页
LOGO 8.2 VBA语法基础
8.2.8 语句
按照功能不同,VBA语句可以分成三大类:
◆ 声明语句:如用于变量、符号常量或程序定义的语句;
◆ 执行语句:如赋值、程序调用和实现流程控制的语句等;
◆ 注释语句:主要用于为命令行或程序块进行注解说明,此类语句在程序运行过程中不会产生任何效果(它不会被执行),
但在程序设计过程中适当地使用注释语句有利于提高程序的可读性。
VBA注释语句既可以单独放置在一行内,也可以放置在某个语句尾部。
返回首页
LOGO 8.3 模块和过程
8.3.1 模块
模块是 VBA代码组织形式,在 Access中模块可分为两类:
◆ 类模块
◆ 标准模块。
窗体和报表模块都是类模块,而且它们各自与对应的窗体或报表相关联。窗体或报表模块通常都含有事件过程,当它们创建第一个事件过程时,Access将自动创建与窗体或报表对象相关联的类模块。
与类模块不同,标准模块不与任何对象相关联。标准模块中的程序是通用的,可以在数据库的位置被调用执行。
返回首页
LOGO 8.3 模块和过程
8.3.2 模块管理返回首页
LOGO 8.3 模块和过程
8.3.3 过程返回首页
LOGO 8.3 模块和过程
8.3.4 Sub过程 ( 子程序 )
例 8-1:创建一个 Sub过程,计算半径为 2的圆的周长 。
返回首页
LOGO 8.3 模块和过程
8.3.5 Function过程(自定义函数)
例 8-2:创建一个 Function过程,计算半径为 3.5的圆的周长。
返回首页
LOGO 8.3 模块和过程
8.3.6使用参数
例 8-3:创建一个 Function过程,计算圆的周长。
返回首页
LOGO 8.4 对象模型
8.4.1 Access对象返回首页
LOGO 8.4 对象模型
8.4.2 对象属性
Access中提供了对象属性窗口,在对象设计阶段我们可以通过属性窗口访问或设置对象属性。而在对象运行过程中,我们则需要利用宏或 VBA
来访问对象的这些属性。
访问对象属性的格式为:
对象,属性
用户既可以获取对象的属性值,也可以更改属性值。如
[Forms]![my Form].[Caption]?在立即窗口中输出窗体的 Caption值
[Forms]![my Form]![btn OK].[Visible]=False?设定对象不可见返回首页
LOGO 8.4 对象模型
8.4.3 对象事件
对象识别出了某些“动作”(即事件被触发),就有可能为这些动作作出一定的响应,事件过程就规定了对象响应的具体动作。我们可以利用对象的属性窗口为对象添加事件过程,也可以在代码窗口中定义事件过程。
事件过程的定义格式是
Private Sub 对象 _事件 ()
过程体
End Sub
例如 myForm对象的 Click事件定义如下:
Private Sub myForm_Click()
MsgBox(“您单击了我” )
End Sub
对象内置了很多事件,用户只需对自己感兴趣的事件进行设置即可;
如果对象的某事件代码空白,系统不会对此作出任何处理。
返回首页
LOGO 8.4 对象模型
8.4.4 对象方法现在我们利用 DoCmd对象关闭 myForm窗体,其使用方法是:
DoCmd.Close acForm,“myForm”
此命令中 acForm是一个系统内部符号常量,它表示窗口对象; Access
预定义了一些内部符号常量,主要用为 DoCmd命令语句中的参数,均以
ac开头。打开对象浏览器窗口,在“工程 /库”列表中选择 Access项,再在类列表中选择 <全局 >选项,就可以在右面的成员列表中找到这些符号变量了。
返回首页
LOGO 8.4 对象模型
8.4.5 With语句
With 语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。例如,要改变一个对象的多个 属性,可以在 With 控制结构中加上属性的赋值语句,
这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用 With 语句来调用同一个对象的几个方法。
With DoCom
.Close acForm,“学生基本信息”
.Close acForm,“测试窗体”
.Quit
End With
返回首页
LOGO 8.4 对象模型
8.4.6 用户自定义数据类型
在模块的“通用全局”段中,我们按下面的方式自定义一个 Student数据类型。
Type Student
No as String?8位字符
Name as String?6位字符
Sex as Boolean?设男生对应 True,女生对应 False
Birthday as Date?生日
End Type
自定义数据类型定义完成,它就可以被当作普通变量类型来使用了。
Dim Stud As Student?声明变量
Stud.No=”20051983”?为变量内的元素赋值
Debug.Print Stud.Birthday?输出变量内元素的值返回首页
LOGO 8.5 流程控制语句
8.5.1 IF / End IF结构返回首页
LOGO 2.7 数据库的管理返回首页
LOGO 2.7 数据库的管理返回首页
LOGO 2.7 数据库的管理返回首页
8.5.2 Select Case结构
LOGO 2.7 数据库的管理返回首页
例 8-8,输入 1~7间的整数,程序自动将其转换成星期数,如 3→,星期三,。
LOGO 2.7 数据库的管理返回首页
8.5.3 For/Next结构语句
例 8-10:计算 1+2+3+4+……+99+100 的和。
[分析 ]累加数据初值为 1,终值为 100,步长(数据间递变)为
1,利用 For/Next结构很容易实现它。程序代码如下。
Sub Ex8_10()
Dim n As Integer,S As Integer
S = 0 'S存储数据累加之和
For n = 1 To 100 Step 1
S = S + n
Next
Debug.Print "S=" & S
End Sub
LOGO 2.7 数据库的管理返回首页
8.5.4 Do/Loop语句
例 8-12:分析下面程序的运行结果
Sub Ex8_11 ( )
Dim n As Integer,S As Integer
S = 0
n = 1
Do
S = S + n
n = n + 1
Loop While n < 100
Debug.Print "S=" & S
End Sub
LOGO 2.7 数据库的管理返回首页
8.5.5 结构的嵌套
LOGO 2.7 数据库的管理返回首页
8.5.4 Do/Loop语句
例 8-12:分析下面程序的运行结果
Sub Ex8_11 ( )
Dim n As Integer,S As Integer
S = 0
n = 1
Do
S = S + n
n = n + 1
Loop While n < 100
Debug.Print "S=" & S
End Sub
LOGO 2.7 数据库的管理返回首页
8.5.4 Do/Loop语句
例 8-12:分析下面程序的运行结果
Sub Ex8_11 ( )
Dim n As Integer,S As Integer
S = 0
n = 1
Do
S = S + n
n = n + 1
Loop While n < 100
Debug.Print "S=" & S
End Sub
LOGO
返回首页