1.47k likes | 1.76k Views
第 8 章 Access 的编程工具 VBA. 宏毕竟功能有限。和宏相比, VBA 编程除了可以实现更复杂的功能外,还有使数据库易于维护的特点。. 8.1. 8.2. 8.3. 8.4. 8.5. 8.6. 8.7. VBA 程序设计概述. VBA 编程基础. VBA 程序流程控制. VBA 数组. VBA 模块的创建. VBA 程序的调试. VBA 的数据库编程. 第 8 章 Access 的编程工具 VBA. 8.1 VBA 程序设计概述. 8.1.1 VBA 编程环境 8.1.2 面向对象程序设计的概念. 关于 VBA.
E N D
第8章 Access的编程工具VBA • 宏毕竟功能有限。和宏相比,VBA编程除了可以实现更复杂的功能外,还有使数据库易于维护的特点。
8.1 8.2 8.3 8.4 8.5 8.6 8.7 VBA程序设计概述 VBA编程基础 VBA程序流程控制 VBA数组 VBA模块的创建 VBA程序的调试 VBA的数据库编程 第8章 Access的编程工具VBA
8.1 VBA程序设计概述 • 8.1.1 VBA编程环境 • 8.1.2 面向对象程序设计的概念
关于VBA • BASIC • Beginner’s All-purpose Symbolic Instruction Code • 初学者万用符号指令代码 Visual Basic Windows环境下的应用程序开发工具,它是可视化的、面向对象的、采用事件驱动方式的高级程序设计语言
VBA 是Microsoft Office内置的编程语言,是根据Visual Basic简化的宏语言,其基本语法、词法与Visual Basic基本相同,因而具有简单、易学的特点。 与Visual Basic不同的是,VBA不是一个独立的开发工具,一般被嵌入到像Word、Excel、Access这样的宿主软件中,与其配套使用,从而实现在其中的程序开发功能。
8.1.1 VBA编程环境 • 在Office中使用的VBA开发界面被称为VBE(Visual Basic Editor),它具有编辑、调试和编译Visual Basic程序的功能
从Access数据库窗口切换到VBE环境: • 在数据库窗口新建或打开一个模块对象 • 选择“工具”→“宏”→“Visual Basic编辑器”命令 • 使用标准工具栏上的“代码”按钮 另外,也可以在设计窗体、报表时转到VBE环境
标准工具栏 属性窗口 代码窗口 工程资源管理器 立即窗口
1.工具栏 包括标准、编辑、调试和用户窗体工具栏 2.工程资源管理器窗口 列出当前应用程序中的所有窗体、报表和VBA程序模块 3.代码窗口 显示、编辑模块中的程序代码 4.属性窗口 列出所选对象控件的各种属性
4.属性窗口 列出所选对象控件的各种属性 可以在Access数据库环境的属性窗口设置对象的各种属性值,也可以在VBE环境的属性窗口设置对象的各种属性值。 5.立即窗口 用来在调试程序的过程中给变量临时赋值或输出变量或表达式的值。在VBA中,通常使用Debug对象的Print方法进行输出。
8.1.2 面向对象程序设计的概念 VBA采用了面向对象的程序设计方法。
1.对象和集合 对象:在采用面向对象程序设计方法的程序中,程序处理的目标被抽象成了一个个对象,每个对象具有各自的属性、方法和事件。 类:是对一类相似对象的定义和描述。因此类可看做是对象的模板,每个对象由类来定义。 对象集合:是由一组对象组成的集合,这些对象的类型可以相同,也可以不同。
Access有几十个对象,其中包括对象和对象集合。所有对象和对象集合按层次结构组织,处在最上层的是Application对象,即Access应用程序,其他对象或对象集合都处在它的下层或更下层。Access有几十个对象,其中包括对象和对象集合。所有对象和对象集合按层次结构组织,处在最上层的是Application对象,即Access应用程序,其他对象或对象集合都处在它的下层或更下层。 Access程序中的常用对象
2.属性和方法 • 对象的特征用属性和方法描述。 • 属性:用来表示对象的状态,如窗体的Name(名称)属性、Caption(标题)属性等。 • 方法:用来描述对象的行为,如窗体有Refresh方法,Debug对象有Print方法等。 引用对象的属性或方法时应该在属性名或方法名前加对象名,并用对象引用符“.”连接 例如 Me!Label1.caption="春江水暖鸭先知" Debug.print "你好!"
3.事件和事件过程 • 事件:是对象可以识别的动作,通常由系统预先定义 • 事件过程:对象在识别了所发生的事件后执行的程序 例如,下面的事件过程描述了单击按钮之后所发生的一系列动作。 Private Sub Command1_Click() Me!Label1.Caption = "首都经济贸易大学" Me!Text1 = "" End Sub
8.2 VBA编程基础 • 8.2.1 数据类型 • 8.2.2 常量 • 8.2.3 变量 • 8.2.4 函数 • 8.2.5 表达式
8.2.1 数据类型 • VBA的数据类型共有13种。每种数据类型的数据在存储时所占的存储空间和处理时能够进行的运算都不相同。
VBA的数据类型 续表
8.2.2 常量 • 常量就是其值在程序运行期间不变的量。常量又分 • 字面常量 • 符号常量 • 固有常量
1.字面常量 • 字面常量是常量按照其实际数值表示。 (1)各种数字型常量。如123、−0.005,也可以用指数形式,如1250.0可写成1.25E+3。 (2)字符型常量。如"Visual"、"北京"。 (3)日期型常量。按8字节的浮点数来存储。 如#2007-1-1#、#1/1/2007#,#2002-5-4 14:30:00 PM#。 (4)布尔型常量:只有两个值True或False。
2.符号常量 • 如果程序中多处用到某个常量,将其定义成符号常量可增加代码的可读性,也便于维护。 用关键字Const定义符号常量: Const PI as single=3.1415926
3.固有常量 • 这是一类特殊的符号常量,通常已经预先在类库中定义好,编程者只要直接使用这些已经定义好的符号常量即可。 例如 VBA类库中,vbRed代表红色,vbBlue代表蓝色。 这里开始的两个字母表示所在的类库 Access类库的常量以ac开始,如acForm等。 ADO类库的常量以ad开始,如adOpenKeyset。
8.2.3 变量 • 变量是其值在程序运行期间变化的量 ,程序运行时,变量代表的就是内存中的某块临时存储空间
(1)以字母或汉字开头,后可跟字母、数字或下划线。(1)以字母或汉字开头,后可跟字母、数字或下划线。 (2)变量名最长为255个字符。 (3)不区分变量名的大小写,不能使用关键字。 (4)字符之间必须并排书写,不能出现上下标。 以下是合法的变量名: a,x, x3, BOOK_1,sum5 以下是非法的变量名: 3s s*T -3x bowy-1 if • 1.变量的命名规则
一般,变量在使用前应该先声明。 格式为 Dim 变量名 [AS 类型] 例如 Dim ab As integer , sum As single 如果省略“AS 类型”,则所定义的变量为Variant型。 • 2.变量的声明 VBA允许用户在编写应用程序时,不声明变量而直接使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。 建议在程序中显式声明变量
8.2.4 函数 • VBA提供了大量的内置函数,这些函数极大地丰富了VBA的功能 • 了解和使用函数,应从下面三个方面: • 函数名 • 参数(指参数的个数、顺序和类型 ) • 函数值
按照函数的功能,VBA的内置函数可分为 • 数学函数 • 字符串函数 • 日期函数 • 转换函数 • 等。具体介绍可见附录B。
下面主要介绍专门负责输入输出的函数MsgBox函数和InputBox函数下面主要介绍专门负责输入输出的函数MsgBox函数和InputBox函数 • 1.MsgBox函数 功能:在对话框中显示消息,等待用户单击按钮,并返回一个Integer型数值,告诉用户单击的是哪一个按钮。格式为 MsgBox(提示[,按钮、图标和默认按钮][,标题])
例如,下面的程序是某个窗体中单击“退出”按钮后执行的动作。运行时先显示消息框,并将返回的结果赋给Integer型变量Response。如果单击“是”按钮,则关闭当前窗体,否则返回到当前窗体。例如,下面的程序是某个窗体中单击“退出”按钮后执行的动作。运行时先显示消息框,并将返回的结果赋给Integer型变量Response。如果单击“是”按钮,则关闭当前窗体,否则返回到当前窗体。 Private Sub cmd退出_Click() Dim response As Integer response = MsgBox("真的要退出吗?", vbYesNoCancel + _ vbQuestion, "提示") If response = vbYes Then DoCmd.Close End If End Sub
2.InputBox函数 功能:在对话框中显示提示信息,等待用户输入正文并按下按钮,返回文本框中输入的内容(String型)。格式为 InputBox(提示[,标题][,默认]) 例如 strName = InputBox("请输入您的姓名", "输入", "张三")
8.2.5 表达式 • 表达式是将常量、变量、字段名称、控件的属性值和函数用运算符连接而成的运算式。 • VBA中有5类运算符,使用这些运算符可以分别构成算术表达式、字符表达式、关系表达式、布尔表达式和对象引用表达式。
字符运算符只有1个&,作用是连接两个字符串。字符运算符只有1个&,作用是连接两个字符串。 例如,字符串表达式:“中国”& “北京”,运算的结果为字符串“中国北京” • 2.字符串表达式
关系运算符用来实现数据的比较,结果为逻辑值True或False。关系运算符有7个,它们有相同的优先级4。关系运算符用来实现数据的比较,结果为逻辑值True或False。关系运算符有7个,它们有相同的优先级4。 • 3.关系表达式
布尔表达式也叫逻辑表达式,用来实现对逻辑量True和False的运算布尔表达式也叫逻辑表达式,用来实现对逻辑量True和False的运算 • 4.布尔表达式
对象引用运算符有2个:“!”和“.”,表达式的结果为被引用的对象或被引用对象的属性值或方法。对象引用运算符有2个:“!”和“.”,表达式的结果为被引用的对象或被引用对象的属性值或方法。 • 5.对象引用表达式
8.3 VBA程序流程控制 • 8.3.1 程序的顺序控制 • 8.3.2 程序的分支控制 • 8.3.3 程序的循环控制
程序由语句组成。每个程序语句由关键字、标识符、运算符和表达式等组成。每条语句指明了计算机要进行的具体操作。程序由语句组成。每个程序语句由关键字、标识符、运算符和表达式等组成。每条语句指明了计算机要进行的具体操作。 • 按照语句所执行的功能,VBA的程序语句有赋值语句、声明语句、控制语句、注释语句等。
赋值语句 • 是最基本的语句。它的功能是给变量或对象的属性赋值。其格式为 • <变量名>=<表达式> 或 <对象名.属性>=<表达式> • 例如, • Rate = 0.1 ‘给变量赋值 • '给控件的属性赋值 • Me!Text1.Value = "欢迎使用ACCESS " “=”为赋值号,表示赋值的动作,不要理解为数学上的等号。
书写原则 • (1)VBA代码中不区分字母的大小写。除汉字外,全部字符都用半角符号。 • (2)在程序中可适当添加空格和缩进。 • (3)一般一行书写一条语句,多条语句写在同一行时用“;”分开,一条语句分多行写时用1个空格加下划线“ _”续行。例如, • response = MsgBox("真的要退出吗?", vbYesNoCancel _ • + vbQuestion, "提示") • (4)应养成及时注释的好习惯。在VBA中有两种方法可以添加注释,一是在行前用rem关键字开始,二是在行前或行末用单引号“'”开始。
8.3.1 程序的顺序控制 • 程序的三种基本控制结构是顺序结构、分支结构和循环结构 顺序结构是最简单的一种结构,程序运行时,计算机按照语句的排列顺序依次执行程序中的每一条语句。
例8-1 创建如图8-5所示的窗体“计算圆的面积和周长”。要求在文本框中输入了圆的半径后,单击“计算”按钮,在窗体的另外两个文本框中分别输出圆的面积和周长。
本例除了采用第5章介绍的方法制作窗体外,最关键的是编写“计算”按钮的单击事件本例除了采用第5章介绍的方法制作窗体外,最关键的是编写“计算”按钮的单击事件 为按钮添加事件代码的方法是,用鼠标右键单击按钮,在弹出的快捷菜单中选择“事件生成器”命令,在打开的“选择生成器”对话框中选择“代码生成器”选项,转到VBE环境。
“计算”按钮的Click事件过程如下。 Private Sub cmd计算_Click() '定义变量和符号常量 Dim r As Single 'r为圆的半径 Dim s As Single 's为圆的面积 Dim l As Single 'l为圆的周长 Const PI As Single = 3.1415926 '给变量r赋值 r = Me!txt半径 '计算圆的面积和周长 s = PI * r ^ 2 l = 2 * PI * r '用文本框输出结果 Me!txt面积 = s Me!txt周长 = l End Sub
8.3.2 程序的分支控制 • 类似条件宏,分支结构是用条件来控制语句的执行。在VBA中,执行分支结构控制的语句有If语句和Select Case语句。
1.If…Then…Else语句 ‘输入两个数并在立即窗口输出其中较大的数 Dim x As Integer, y As Integer x = InputBox("请输入x的值:") y = InputBox("请输入y的值:") If x > y Then Debug.Print x Else Debug.Print y End If 语句格式为 If <表达式> Then <语句块1> Else <语句块2> End If
说明: (1)<表达式>可以是任何表达式,一般为关系表达式或布尔表达式。如果是其他表达式,则非0认为是True,0认为是False。 (2)执行时,先判断表达式的值,为True则执行语句块1,否则执行语句块2。 (3)如果语句较短,也可以采用下面的单行形式将整个语句写在一行上。 If x > y Then Debug.Print x Else Debug.Print y (4)使用过程中有时没有语句块2,这时If语句变为单分支结构。其语句格式为 If <表达式> Then <语句块1> End If
例8-2 用VBA程序实现窗体“系统登录”。 与第7章不同,本例中对用户名和口令的检验改为用VBA程序代码,触发并执行这些代码的条件仍然是单击“确定”按钮。
“确定”按钮的Click事件过程 Private Sub cmd确定_Click() Dim name As String, pass As String Dim r As Integer '存放MsgBox消息框的返回值 name = Me!txt用户名 pass = Me!txt口令 If pass = "1234" And name = "cueb" Then '如果用户名和口令正确,显示消息框,运行"学生管理模块"窗体 MsgBox "欢迎进入学生管理模块!", vbOKOnly + vbCritical, "欢迎" DoCmd.Close '关闭系统登录窗体 DoCmd.OpenForm "学生管理模块" '打开"学生管理模块"窗体 Else MsgBox "密码错误!", vbOKOnly '显示消息框 Me!txt用户名 = "" '使文本框清空 Me!txt口令 = "" Me!txt用户名.SetFocus '使文本框获得焦点,准备重新输入 End If End Sub