第十章VBA程序设计基础一、VBA概述1、认识VBAVBA(VisualBasicApplication)是MicrosoftOffice系列软件的内置编程语言;是通过“模块”对象来实现的。VBA和常见的开发语言VB非常相似,二者都来源于同一种编程语言,即BASIC;VBA与VB所包含的对象级是相同的,也就是说,对于VB所支持对象的多数属性和方法,VBA也同样支持。但两者并非完全一致,在许多语法和功能上有所不同。用VBA语言编写的代码,将保存在Access中的一个模块里,并通过类似在窗体中激发宏的操作那样来启动这个模块,从而实现相应的功能。要用Access2003来完成一个实际的数据库应用系统,就应该掌握VBA。2、VBA编程环境:VBE窗口1.进入VBE(VisualBasicEditor)窗口Access2003数据库中包含的程序模块可以分为两种类型:独立程序模块和绑定型程序模块。(1)编辑独立的程序模块独立程序模块,是指Access2003数据库中的“模块”对象。首先在数据库设计视图中选定“模块”对象,然后单击工具栏中的“新建”按钮,或者选择“工具”菜单下“宏”中的“VisualBasic编辑器”命令,也可以启动VBE,并使得VBE程序代码窗口中显示被选中的模块对象包含的程序代码。2.VBE窗口组成在VBA编程窗口中,主要有工具栏、工程窗口、属性窗口和代码窗口。(1)工具栏视图MicrosoftAccess按钮:切换Access2000窗口插入按钮:插入模块或过程运行子过程/用户窗体按钮:运行模块中的程序中断按钮:中断正在运行的程序重新设置按钮:结束正在运行的程序设置模式按钮:在设计模式和非设计模式之间切换工程资源管理器按钮:用于打开工程资源管理器属性窗口按钮:用于打开属性窗口对象浏览器按钮:用于打开对象浏览器(2)工程窗口也称工程资源管理器,一个数据库应用系统就是一个工程,系统中的所有类对象及模块对象都在该窗口中显示出来。(3)属性窗口属性窗口列出了选定对象的属性,可以在设计时查看、改变这些属性。当选取了多个控件时,属性窗口会列出所有控件的共同属性。列表左侧是属性的名称,右侧是属性的值。(4)代码窗口代码窗口用来显示、编写以及修改VBA代码。实际操作中,可以打开多个代码窗口,查看不同窗体或模块中的代码,代码窗口之间可以进行复制和粘贴。(2)创建与编辑绑定型程序模块所谓绑定性程序模块是指包含在窗体、报表、页等数据库基本对象之中的事件处理过程,这样的程序模块仅在所属对象处于活动状态下有效。以窗体为例:【例:10.1】事件过程尽管系统对每个对象都预先定义了一系列的事件集,但要判定它们是否响应某个具体事件以及如何响应事件,就是编程的事情了。例如,需要命令按钮响应Click事件,就把完成Click事件功能的代码写到Click事件的事件过程中。事件过程的形式如下:PrivateSub对象名_事件名()…(VBA程序代码)EndSubAccess中除数据库的7个对象外,还提供一个重要的对象:DoCmd对象除窗体、控件的SetFocus(获得控制焦点)方法外,用得最多得是DoCmd对象的一些方法。使用这些方法,可以在VBA中运行Access的操作。P203DoCmd对象的常用方法二、VBA编程基础(一)子过程和函数模块对象是将VBA编写的过程和声明作为一个整体进行保存的过程的集合。一个模块包含一个声明区域,且可以包含一个或多个子过程或函数,模块的声明区域是用来声明模块使用的项目。过程是包含VBA代码的基本单位,由一系列可以完成某项指定的操作或计算的语句和方法组成,通常分为:Sub过程(又称子过程或子程序)、Function过程(又称函数)两种。1.Sub过程Sub过程(又称子过程)以关键词Sub开始,以EndSub结束,其定义语句语法格式为:[Public︱Private][Static]Sub子过程名([参数])[As数据类型][子过程语句]EndSub选用关键字Public:可使该子过程能被所有模块的所有其他过程调用。选用关键字Private:可使该子过程只能被同一模块的其他过程调用。Static声明:在该子过程中的所有变量为静态变量。静态变量在程序运行过程中一直保留其值,即每次调用过程,变量保持原来的值。参数:代表一系列变量并用逗号分隔,这些变量接受传递到子过程中的参数值。如果没有参数,则为空括号。上面列出的过程实际上是3个事件过程。子过程的名字是由一个对象的名字和一个事件的名字Click组成的,两者之间用下划线分开,“上一条记录”即是“上一条”命令按钮的名字,当单击这个命令按钮时,就会运行这个事件过程。2.Function过程Function过程(又称函数过程)以关键词Function开始,以EndFunction结束,其定义语句语法格式为:[Public︱Private][Static]Function函数过程名([参数])[As数据类型]函数过程语句函数过程名=表达式EndFunctionFunction过程和Sub过程很类似,但它通常都具有返回值,在代码中可以一次或多次为函数名赋一个值来作为函数的返回值。而子过程不返回任何值。函数一般都要带参数。As数据类型子句:定义函数过程返回的变量数据类型,若未定义,系统将自动赋给函数过程一个最合适的数据类型。例:PublicFunctionGetSum(a,bAsInteger)AsIntegerGetSum=a+bEndFunction函数会把“a+b”的值返回给函数名“GetSum”,在编程引用该函数时,如果输入GetSum(5,3),则会返回“5+3”,即“8”给函数“GetSum”(二)面向对象的基本概念Access是一种面向对象的开发环境,面向对象概念主要有类、对象、属性、方法和事件。类就是对具有相似属性和行为的一组对象的统一描述。对象,就是代码和数据的组合,可以将它年成是一个单元或一个实体,如数据库、表、窗体、各种控件都是对象。属性,是指定义的对象特性,如大小、颜色、对象状态等。每一种对象都有一组特定的属性,这在属性窗口中可以看到。方法指的是对象能执行的动作,如控件获得焦点、更新数据等。事件是一个对象可以辩认的动作,如单击、双击等,并且可以编写代码来针对此动作做出相应的响应。1.对象和对象名称:每个对象均有名称,称为对象名称。对象好比是积木块,它可以看作为物体,例如一本书、一张桌子都可以看作为对象。一张表、一个查询清单、所设计的一个漂亮窗体界面等等。它是VBA应用程序的基础构件。在开发一个应用程序时,必须先建立各种对象,然后围绕对象进行程序设计。表、查询、窗体、报表等是对象,表和查询中的“字段”、窗体和报表中的各种“控件”也是对象。为便于识别,每个对象均有名称,称为对象名称。有效的名称须符合Access的标准命名规则,窗体、报表、字段等对象的名称不能超过64个字符,而对于控件,对象名称长度不能超过255个字符。对于未绑定控件,默认名称是控件的类型加上一个唯一的整数。对于绑定控件,如果通过从字段列表中拖放字段来创建控件,则对象的默认名称是记录源中字段的名称。对象名称的若干规定:2.对象的属性:本身所具有的特性指的是对象本身所具有的特性。对象既然可以看作是物体,那么这个物体本身所具有的颜色、形状、大小、名称、位置等,都可以看作是这个对象的属性。对象的属性有的是可以改变的,有的是不能改变的(只读属性)。比如说,我把一本书从桌子上扔到地上,那么这本书的位置属性就发生了改变,但是,制作这本书的原料和书的内容却是不可以改变的(只读属性)。属性是指对象的特征。每一种对象都有一组特定的属性,这在属性窗口中可以看到。每个属性都有一个缺省值,如果不改变该值,应用程序就使用该缺省值,如果缺省值不能满足要求,就要对它重新设置。3.对象的方法:对对象所实施的动作如果说,对象的属性是静态规格,那么对象的方法便是动态操作,目的是改变对象的当前状态。例如,如果将光标插入点移入某个文本框内,在程序中就需要使用SetFocus方法。注意:对象的方法是动态操作,所以不会显示在属性表中,只可显示在程序中。它可以看作是对象所做的动作,它可以返回结果(功能函数),也可以不返回结果(过程)。通常是指由VB语言定义处理对象的过程,代表对象能够执行的动作。例如要打开一本书,结果是书被打开了,返回的结果即为真(True);而该书带有密码锁,但是却不知道密码,再去做“打开书”这个动作,结果是失败,返回了假(False)。4.对象的事件:动作之后发生的事情事件是对象对外部操作的响应,如在程序执行时,单击命令按钮会产生一个Click事件。事件的发生通常是用户操作的结果。每个对象都有一系列预先定义的事件集。例如,命令按钮能响应单击、获取焦点、失去焦点等事件,可以通过属性表的“事件”选项卡查看。例如:Click(单击)、DblClick(双击)、Load(加载)等会有事件产生。对象:就是一个东西或一个事物;属性:是这个对象的特征标志,一般情况下,右击某一对象,即击出其属性栏;属性是这个对象的静态表现。方法:是对象的行为动作;方法是这个对象的动态表现。事件:就是对某一对象所发生的操作而由此产生的消息,或叫通知体系。一个具有某些特色(即:对象的属性);事物(即:对象本身);对这个事物实施了某个动作(即:对象的方法);由此产生了一个结果(即:对象的事件)。如何用VBA命令来设置对象的属性。基本概念:动作是事件,活动为方法在VBA中,属性的引用方式为:对象.属性名如:Text1.Value=“清华大学出版社”表示设置当前窗体或报表对象中的“Text1”文本框对象的值为=“清华大学出版社”如:Form!gouwuche![username].text=“xinhua”表示设置“gouwuche”窗体对象中的“username”文本框对象的值为“xinhua”注意:如果引用的对象名称含有空格或标点符号,需要用方括号把名称括起来。在VBA中,方法的引用形式是:对象名.方法名(【参数1】【,参数2】…)在Access2003中,除表、查询、窗体、报表、页、宏和模块等7种对象外,还可以在VBA中使用一些范围更广泛的对象,例如,“记录集”对象、DoCmd对象等。DoCmd是Access2003数据库的一个重要对象,它的主要功能是通过调用Access内置的方法,在VBA中实现某些特定的操作。例如:利用DoCmd对象的OpenForm方法打开“学生信息录入”窗体,使用的语句格式为:DoCmd.OpenForm学生信息录入DoCmd对象的常用方法见表10—1(三)VBA中的基本数据类型VBA在数据类型和定义方式上均继承了传统的Basic语言的特点。Access2003数据表中的字段使用的数据(OLE对象和备注字段数据类型除外)在VBA中都有对应的类型。在定义方式上,除支持符号定义方式外,还支持使用关键字定义方式。VBA数据类型、关键字、符号、占用空间和取值范围如表所示。VBA的数据类型数据类型类型声明符存储空间取值范围整型(Integer)%2-32768~32767长整型(Long)&4-2147483648~2147483647单精度浮点型(Single)!4负数:-3.402823E38~-1.401298E-45正数:1.401298E-45~3.402823E38双精度浮点型(Double)#8负数:-1.79769313486232E308~-4.94065645841247E-324正数:4.94065645841247E-324~1.79769313486232E308货币型(Currency)@8-922337203685477.5808~922337203685477.5807日期型(Date)8100年1月1日~9999年12月31日字符型(String)$0字符~65400个字符字节型(Byte)10~255逻辑型(Boolean)2True或Fa