720 likes | 902 Views
数据库应用基础. 第 14 章 模块与 VBA 基础. 第 14 章 模块与 VBA 基础. 为了更好地支持复杂的处理和操作, Access 中内置了 VBA ,这是一种类似于 Microsoft Visual Basic 的计算机语言,它不仅可以像 VB 一样进行功能强大的各种计算处理,而且可以通过内置对象方式来访问 Access 数据库中的各种对象。 利用 VBA 可以增强 Access 数据库应用程序的功能,可以解决数据库与用户交互中遇到的许多难题,采用 VBA 编写事件过程代码是处理数据库对象各类事件的最佳方案。. 第 14 章 模块与 VBA 基础.
E N D
数据库应用基础 第14章 模块与VBA基础
第14章模块与VBA基础 • 为了更好地支持复杂的处理和操作,Access中内置了VBA,这是一种类似于Microsoft Visual Basic的计算机语言,它不仅可以像VB一样进行功能强大的各种计算处理,而且可以通过内置对象方式来访问Access数据库中的各种对象。 • 利用VBA可以增强Access数据库应用程序的功能,可以解决数据库与用户交互中遇到的许多难题,采用VBA编写事件过程代码是处理数据库对象各类事件的最佳方案。
第14章模块与VBA基础 • Access中的模块是存放VBA代码的单元,模块可以分为类模块和标准模块两类,而创建模块需要使用VBA来编写代码,因此,也应该了解VBA及相关的程序设计知识。
14.1 VBA程序设计基本要素 • 在Access中,不管是类模块或者标准模块,都是使用VBA编写的,欲正确使用模块,需对VBA有所了解。同时,应学习和掌握基本的程序设计方法,了解VBA语言成分,学会如何运用VBA编写相应代码。 • 本节主要介绍 • 程序与程序设计 • 面向对象的程序设计 • VBA的过程
14.1.1 程序与程序设计 • 为了解决某个实际问题而编排的指令序列称之为程序。程序运行时,计算机将严格按照程序中各个指令所指定的动作进行操作,从而逐步地完成预定的任务。 • 从程序的组成来看,程序是由多条指令按照一定的顺序组合而成的。 • 指令用以描述针对某个对象执行某类操作,一个程序可能要用到几十、几百、几千、几万甚至更多条指令。
14.1.2 面向对象的程序设计 • Access内嵌的VBA,采用目前主流的面向对象的编程机制。 • 所谓面向对象的程序设计就是将待解决某个问题的全套解决方案作为一个对象来进行分析,也可以将问题中涉及到的具体事物作为对象。 • 面向对象程序设计技术考虑了现实世界与面向对象空间的映射关系,追求的是软件系统对现实世界的直接模拟,尽量实现将现实事物直接映射到软件系统的空间中。
14.1.2 面向对象的程序设计 • 基本概念__对象 • 现实世界中任何有明确意义的事物称为实体。实体既可以是具体的事物,也可以是人为的概念。 • 一般来说,客观世界中的任何实体,通常都具有一些静态特性和动态行为,而动态行为一般只有在发生了特定的事件时才会表现出来。 • 在面向对象程序设计方法中,将描述实体静态特性的数据以及对这些数据施加的所有操作封装在一起而构成的统一体称为对象。
14.1.2 面向对象的程序设计 • 进行程序设计时,在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象。 • 在程序实现时,对象可以表现为一个窗口、窗口中的一个按钮、一个图画框、一个表格等可视的程序组件,还可以表现为变量、文件等不可视的程序元素。
14.1.2 面向对象的程序设计 • 基本概念__类 • 类用来描述某种具有相同属性和行为的事物。 • 对象是类的实例,是类的具体的体现者。 • 类是对象的原型,它描述该类任一对象的共同行为特征,是对一组性质相同对象的计算机语言描述,概括了对象的共同的数据结构和操作。
14.1.2 面向对象的程序设计 • 基本概念__类 • 在计算机程序中的类可以看做模板,而对象则是用模板做出来的东西,是类的实例,拥有类中定义的一切行为特性。 • 例如,创建一个窗体对象,就是生成窗体类的一个实例。面向对象的程序设计语言中,窗体已经事先被定义成了一个类,如果需要的话,就可以按照窗体类的定义分别生成多个具体的窗体对象,用不着一个窗体一个窗体的编写代码来实现了。
14.1.2 面向对象的程序设计 • 基本概念__属性 • 对象中描述实体静态特性的数据称为(对象的)属性。 • 属性有两个成分,一是名称,二是属性值。属性名用以区分对象的不同特征,属性值则表现了该特征的具体形态。在程序设计时,可以设置对象的属性值。在程序运行时,可以引用属性的值,或者改变某些属性的值。 • Access中,访问属性的格式为: <对象名>.<属性名>
14.1.2 面向对象的程序设计 • 基本概念__方法 • 对象中用以模拟实体动态行为的“对数据施加的操作”称为(对象的)方法。 • 方法是封装在对象之中的特定的程序段,叫做方法过程。在程序中,使某个方法执行称为调用该方法。 • VBA中调用方法的格式为: <对象名>.<方法名> [<参数>] DoCmd.OpenForm "查找学生"
14.1.2 面向对象的程序设计 • 基本概念__事件、事件过程 • 导致某个对象的“操作”被执行的过程称为事件。某个事件发生时,对象所执行的操作称为事件响应。 • 面向对象的程序设计语言为每一个对象都预先定义了许多事件,一个事件发生时系统要作何响应,需要由程序员根据具体功能来编写相应的响应代码,该代码称做事件过程。
14.1.3 VBA的过程 • 所谓过程,从形式上来看就是指一段利用程序设计语言编写的代码,其实,就是由一组语句组成的,用于实现一个相对独立的功能的程序单位。 • Access的模块是用来存放过程的容器,写好的代码都保存在模块中。通常,模块可以由一或多个过程构成。 • VBA程序设计的核心就是怎样编写这些过程。
14.1.3 VBA的过程 • VBA中的过程包括两类:子程序(Sub)过程和函数(Function)过程。 • 子程序过程一般是完成一系列的操作,没有返回值,比如说进行排序操作、打印数据等。子程序过程的的基本框架如下: Sub <子程序过程名>(<参数表>) <语句1> <语句2> …… <语句n> End Sub
14.1.3 VBA的过程 • 函数过程和子程序过程的最大区别是:编写函数过程的目的是为了获得一个值,即函数值。其基本的框架如下 Function <函数过程名>(<参数表>) As <类型> <语句1> <语句2> …… <语句n> [<函数过程名>=<表达式>] End Function
14.1.3 VBA的过程 • 在Access中,对象(窗体、报表和控件)都可以响应一组事件,而每个对象的每个事件都对应一个事件过程,事件过程本质上属于子程序过程,所以其基本框架与子程序过程一致。如果将代码添加到某个对象的某个事件过程中,一旦相应的事件发生,则事件过程中包含的代码就得到执行。
14.2 模块 • 在Access中,模块与宏同样是可用于向数据库中添加功能的对象。 • VBA (Visual Basic for Applications )是Microsoft Visual Basic 的宏语言版本,用于编写基于 Microsoft Windows 的应用程序,内置于包括Access在内的多个 Microsoft 程序中。 • 在Access中,可以用VBA来编写模块。
14.2 模块 • 模块根据不同的存在方式和使用范围可以分为类模块与标准模块两种。 • 在导航窗格的“模块”下列出了当前数据库所有已经定义的标准模块,但没有列出类模块,因为类模块是附加到窗体或报表中的。
14.2.1类模块 • 对于一个窗体,如果希望在用户鼠标单击窗体上的一个按钮时,由系统自动调用一段VBA程序进行特定的计算处理,那么必须在该窗体上定义事件过程,用于响应触发的事件。 • 此时,该窗体需要附加一个类模块,并将相应的事件过程保存在类模块中。对于报表,也可以在需要的情况下附加一个类模块。 • 在多数情况下,窗体或报表不需要使用事件过程,也不需要类模块。
14.2.1类模块 该窗体或报表不含类模块 含类模块时的情况
14.2.1类模块 • 附加到窗体(报表)的类模块,也称为窗体模块(报表模块),此类模块中包含在指定的窗体(报表)或其控件上事件发生时触发的所有事件过程的代码。 • 此外,类模块还指含有类定义的模块。
14.2.2 标准模块 • 标准模块为只包含过程、类型以及数据的声明和定义的模块。 • 标准模块独立于任何窗体和报表,一般用于存放可供其他Access数据库对象使用的公共过程或者变量、常量等内容。 • 标准模块创建以后,在导航窗格的“模块”下可以看到相应的模块名称。双击模块名称,将在VBA中打开该模块,此时可以看到构成该模块的全部代码。
14.2.3创建和编辑模块 • 模块和过程的创建与编辑均涉及到VBA代码设计,VBA代码设计需要在Visual Basic编辑环境中进行。 • 如何进入Visual Basic编辑环境取决于所要创建的模块类型。
14.2.3创建和编辑模块 • 创建和编辑类模块 • 如果需要创建或者编辑窗体或者报表中的事件过程代码,可以在设计视图中打开窗体或报表,然后按快捷键Alt+F11即可进入Visual Basic编辑窗口。 • 也可以通过以下步骤: • 切换到“窗体设计工具”的“设计”选项卡; • 在“工具”选项组中单击“查看代码”按钮,即可进入Visual Basic编辑环境。 查看代码按钮
14.2.3创建和编辑模块 • 如果需要为窗体或报表上的一个控件编写事件过程,同样首先进入窗体或报表的设计视图,然后按照如下步骤: • 双击需要编写事件过程的控件,打开“属性表”窗格; • 选择“属性表”窗格的“事件”选项卡; • 单击相应事件名称右侧的“…”按钮,这时打开“选择生成器”对话框。 • 选择“选择生成器”对话框中的“代码生成器”并单击“确定”按钮,即可进入Visual Basic编辑环境。
14.2.3创建和编辑模块 • 创建或编辑标准模块 • 如需建立一个新的标准模块,可以切换到数据库窗口中的“创建”选项卡,在“其他”选项组中单击“宏”按钮,打开下拉菜单,如图14.3所示,选择下拉菜单中的“模块”命令将建立一个新的标准模块,选择“类模块”命令将建立一个新的类模块,并进入Visual Basic编辑窗口中该模块的编辑界面。
14.2.3创建和编辑模块 • 需要编辑一个已经存在的标准模块,可以采用以下方法之一: • 在数据库窗口“导航窗格”双击模块名; • 在数据库窗口“导航窗格”右击模块名,并在弹出的菜单中选择”设计视图”命令; • 切换到“数据库工具”选项卡,在“宏”选项组中单击”Visual Basic”按钮; • 直接按快捷键“Alt+F11”。
标准工具栏 对象列表 事件列表 代码窗口 工程资源管理器窗口 属性窗口 代码窗口 14.2.4 Visual Basic编辑环境 • 在Visual Basic编辑环境,可以创建或者编辑窗体模块、报表模块、标准模块和类模块的代码。
14.2.4 Visual Basic编辑环境 • “通用声明段”位于代码窗口的起始位置,在所有过程之前,该位置一般用于定义整个模块中需要使用的变量或者类型。窗体(或报表)模块同样也具备通用声明段。 对象下拉列表 事件下拉列表
14.2.4 Visual Basic编辑环境 • 在标准模块中创建一个自定义过程的步骤如下: • 将光标定位到通用声明段之后且在所有过程之外的一个空白行; • 输入过程的第一行代码:sub <过程名>( ),VBA会自动添加最后一行End Sub; • 将代码输入到过程的框架之间即可。
工程资源管理器 对象浏览器 运行宏 Access视图 插入模块 设计模式 工具箱 属性窗口 14.2.4 Visual Basic编辑环境 • 在VBA编辑环境中,默认显示“标准”工具栏,它可以帮助用户快速创建新的模块及其过程,也包括编辑、调试代码的常用按钮。
14.2.5 模块调试、编译 • 立即窗口 • 在立即窗口中调用过程时,输入过程名后按回车键即可(目前暂不考虑过程的参数)。此外,立即窗口也可以用于程序执行结果的输出。
14.3 VBA数据类型与表达式 • VBA中的过程由若干语句组成。语句中最核心的是表达式,构成表达式的基本元素则是变量、常量、函数和运算符。 • 所以,在介绍VBA的语句之前,首先需要学习语句中的基本元素。 • 本节主要内容 • 数据类型 • 变量 • 符号常量 • 函数 • 表达式
14.3.1 数据类型 • 数据类型是指数据值在计算机内存中的存储方式,同时也就是对该值的一种限制。 • 例如,限制该数据取值的大小、有效位数,是否含有小数部分等等。 • 不同类型的数据,由于使用它们的目的不同,也就引起其在内存中的存放方式的不同。简单的说,不同类型的数据值在内存中占用的内存字节数是不同的。
14.3.1 数据类型 • 数值类型 • 数值类型是指可以进行算术运算的数据类型,字节型、整型、长整型、单精度、双精度、货币型都属于数值类型。 • 其中,字节、整型、长整型用于存储一个整数,它们的差别为取值范围不同以及在内存所占用的字节数不同。整型、长整型可以有符号,例如:-10,21,100,-5007等;但字节型只能是无符号数,也就是不能带上正负号,例如:10、105等。
14.3.1 数据类型 • 数值类型 • 单精度、双精度、货币类型都属于实数,可以带有小数点和小数部分。但货币类型属于定点数,也就是小数部分的位数是固定的,VBA中的货币型保留有4位小数,整数部分可达15位有效数字。而单精度和双精度数则属于浮点型,小数部分的位数可以是浮动的,由于它们占据的计算机内存不同,所以表达数据的精度也不一样,双精度数的精度更高。 • VBA中的单精度数和双精度数都可以有两种表达形式:一种是小数表示,如:1.23、-256.78、0.00378等;另一种是指数表示法,例如:1.3023E-16,其意义为1.3023×10-16;-2.3342D+14,其意义为-2.3342×10+14。底数和指数之间的分隔符用“E”则表示这个数是单精度数,用“D”则表示这个数是双精度数。
14.3.1 数据类型 • 布尔型(Boolean) • 布尔型数据的值仅有两种,即True(真)或False(假),这种值通常称为逻辑值。布尔型数据一般用于表示仅具有两种状态的现象。例如,用True表示条件“成立”,用False表示条件“不成立”等。 • VBA中,数值类型可以与布尔类型数据进行互换:当数值型数转换为布尔型时,0会转换为False,其他非0值转换为True。当把布尔值转换为数值型时,False转换为0,True转换为-1。
14.3.1 数据类型 • 字符串型(String) • 字符串型用于存储一切可打印的字符的序列。例如,姓名、地址、标题等等。VBA中字符串的表达方法是用双引号作为定界符,例如:″Visual Basic for Application″、 ″中华人民共和国 ″等。
14.3.1 数据类型 • 日期型(Date) • 日期型数据用来表示日期和时间。可以表示日期的范围从公元100年1月1日至9999年12月31日。时间的范围从0:00:00到23:59:59。日期型数据用两个“#”符号把表示日期和时间的值括起来,例如,#10/28/2001#、#17:04:23#、#10/28/2001 10:46:01 pm#等。通常所采用的日期格式为:月/日/年(mm/dd/yyyy),时间格式为:时:分:秒 AM/PM(hh:mm:ss AM/PM)。也可以把日期和时间组合在一起,形成日期时间,这时,在日期与时间部分间用一个空格隔开。
14.3.1 数据类型 • 变体型(Variant) • 变体型可以表示任何数据类型值,包括数值、字符串、日期等。变体型数据表示数值型数据时,占用16个字节的存储空间,最大可达Double类型的取值范围,表示字符串时占用的存储空间和字符串中的字符个数有关。
14.3.2 变量 变量在程序设计中起到了非常重要的作用,就像数学中的变量那样,变量代表着一种值可以变化的量。 在程序设计中,变量与数学中的变量概念有相同点,也有许多不同,变量的概念在程序设计中得到了拓展和延伸。 一个变量可以存储一个值,在程序中,可以根据需要修改变量的值,但需注意的是:一旦给变量一个新值,它原来的值将被覆盖。
14.3.2 变量 • 变量名 • 程序中,变量是通过变量名来访问的,所以每一个变量都必须有变量名,为变量命名应该遵循一定的规则: (1) 变量名只能由字母、数字和下划线组成。 (2) 变量名的第一个字符必须是字母。 (3) 组成变量名的字符数不得超过255个字符。 (4) 不能用VBA的保留字当作变量名,因为保留字已经定义为具有特定意义的名称。
14.3.2 变量 • 在给变量命名时,应注意以下几点: (1) 取名最好使用有明确实际意义、容易记忆以及通用的变量名,即要见名知义。比如用Student_Num代表学生学号等。 (2) 变量名不宜过长,太长不便于阅读和书写。 (3) 变量名不能与过程名和符号常量名相同,更不能用该语言的保留字做变量名。 (4) 尽量采用所用高级程序设计语言建议的变量名前缀或后缀的约定来命名,以便区分变量的类型,如intMax,strName。 • VBA中变量名不区分大小写,为了便于阅读,建议大小写混合使用组成变量的名字,如strName。
14.3.2 变量 • 变量的声明就是指定该变量所属的数据类型,以便系统为该变量在内存中分配一个与其类型相应的存储空间。变量声明的方法有两种: • 显式声明 • Dim|Public|Private|Static <变量名1> As <类型1> [,<变量名2> As <类型2>…] • 隐式声明 • 如果变量声明时不指定类型,仅仅指定一个变量名,则该变量被默认为Variant类型。另外,VBA也允许变量不声明而直接使用,这种变量的类型通用也默认为Variant类型