1.32k likes | 1.57k Views
第 15 章 VBA 程序设计. 主要内容. 15.1 VBA 编程的基本概念 15.2 VBA 编程的基本知识 15.3 VBA 的编程界面 15.4 基本控制结构 15.5 过程 15.6 VBA 编辑的调试方法及错误处理. 15.1 VBA 编程的基本概念. VBA ( Visual Basic for Applications) 是在 Office 中开发高级应用时所使用的一个通用程序语言。. VBA 将 VB 引入 Office 中,使其成为其他 Office 组件通用的程序开发工具。. 15.1 VBA 编程的基本概念.
E N D
主要内容 15.1 VBA编程的基本概念 15.2 VBA编程的基本知识 15.3 VBA的编程界面 15.4 基本控制结构 15.5 过程 15.6 VBA编辑的调试方法及错误处理
15.1 VBA 编程的基本概念 VBA(Visual Basic for Applications) 是在Office中开发高级应用时所使用的一个通用程序语言。 VBA将VB引入 Office 中,使其成为其他Office组件通用的程序开发工具。
15.1 VBA 编程的基本概念 15.1.1 面向对象的编程思想 • 1. 面向对象基本概念 • 以对象为基础 • 以事件或消息来驱动对象 • 以数据为中心而不是以功能为中心 • 将数据和对数据的操作封装在一起 • 采用数据抽象和信息隐蔽技术
1)对象的概念与类的确定 对象是类的一个实例,是组成一个系统的基本逻辑单元,是具有某些特征的具体事物的抽象。 每个对象都具有属性和行为。 类是创建对象的模板,是一组具有相同属性和行为的对象的集合,它在整体上代表一组对象,它为属于该类的全部对象,提供了统一属性和行为两个主要部分的抽象描述。
1)对象的概念与类的确定 类与对象的关系就像刚才提到的具体的一个人和人类以及一辆具体的车和车类之间的关系。类给出了属于该类的全部对象的抽象定义,而对象则是符合这种定义的一个实例。
1)对象的概念与类的确定 属性是一个对象的特征,如大小、颜色或屏幕位置,或某一方面的行为。不同的对象有许多相同的属性,也有许多不同的属性。对象的属性可以在设计程序界面时通过属性窗口设置,也可以在运行时通过程序代码设置。 通过程序代码设置属性的一般语法格式:<对象>.<属性>=<属性值> 。 如果想要获取对象的状态或特性,那就要读取对象的属性值。 语法格式:<变量>=<对象>.<属性>
例如 • Label1.Caption = “确认” • Command1.Caption = “确认” • Command1.FontName = “隶书” • Command1.FontSize = 22 • Command1.FontUnderline = True • Command1.Enabled = False • a=Text1.Text
有些属性并不能设置。属性可以分为三种: • 读与写 • 只读 • 只写
方法是针对特定对象执行一项任务的特殊过程或函数,是对象本身所固有的动作。方法是针对特定对象执行一项任务的特殊过程或函数,是对象本身所固有的动作。 调用对象的一般格式: [对象].方法 [参数名表] 如: Forml.Print "欢迎使用Visual Basic"
2)事件及事件驱动 事件是一个对象可以辨认的动作(像单击鼠标或按Alt+Tab键等),并且可以通过动作触发的过程来对动作做响应。 事件过程是为响应由用户或程序代码引发的事件或由系统触发的事件而运行的过程。例如,需要命令按钮响应Click事件,就把完成Chick事件功能的代码写到Chick事件的事件过程中。
事件代码的编写事件过程的语法格式: Private Sub 对象_事件名() …’事件过程代码 End Sub
2.对象的引用 在面向对象程序设计中,经常要引用对象的属性、事件和方法。 引用格式: [<集合名>!][<对象名>.]<属性名>|<方法名>[<参教名表>]
2.对象的引用 1)! 运算符 !运算符用来指出随后出现的是用户定义项(集合中的一个元素)。通常使用!运算符可以引用一个打开着的窗体、报表,或打开着的窗体或报表上的控件。例如,Forms![持卡人] ’打开着的持卡人窗体 其他例子见P187中的表15-1。
2).(点)运算符 .(点)运算符通常用来指出随后出现的是Access定义的项。通常使用点运算符可以引用窗体、报表或控件的属性。另外,还可以使用点运算符引用 SQL 语句中的字段值 。 例如,Reports![持卡人报表]![姓名].Visible 其他例见P187中的表15-2 。
15.1.2 模块 VBA代码必须存放在某个位置,这个地方就是模块。 1)类模块 类模块是指包含新对象定义的模块。在用户新建一个类的实例的同时,也就创建了新的对象,在模块中定义的任何过程,都会变成这个对象的属性和方法。一般地,类模块又可以分成三种。 ① 窗体模块:指与特定的窗体相关联的类模块。 ② 报表模块:指与特定的报表相关联的类模块。 ③ 独立的类模块:不依附于窗体和报表而独立存在的类模块。其可以为自定义对象创建定义。
2)标准模块 标准模块是指存放整个数据库可用函数和程序的模块。它包含与任何其他对象都无关的通用过程,以及可以从数据库的任何位置运行的常规过程。
15.1.3 过程 过程被定义为VBA 代码的一个单元,过程中包括一系列用于执行某个任务或是进行某种计算的语句。每个过程都用唯一的名字加以区分。两种过程如下: Sub子程序:只执行一个或多个操作,不返回数值。 Function函数:执行一个或多个操作,返回一个值。
15.2 VBA编程的基本知识 书中的VBA项目采用的是支持基于VB6.O的VBA语言。 VBA与VB的区别如下: 1) VB以界面为中心的开发方式,重点在用户如何进行操作。VBA以文件为中心的开发方式,重点在用户最后看到什么。 2) VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序自动化。 3) 运行VB开发的应用程序,用户可以不必安装VB的集成开发环境,因为VB应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的宿主应用程序,不能单独运行。
15.2.1 VBA的数据类型 在VBA程序设计中用到各种类型的数据。常用的有Integer(整型)、Single(单精度型)、Boolean(逻辑型)、String(字符型)、Date(日期型)、Variant(变体型)等,具体见P188中的表15-3。
用户可以使用Type语句定义任何数据类型。用户自定义数据类型,可以包括数据类型数组,或当前定义的用户自定义类型的一种或多种元素。用户可以使用Type语句定义任何数据类型。用户自定义数据类型,可以包括数据类型数组,或当前定义的用户自定义类型的一种或多种元素。 1)语法格式 [Private|Public] Type <类型名> <元素名> As <数据类型> [<元素名> As <数据类型>] …… End Type
例15-1 自定义一个教师的基本信息数据类型,其中包括姓名、性别、年龄的信息。 Public Type Teacher Name As String*10 ’字符串变量可存10个字符名字 Sex As String*4 ’字符串变量存储性别 Age As Integer ’定义整形变量存储年龄 End Type
2) 定义完自定义类型后,声明变量 • Dim Teacher1 as Teacher • 3)引用数据 • Teacherl.Name="张力" • Teacherl.Sex="男" • Teacherl.Age=28
15.2.2 常量 1.VBA的变量或常量命名规则 1)名字必须以英文字母开头,长度≤255个字符。 2)除英文字母、数字、下划线外,其他字符尽量避免使用,VBA变量不区分大小写。 3)名字不能使用VB的关键字(如,Integer、If、 Then等)作为变量名,不能与VBA本身的函数过程、语句以及方法同名。 4)变量名在同一作用域内不能相同。 例如,4ab、a*b、a bc、Dim、Cos都是错误或不当的变量名。
2.常量的概念与分类 在程序运行中其值不可以被改变的量叫常量。有符号常量、固有常量和系统定义常量三种类型。 1) 符号常量:需要声明的常数都是符号常量。用户也可以使用自己定义的常量,但在使用之前必须声明,以便分配内存空间。 语法格式:[Public|Private] Const <常量名> [As <数据类型>]=<表达式> 其中Public用于公共模块、 Private用于过程或私有模块级别,例如: Const Pi=3.14 ’声明Pi为圆周率的近似值3.14 Public Const A as Integer=l ’声明一个值为1的公有整型常量A
2)固有常量:是 Access 或引用对象库的一部分。固有常量是系统自动定义的,可以直接使用。它由应用程序列与控件提供,采用下面两种方法来限定常数: ①通过前缀 ( VBA对象库的常数都以VB开头,如 VB Tile Horizontal) ②通过库应用([Libyan]|[mdul name] Constant)。 3)系统定义常量:True 和 False 用于表示逻辑值,Null表示一个无效值。
15.2.3 变量 在程序运行中其值可以改变的量叫变量。变量为临时存储单元,可存放文字、数值、日期和对象属性。每个变量都有一个名字,程序通过变量名对变量进行存取操作。在使用一般需要先声明变量的名称和类型,以便系统为它分配存储单元。
1.变量声明 1) 用Dim语句显性声明变量 语法:Dim <变量名> [As <类型>] 说明:① [As <类型>]为可选项,若不选,则默认是变体类型。 例如: Dim X,Y,Z ’X, Y, Z 均为变体类型变量 Dim W As Integer ’声明W为整形变量 Dim B As Currency ’声明B为货币型变量
② 对于字符串型,根据其存放字符串的长度是否固定,有两种定义方法。 Dim <字符串变量名> As String ’用于声明不定长字符串 Dim <字符串变量名> As String*<字符数> ’用于声明定长字符串 例如:Dim strl As String*20 ’声明strl为可存放20个字符的定长字符变量
2.数组 数组是同类型变量的一个有序的集合。数组必须先声明后使用。 1) 声明数组 语法格式: [Public|Private|Stati] Dim <数组名>([<下标下界> T0] <上界>)[As<数据类型>] 说明:若数组的下标下界缺省,则默认其值为 0。一维数组的大小为:上界-下界+1。下标必须为常数。 例如,Dim A(5) As Integer Dim B(-2 T0 5) As String *3
2) 二维数组和多维数组 语法格式:[Public|Private|Stati] Dim <数组名>([<下标下界1> T0] <上界1>,[[<下标上界2> T0] <上界2>,……])[As <数据类型>] 说明:① 下标个数决定数组的维数,最多60维。 ② 每一维的大小=上界-下界+1;数组的大小=每一维大小的乘积。 例如,Dim C1( -1 To 5,5) As Long ’声明了长整型二维数组C1的第一维下标范围为 -l~5,第二维下标的范围是0~5,有42个元素。
3) 动态数组 如果在程序运行时,可根据用户的需要动态的分配数组的存储单元。 语法格式:Dim Array( ) 说明:动态数组要先声明,然后用 ReDim 语句配置数组个数。ReDim语句声明只能用在过程中,它是可执行语句,可以改变数组中元素的个数,但不能改变数组的维数。每次用ReDim配置数组时,原有数组的值全部清零。
15.2.4 运算符 运算符是表示实现某种运算功能的符号。按运算的操作对象和操作结果的不同,VB中的运算符有算术运算符、字符连续运算符、比较运算符、逻辑运算符和位运算符等多种类型。 1.算术运算符 算术运算符用来进行数学计算。按从低到高的运算顺序为:+(加)、-(减)、mod(取余)、\(整除)、/(除)、*(乘)、-(负号)、^(指数)。其中“-”运算符在单目运算(单个操作数)中取负号运算,在双目运算 (两个操作数)中取减号运算;其余运算符为双目运算。详见P192的表15-5。
2. 字符串运算符 字符串运算符用来连接两个字符串,它有两种符号:“&”和“+”,在用“&”时注意,变量和运算符“&”间要添加一个空格。 例如: "a"+"b" ’结果为"ab" "a" & "b" ’结果为"ab" 再例如:“123”+1 ’结果为124(先转“123”为123) "123"+"1" ’结果为"1231" "abc"+1 ’出错 "abc"+“1” ’结果为"abc1" 123 & 1 ’结果为“1231”(等价于“123”&"1" )
3.关系运算符 关系运算符是双目运算符,用来确定两个表达式之间的关系,其优先级低于数学运算符,各个关系运算符的优先级是相同的,结合顺序从左到右。关系运算符为:=(等)、<>(不等)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、Like(字符串模式匹配)、Is (对象一致比较),详见P193的表15-6。 说明:① 当比较的两个操作数是数值型时,则直接比较大小。 ② 当比较的两个操作数是字符型时,则按字符的ASCII码值比较,从左到右依次比较。 ③ 汉字大于西文字符。
④ 关于通配符“?”、“*”、“#”的说明:“?”表示任意一个字符,“*”表示任意多个字符,“#”表示任意一个数字(0~9)。
4. 逻辑运算符 逻辑运算符除Not是单目运算符外,其余都是双目运算符。逻辑运算符用于判断运算数之间的逻辑关系。详见P193表15-7列出了VB的逻辑运算符(T 为True, F为False) 的功能。
例15-2 判断闰年的条件是下列条件之一: 1)能被4整除,但不能被100整除的年份都是闰年。 2)能被100整除,又能被400整除的年份都是闰年。 设变量y表示年份,写出判断y是否是闰年的表达式。 解:条件1的布尔表达式为:y mod 4=0 and y mod 100<>0 条件2 的布尔表达式为:y mod 100=0 and y mod 400=0 两个表达式用or链接起来为:(y mod 4=0 and y mod 100<>0) or (y mod 100=0 and y mod 400=0) 即为判断闰年的条件。
15.2.5 表达式 1.表达式组成 VB中的表达式是由常量、变量、运算符、函数和圆括号组成的。根据表达式结果的数据类型,可把表达式分为数值表达式、字符表达式和逻辑表达式等。
2.书写规则 1)运算符不能相邻,例, a + -b 是错误的。 2)乘号不能省略,如a乘以b应写成:a*b。 3)括号必须成对出现,均使用圆括号。 4)表达式从左到右在同一基准上书写,无高低、大小之分。
3.不同数据类型的转换 VB中运算不同精度的操作数时,为了保证运算的精度,运算结果的数据类型自动向精度高的数据类型转换。即: Integer < Long < Single < Double < Currency
4.优先级 在一个表达式中出现了算术运算符,字符运算符,关系运算符,逻辑运算符时,不同类型的运算符优先级如下: 算术运算符 >= 字符运算符 > 关系运算符 > 逻辑运算符
5. 在VB中常用的内部函数 • 1) 数学函数 • 2) 转换函数 • 3) 字符函数 • 4)日期与时间函数 • 5) InputBox函数与MsgBox函数
15.3 VBA 的编程界面 在编写VB程序前,就需要先了解VB的开发环境。也就是“Visual Basic编辑器”窗口。“Visual Basic 编辑器”是一个集程序界面设计、代码编写、调试于一体的集成开发环境。
15.3.1 打开一个VBA的编程器 首先在Access窗口打开帮助菜单,用鼠标指向“帮助”下拉菜单中的“示例数据库(D)”弹出示例数据库级联菜单,单击该级联菜单内的“罗斯文实例数据库”如图 15-1所示。弹出如图15-2所示的示例数据库界面。 图15-1 Access 界面
图 15-2 罗斯文示例数据库 单击“确定”按钮,弹出如图15-3所示的“主切换面板”对话框,单击“显示数据库窗口”按钮,立即切换到罗斯文示例数据库的窗口界面如图15-4所示。
图15-3 主切换面板 图15-4 启动Visual Basic 编辑器
单击Access工具下拉菜单中的宏级联菜单中的“Visual Basic 编辑器 ”命令,立即打开“Visual Basic 编辑器 ” ,如图15-5所示。 图 15-5 Visual Basic 编辑器
它主要由主窗口(标题栏、菜单栏和工具栏)、模块代码窗口、工程资源管理器和模块属性窗口等部分组成。所有的 Visual Basic 程序都是在模块代码窗口中编写的。 1)工程资源管理器窗口 该窗口用于浏览应用程序中所包含的模块文件。可以单击“查看代码”按钮显示相应的对象窗口,还可以单击“切换文件夹”按钮,显示或隐藏对象文件夹,如图15-10 所示。工程资源管理器窗口部件功能详见P201表15-16。