第12章 VBA编程 虽然Access的交互操作功能非常强大且易于掌握,但是在实际的数据库应用系统中,用户还是希望尽量通过自动操作达到数据库管理的目的。应用程序设计语言在开发中的应用,可以加强对数据管理应用功能的扩展。Office中包含Visual Basic for Application(VBA),VBA具有与Visual Basic相同的语言功能,它为Access提供了无模式用户窗体以及支持附加Active X控件等功能。本章将简要介绍VBA的编程。
教学重点与难点 VBA的编程环境 常量、变量和数组 程序流程控制 创建VBA模块
12.1 VBA编程环境 Access利用Visual Basic编辑器(VBE)来编写过程代码,它以微软的Visual Basic编程环境的布局为基础,实际上是一个集编辑、调试、编译等功能于一体的编程环境。所有的Office应用程序都支持Visual Basic编程环境,而且其编程接口都是相同的。使用该编辑器可以创建过程,也可以编辑已有的过程。 帮助输入 显示提示信息 形成良好的程序设计风格 使用书签 调试手段
下图为一个VBE窗口,窗口中的各个部分已经给出了相应标识。
12.2 VBA程序设计基础 VBA(Visual Basic for Application)是Visual Basic语言的一个子集,集成了整个Office产品套件中的开发语言和开发环境。作为Office产品系列的一个重要组成部分,Microsoft Access也是使用VBA语言作为其代码设计的开发语言。本节将简要介绍VBA语言的基本结构和语法。 常量、变量和数组 数据类型
12.2.1 常量、变量和数组 在VBA中,程序是由过程组成的,过程又由根据VBA规则书写的指令组成。一个程序包括常量、变量、运算符、语句、函数、数据库对象和事件等基本要素。 常量 变量 数组
12.2.2 数据类型 VBA语言的数据类型包括布尔型(Boolean)、日期型(Date)、字符串(String)、货币型(Currency)、字节型(Byte)、整数型(Integer)、长整型(Long)、单精度型(Single)、双精度型(Double)以及变体型(Variant)和用户自定义型。
12.3 程序流程控制 与传统的程序设计语言一样,Visual Basic也具有结构化程序设计的3种结构:顺序结构、选择(分支)结构和循环结构,下面重点介绍选择结构和循环结构。 选择结构 循环结构
12.3.1 选择结构 选择结构有If语句和Select Case语句两种。 12.3.1 选择结构 选择结构有If语句和Select Case语句两种。 If语句是一类比较简单的条件控制语句,可以通过紧跟在If后面的表达式的值,判断出在其影响范围下的语句是否被执行。 如果在If语句中,一个表达式有多个可选值,并且需要为这些可选值建立不同的执行语句,例如选项组控件可以通过不同的值来判断选项组中到底是按下哪个按钮,这样的语句设计通过If语句不方便实现,这时就需要使用Select Case语句。
12.3.2 循环结构 编程中经常要需要重复执行某些操作,这时就需要通过循环语句来判断并执行这些循环操作。VBA提供了多种循环控制语句,其中常用的包括Do…Loop语句、For…Next语句以及While…Wend语句等。 Do…Loop语句 For…Next语句 While…Wend语句 GoTo语句
12.4 Access对象模型 Access提供的对象模型可以将数据库功能与自定义的解决方案集成起来。通过使用Access对象模型,可以实现对事件编程、创建Access窗体和报表以及设置引用等。对象模型提供了一些对象,Access内部应用程序可以使用这些对象。 对象 对象集合 对象模型
12.4.1 对象 VBA与传统语言的重要区别之一就是它是面向对象的。对象是Visual Basic程序设计的核心。事实上,窗体和控件都是对象,数据库也是对象,对象到处都存在。一旦理解如何引用应用程序对象模型中的对象,就能够使用对象及其特性来建立自己的解决方案。当然,也可以将对象理解为封装数据和代码的客体,它是代码和数据的集合。 属性 方法 事件
12.4.2 对象集合 对象集合是一个包含几个其他对象的对象,而这些对象可具有不同的类型,并且对象的位置均可改变。Access窗体具有以下3种集合,如下图所示,其中填充色为灰色的表示集合。
12.4.3 对象模型 对象模型实际上给出了基于对象程序的结构,通过定义程序中所使用对象之间的关系,对象模型能够以一种比编程更容易的方式来组织对象。 Access中的窗体模型包括的对象类型有:控件、集合和集合中的对象。 窗体对象模型的每个元素都具有一系列的属性、方法和事件,可以利用方法使应用程序按照要求进行工作。在VBA中,各个对象之间也不是孤立的,而是彼此之间存在着包含与被包含的关系。
12.5 创建VBA模块 模块是将VBA代码的声明、语句和过程作为一个单元进行保存的集合,是基本语言的一种数据库对象,数据库中的所有对象都可以在模块中进行引用。利用模块可以创建自定义函数、子程序以及事件过程等,以便完成复杂的计算功能。模块可以代替宏,并可以执行标准宏所不能执行的功能。 模块的定义和创建 过程的创建 过程的调用
12.5.1 模块的定义和创建 Access模块有两种基本类型:类模块和标准模块。模块中的每一个过程都可以是一个Function过程或一个Sub过程。 类模块 标准模块
12.5.2 过程的创建 过程是包含VBA代码的基本单位,可以完成一系列指定的操作。过程由计算的语句和方法组成,通常分为Sub过程、Function过程和Property过程。其中,Sub过程是最常用的过程类型,也称为命令宏,可以传送参数和使用参数来调用它,但不返回任何值;Function过程也称为自定义函数过程,其运行方式和使用程序的内置函数一样,即通过调用Function过程获得函数的返回值;Property过程能够处理对象的属性。
12.5.3 过程的调用 Call语句用来调用过程,也可调用Visual Basic的函数和自定义函数,两者均采用如下的格式: 12.5.3 过程的调用 Call语句用来调用过程,也可调用Visual Basic的函数和自定义函数,两者均采用如下的格式: [Call] name [argumentlist] 其中name表示被调用过程的名称,argumentlist表示参数列表,各参数间必须以逗号隔开。 在窗体过程(例如事件过程)中可以直接调用标准模块中的过程,但也可通过标准模块的名称来调用。在标准模块的过程中调用窗体模块中的过程时,必须以Visual Basic格式指出窗体名,例如“Form_员工信息.name”。
12.6 VBA代码的保护 在开发数据库产品以后,为了防止其他人查看或更改VBA代码,需要对该数据库的VBA代码进行保护。保护VBA代码的措施主要有两种:对VBA代码设置密码保护或生成MDE文件保护。 设置密码保护Visual Basic代码 生成ACCDE文件
12.6.1 设置密码保护Visual Basic代码 用户可以通过对VBA代码设置密码来防止其他非法用户查看或编辑数据库中的程序代码。
12.6.2 生成ACCDE文件 除了使用密码保护VBA代码以外,还可以通过创建ACCDE文件保护程序代码。ACCDE文件是旧版本Access中的.mde 文件的Access 2007版本。