1、VBA 编程基础VBA(Visual Basic Application): 是是 Microsoft Office 系列软件的内置编程语言,VBA 是面向对象的程序设计语言。一般 Access 程序设计在遇到下列情况下需要使用 VBA 代码:1、创建用户自定义函数(User-defined Function,UDF)。使用UDF,可以使程序代码更加简洁而有效2、复杂程序处理。可以编写选择结构、循环结构等复杂程序处理。3、数据库的事务处理操作。4、使用 ActiveX 控件和其他应用程序对象。5、错误处理。一、VBA 编程环境1. Visual Basic 编辑器(VBE=Visual Bas
2、ic Editor)是编辑VBA 代码的工作界面, VBE 窗口主要有标准工具栏、工程窗口、属性窗口和代码窗口等组成。标准工具栏 1工程窗口(工程资源管理器,其中列出了应用程序的所 2有模块文件)注:工程资源管理器将模块分为:对象、类和标准模块代码窗口(由三部分组成:对象组合框、事件组合框、 3代码编辑区)进行程序设计的窗口,显示和编辑代码窗口注:可以查看多代码窗口及转换属性窗口(列出了各个所选对象的属性:分“按字母序” 4和“按分类序” ,直接在属性窗口中编辑对象的属性,属于对象属性的“静态”设置方法,以在代码窗口内用 VBA 代码编辑对象的属性,这属于对象属性的“动态”设置方法)立即窗口(
3、用来进行快速的表达式计算、简单方法的操 5代码窗口立即窗口工程窗口属性窗口作及进行程序测试的工作窗口)注: 默认界面及全部界面的操作(工具栏 /“视图”菜单)2、进入 VBE 编辑界面对象模块方式 标准模块对象模块的操作步骤:右击 事件生成器 代码生成器打开事件属性 单击() 代码生成器标准模块的操作步骤模块对象下 双击模块模块对象下 “新建”命令数据库对象下 “工具”菜单 “宏” Visual Basic 编辑器注:Alt+F11 进入 VBE 界面及数据库窗口与 VBE 之间的转换快捷键3、编写 VBA 代码语句原则语句书写规则:通常一条语句写在一行;如果一行写不下, 1可以“_”将语句连
4、续写在下一行(一条语句写在多行) ,也可以用“:”将几个语句分隔在一行中(多条语句写在一行) 如:A=2:b=3:c=4注:编写完一语句后,如该句中有红色文本显示,则该语句出错注释:分 Rem 语句和单引号语句,起解释说明作用 2书写格式::Rem 和 注:注释的语句不会执行!二、VBA 编程基础1、面向对象程序设计的基本概念对象:客观存在的可相互区分的实体比如一个人,一台电脑,一辆汽车、都是实体 集合:某一类的对象的实体集,类对象:张三、李四类:人属性:就是描述一个对象的特征比如描述一个人有哪些属性?姓名、身高、性别、年龄,每个对象这样的属性,取值是不同的属性使用方式:对象.属性=“对象名.
5、属性名 “方法:就是描述一个对象的行为(即对象所实施的动作)比如说一个人能走路,能跑步.,这些刻画一个对象的动态特征我们就称之为方法。方法使用方式:对象.行为=“对象名.方法名“注意:属性是描述对象的静态特征,方法是描述一个对象的动态特征 1Access 中为我们提供了 7 种对象,此外还提供了 DoCmd 对象, 2它的主要功能是通过调用包含在内部的方法实现 VBA 编程中对Access 的操作 。例如 DoCmd.OpenReport 报表名事件就是 Access 窗体或报表及其上的控件等对象可以“识别”的动作(即动作之后发生的事情) 例如鼠标单击等事件过程:对于一个事件我们需要编写相应的
6、代码来反映执行这样的事件会带来什么样的结果!事件过程的形式如下:Private Sub 对象名 _事件名()(VB 程序代码)End Sub例Private Sub test_Click()MsgBox “你好吗?“, vbQuestion, “标题“End Sub总结:一个具有某些特色(即:对象的属性) ;事物(即:对象本身) ;对这个事物实施了某个动作(即:对象的方法) ;由此产生了一个结果(即:对象的事件) 。2、数据类型和数据库对象Access 数据库系统创建表时涉及的字段数据类型(除 OLE 和备注外) ,在 VBA 中都有相应的数据类型相对应标准数据类型VBA 数据类型用户自定义数
7、据类型标准数据类型 1数据类型 类型标识 符号 字段类型整型 Integer % 字节/整数/是/否长整型 Long & 长整数/自动编号单精度数 Single ! 单精度数双精度数 Double # 双精度数货币 Currency 货币字符串 String $ 文本布尔型 Boolean 无逻辑值日期型 Date 日期/时间变体类型 Variant 任何注:1)布尔型数据(Boolean)只有两个值:True 和 False,布尔型数据转换为数值型时:True 转换为-1,False 转换为 02)日期时间型(Date)必须前后用#封住,#2012-5-15#日期和时间之间用空格隔开 #20
8、12/5/1421:30:30#3)变体类型数据(Variant):变体数据类型是一种特殊的数据类型,除了定长字符串类型及用户自定义类型外,可以包含其它任何的数据。如 Empty(空)、Error(出错)、Nothing(无值)、Null(空值)VBA 中规定:如果没有显示声明或使用符号来定义变量的数据类型,则默认为变体类型。例如:dim a as Integer(定义一个 Integer 型变量 a) dim a%dim b (定义变体类变量 b) b=10(b 是 Integer)b=#2009-2-8#(b 是 Date)b=10.1234(b 是 Currency) 用户自定义数据类型
9、:应用过程中用户可以创建一个或多个 2VBA 标准数据类型的自己的数据类型定义格式: Type数据类型名 = Type 数据类型名域名 As As 域名 As As End Type End Type比如说:想定义一个 Student 的数据类型Type StudentstuNO as String*10 学号,10 个长度字符串stuName as String 姓名,变长字符串(没有指定长度)stuSex as Strinnteg*1 一个长度字符串stuAge as Iger 年龄,整型End Type那么此时我们就有了一个新的数据类型,那就是 Student 类型可以用 Dim Pub
10、lic Static 关键字来定义用户类型变量如可以这样定义一个 Student 类型的变量。Dim Stu as StudentDim a as Integera= 1接下来就是给变量赋值Stu. stuNO=“200901005 ”Stu.stuName = “张三”Stu.stuSex =“男”Stu.stuAge =21也可以使用 With 关键字简化程序中重复的部分With Stu.stuNO=“200901005”.stuName=“张三”.stuSex=“男 ”.stuAge=21End WithVBA 数据库对象类型: 数据库对象 Database连接 Connection窗体
11、 Form报表 Report控件 Control查询 QueryDef表 TableDef命令 Command3. 变量变量:在程序运行时值会发生变化的数据。程序利用变 1量来保存数据,传送数据,处理数据变量名:变量的名字,由用户定义。每个变量都属于某种数据类 2型,并在内存中占有一定的内存空间,每个变量在内存中所占有的位置都有一个内存地址,使用地址对变量操作并不方便,所以需要给变量取一个名字称为变量名。在程序运行过程中,使用变量名就可以对变量的值进行存取,不必知道他的真正的地址变量的命名规则: 3a.以字母开头b.除下划线字符(“_” )外,不能有标点符号(如:!&” ”)c.最长只能有 2
12、55 个字符 注:一个汉字算一个字符d.不能与 VBA 关键字重复(dim as )e.不区分大小写,通常采用大写与小写字母相结合的f使用 Set 关键字来建立控件对象的变量变量的声明:就是使用前,定义变量名称及类型,使系统 4为变量分配存储空间1) 显示声明:变量先定义后使用定义变量的格式:DimAS VarType=Dim As 结构,其中,As 后指明数据类型。注意:声明某个变量为某种类型后,该变量只能存储该类型的数据。变量是一个内存区域,我们可以使用赋值语句对变量进行赋值(=) 。例如: dim a (表示定义一个“变体型”变量 a)dim a as Integer(表示定义一个整型变
13、量 a)dim s as string(表示定义字符串 s)dim name as String 定义变量 name 为字符串类型Name = “ 张三 ”2)隐含声明:没有定义而通过一个值指定给变量名,注意:没有声明类型的变量都是 Variant 类型的。例:Dim a,b a,b 为变体类型(variant 类型)age = 20 age 为变体类型(variant 类型)3)强制声明:在默认情况下,VBA 允许在代码中使用未声明的变量,如果在模式设计窗口的顶部“通用-声明”区域中,加入语句,Option Explicit 强制要求所有变量必须先定义才能使用说明:如果用 Option Explicit 则只能为当前模块设置了自动变量(显式变量)功能,后才能使用变量。如果为所有模块灰启用此功能,方法:“工具”菜单 “选项” 要求变量声明例题:dim a Sub aa() aa 表示该过程的名字。Dim b As Integer, c As Integer 表示定义整型变量 b 和 c。b = 10 给变量 b 赋一个值 10。c = 20 给变量 c 赋一个值 20。MsgBox b - c+a 输出 b-c 的值。End Sub变量的使用范围(作用域) 5变量的作用域:在 VBA 编程中,变量定义的位置和方式不同,