版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库原理与应用第5章ACCESS数据库—面向对象的程序设计语言(VBA)10/17/20241本节要求理解VBA编程基础的基本概念。掌握创建和设计VBA程序。掌握程序的三种控制结构。掌握VBA中的过程。了解VBA程序调试与运行。10/17/202425.8面向对象的程序设计语言—VBA1、VBA编程的基本概念
VBA(VisualBasicforApplications)是在office中开发高级应用所使用的一个通用程序语言,它可以共享microsoft各种相关的重要软件。面向对象的编程思想(了解):面向对象技术(OOP)是一种新的软件开发技术,其概念来源于程序设计。是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。10/17/20243(1)面向对象基本概念面向对象技术以数据为中心而不是以功能为中心来描述系统,数据相对于功能而言更具有稳定性。它将数据和对数据的操作封装在一起,作为一个整体来处理,采用数据抽象和信息隐蔽技术,将这个整体抽象成一种新的数据类型—类。类(Class)—是创建对象的模板,是一组具有相同属性和行为的对象的集合,它在整体上代表一组对象,它为属于该类的全部对象提供了统一属性和行为两个主要部分的抽象描述。10/17/20244对象(Object)—是类的一个实例,是组成一个系统的基本逻辑单元,是具有某些特征的具体的事物的抽象。每个对象都具有属性和行为。数据抽象(DataAbstraction)—指仅表现核心的特性而不描述背景细节的行为。继承(Inheritance)—是可以让某个类型的对象获得另一个类型的对象的属性的方法。10/17/20245动态绑定(DynamicBinding)—给定的过程调用相关联的代码只有在运行期才可知。数据封装(DataEncapsulation)—把数据和函数包装在一个单独的单元(类)的行为。多态性(Polymorphism)—事物具有不同形式的能力。消息传递(MessagePassing)—一个面向对象的程序由许多对象组成,这些对象之间需要相互沟通。10/17/20246事件及事件驱动事件
—是一个对象可以辨认的动作,如单击鼠标或按下某键等,并且可以写某些代码针对此动作来作响应。事件过程
—是为响应由用户或程序代码引发的事件或由系统触发的事件而运行的过程。10/17/20247(2)对象的引用(掌握)在面向对象程序设计中,经常要引用对象的属性、事件和方法。VB中一般引用格式如下:[<集合名>!][<对象名>.]<属性名>|<方法名>[<参数名表>]其中:!运算符用来指定随后出现的是用户定义项,例如,使用!运算符可以引用一个打开着的窗体、报表以及窗体或报表上的控件。.(点)运算符通常用来指出随后出现的是Access定义的项,例如引用窗体、报表或控件的属性。10/17/202481、VBA程序设计基础VBA与VB的区别:VB是以界面为中心的开发方式,重点是在使用者如何进行操作;而VBA是以文件为中心的开发方式,重点是在使用者最后看到什么。什么时候使用宏:对于简单的细节工作通常使用宏,例如,打开或关闭窗体、报表等。另外,在首次打开数据库时执行的一个或一系列操作也必须用宏来完成。10/17/20249什么时候使用VBA?1)使用内置函数或自行创建函数;2)处理错误消息;3)创建或处理对象;4)执行系统级的操作;5)一次处理多条记录;6)将参数传给VBA的过程。10/17/2024101)VBA的编程界面“VisualBasic编辑器”是一个集程序界面设计、代码编写、调试与一体的集成开发环境。如图所示标题栏:显示应用程序名称和窗口控制按钮。菜单栏:通过选取各菜单项来完成相应的功能。工具栏:提供了对常用功能的快速调用,通过单击工具栏按钮,可以完成该按钮所指定的功能。工程窗口:以树状结构显示主应用程序与模块及类模块的完整结构,用户可在工程窗口中直接选择窗口或模块,对其进行编辑。属性窗口:用于显示窗体上的某个控件的可见属性及其默认值,通过该属性窗口还可以对可见属性的值进行直接编辑。代码窗口:用于编写模块的过程代码。10/17/2024112)VBA的数据类型VBA中共定义了12种数据类型:字节型(Byte)1个字节逻辑型(Boolean)2个字节整型(Integer“%”)2个字节长整型(Long“&”)4个字节单精度型(Single“!”)4个字节10/17/202412双精度型(Double“#”)8个字节货币型(Currency“@”)8个字节日期型(Date/Time)8个字节字符型(String“$”)所占字节数与字符串长度有关对象型(Object)4个字节变体型(Variant)根据分配确定10/17/202413用户自定义型所占字节数与元素个数有关,用户可以使用Type语句定义任何数据类型。语法如下:[Private/Public]Type类型名元素名As数据类型
…EndType例如:自定义一个教师的基本信息数据类型,其中包括姓名、性别、年龄的信息。10/17/202414PublicTypeTeacherNameAsString*10定义字符串变量存储一个名字SexAsString*4定义字符串变量存储一个性别AgeAsInteger定义整型变量存储一个年龄EndTypeDimTeacherAsTeacher声明变量10/17/202415引用数据Teacher.Name=“张三”Teacher.Sex=“男”Teacher.Age=2610/17/2024163)常量在程序运行中其值不变的量叫常量,VB中支持三种类型的常量:符号常量、固有常量和系统定义常量。符号常量:需要声明的常数都是符号常量。固有常量:是Access或引用对象库的一部分。系统定义常量:如True和False用于表示逻辑值,Null表示一个无效值。10/17/202417符号常量用户可以使用自己定义的常量,但在使用之前必须声明,以便分配内存空间。语法如下:
[Public/Private]Const常量名[As数据类型]=表达式
其中Public/Private两个关键字分别代表了常量的三个范围级别:过程级别和私有模块级别用“Private”声明,公共模块级别用“Public”声明。10/17/202418固有常量固有常量是系统自动定义的,可以直接使用。它由应用程序列与控件提供。
Access中主要有以下几类固有常量:操作常量、DAO常量、事件过程常量、关键字常量、RunCommand方法常量、安全常量、VBA常量和VarType函数常量。10/17/2024194)变量在程序运行过程中其值可以改变的量叫变量,每个变量都有一个名字,程序通过变量名对变量进行存取操作,VBA中变量不区分大小写,可使用两种方法声明变量:用Dim语句显性声明变量,语法如下:Dim变量名[As类型]例:DimXAsInteger声明X为整型
另外也可使用隐性声明,即VB中允许变量不经过声明就直接使用。10/17/202420变量的作用域 不同级别的变量有不同的应用范围,通常变量有三个范围级别。过程级别在程序中声明的变量属于过程级别。只有在声明此变量的过程中才可以使用的变量称为局部变量。用户可以使用Dim或Static关键字来定义例如:DimaAsintegerStaticbaAssingle10/17/202421私有模块级别用户可以在窗体、报表和标准模块顶部的通用声明区用Dim或Private定义模块级别的变量。由Dim语句在声明部分所声明的变量,其范围默认为私有的。私有变量一旦离开该程序,这些变量也就消失,别的程序或函数无法使用这些变量。公共模块级别在模块的通用声明区中以Public声明的变量。如果一个变量声明为公共模块级,那么它就可以被工程所有过程调用。这个级的变量,作用范围最广、生命周期最长。10/17/2024222、基本控制结构顺序结构
赋值语句赋值语句是程序设计中最基本的语句,赋值语句都是顺序执行的。语句格式:变量名=表达式选择结构
VB中提供了多种形式的条件语句实现选择结构(或称分支结构),即对条件进行判断,根据判断结果,选择执行不同的分支。10/17/2024231)IF条件语句If…Then语句(单分支结构)。有两种形式:块结构和行结构块结构形式:If<表达式>Then
语句块
EndIf行结构形式:
If<表达式>Then<语句>说明:1)表达式一般为关系表达式、逻辑表达式,也可以为算术表达式,非0为True,0为False。2)语句块可以是一句或多句,若用行结构来表示,则只能是一句语句,若多句,语句间需用冒号隔开,而且必须在一行上书写。10/17/202424例:已知两个数x和y,比较它们的大小,使得x大于y。方法一:ifx<ythent=xx=yy=tendif方法二:ifx<ythent=x:x=y:y=t
10/17/202425If…Then…Else语句(双分支结构)。此语句也有两种形式:块结构和行结构。块结构形式:If<表达式>Then<语句块1>Else<语句块2>EndIf行结构形式:
If<表达式>Then<语句1>Else<语句2>说明:双分支结构能根据表达式的判断结果来选择执行的语句块,当表达式的判断结果为真时,则执行语句块1;当表达式的判断结果为假时,则执行语句块2。10/17/202426例:求分段函数的值。代码如下:IfX<>0thenY=X+1ElseY=X-1EndIf10/17/202427If…Then…ElseIf语句(多分支结构)。当需要判断的表达式多于两个时,需要用多分支结构来完成。代码如下:If<表达式1>Then<语句块1>
ElseIf<表达式2>Then<语句块2>…[Else语句块n+1]EndIf说明:1)多分支结构在执行时,按着表达式的先后顺序判断,一旦遇到表达式的判断结果为真时就执行下面的语句块。2)不管有几个分支,程序执行了一个分支后,其余分支不再执行。3)ElseIf不能写成ElseIf。4)当多分支中有多个表达式同时满足,则只执行第一个与之匹配的语句块。10/17/202428例:计算个人所得税,税率如表所示:代码:IfMoney>5000ThenTax=Money*0.2
ElseIfMoney>1000ThenTax=Money*0.15ElseTax=Money*0.1EndIf税率0.20.150.1收入Money>50005000>Money>1000Money<100010/17/202429If语句的嵌套。If语句的嵌套是指if或else后面的语句块中又包含if语句。语法如下:
If<表达式1>ThenIf<表达式2>Then…EndIf…EndIf说明:1)对于嵌套结构,为了增强程序的可读性,应该采用缩进形式书写。2)If语句形式若不在一行上书写,必须与EndIf配对,多个If嵌套,EndIf与它最接近的If配对。10/17/2024302)SelectCase语句它是多分支选择语句的又一种形式,具有结构清晰易读的优点。其语法如下:
SelectCase变量或表达式
Case表达式列表1
语句块1 Case表达式列表2
语句块2…[CaseElse语句块n+1]EndSelect说明:1)变量或表达式可以是数值行或字符串表达式。2)表达式列表1、2等可以是表达式、一组用逗号分隔的枚举值、表达式1to表达式2、Is关系运算符表达式等。10/17/202431例:根据X的值(1-4)打印对应英语单词,超出X范围则打印“bad”代码:SelectCaseXCase1Print“One”Case2Print“Two”Case3Print“Three”Case4Print“Best”CaseElsePrint“bad”EndSelect10/17/202432循环结构 循环是在指定的条件下多次重复执行一组语句。VB中提供了两种基本类型的循环语句:计数循环语句和条件循环语句。10/17/2024333)For…Next循环语句知道循环次数的计数型循环,语法如下:
For循环变量=初值to终值[Step步长]
语句块
[ExitFor]
语句块
Next循环变量说明:1)循环变量必须为数值型。2)步长一般为正,初值小于终值,若为负,初值大于终值,缺省步长为1。3)语句块可以是一句或多句,称为循环体。4)ExitFor表示当遇到该语句时,退出循环体,执行下一条语句。5)退出循环后,循环变量的值保持退出时的值。6)循环体内不应对循环变量赋值。10/17/202434例:计算1到100的奇数之和Sum。代码:Fori=1to100step2Sum=Sum+INexti10/17/2024354)Do…Loop循环不知道循环次数的条件型循环。语法形式有两种:DoWhile…Loop(当型)和Do…LoopWhile(直到型)形式1:
Do[While|Until条件]
语句块
[ExitDo]
语句块
Loop10/17/202436形式2:
Do
语句块
[ExitDo]
语句块
Loop[While|Until条件]10/17/202437例:计算1到100的奇数之和Sum。代码:n=1Dowhilen<=100Sum=Sum+nn=n+2Loop10/17/2024385)循环嵌套指在循环体内又包含一个完整的循环结构。对For循环和Do…Loop循环结构适用。例如:Fori=初值To终值
Forj=初值To终值
语句块
NextjNexti说明:1)内外循环变量不能重名。2)内外循环不能交叉。10/17/2024396)VBA的其它常用语句GoTo语句用来无条件跳转到过程中的另一条语句上,通常结合If语句使用,其语法格式如下:
GoTo标号|行号Exit语句用于退出某控制结构的执行10/17/202440End语句用于结束一个程序的执行,可以放在任何事件过程中,语法:EndWith语句它的作用是可以对某个对象执行一系列的语句,而不用重复指出对象的名称。但不能用一个With语句设置多个不同的对象。属性前需要加“.”号PrivateSub关闭窗体_Click()OnErrorGoToErr_关闭窗体_Click
DoCmd.CloseExit_关闭窗体_Click:ExitSubErr_关闭窗体_Click:
MsgBox
Err.DescriptionResumeExit_关闭窗体_ClickEndSub10/17/202441在VBA编程过程中会经常用到一些操作,例如,打开或关闭某个窗体和报表、根据需要显示一些提示信息、对控件输入数据进行验证或实现一些“定时”功能(如动画)等,这些功能就可以使用VBA的输入框、消息框及计时事件Timer等来完成。7)VBA中常用的操作方法10/17/202442
打开和关闭窗体VBA的窗体操作主要有两个重要的命令:打开窗体Docmd.OpenForm和关闭窗体Docmd.Close。
打开和关闭报表报表的打开与关闭也是Access应用程序中的常用操作,与窗体的相同。VBA也就此提供了两个操作命令:打开报表Docmd.OpenReport和关闭报表Docmd.Close。打开和关闭窗体或报表10/17/202443
输入框:输入框用于在一个对话框中显示提示,等待用户输入正文并按下按钮、返回包含文本框内容的数据信息。它的功能在VBA中是以函数的形式调用使用,其使用格式如下:InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])调用该函数,当中间若干个参数省略时,分隔符逗号“,”不能省略。输入框和消息框10/17/202444
消息框:消息框用于在对话框中显示消息,等待用户单击按钮,并返回一个整型值告诉用户单击哪一个按钮。格式为:MsgBox(prompt[,buttons][,title][,helpfile,context])输入框和消息框10/17/202445使用窗体和数据访问页,每当保存记录数据时,所做的更改便会保存到数据源表中。在控件中的数据被改变之前或记录数据被更新之前会发生BeforeUpdate事件。通过创建窗体或控件的BeforeUpdate事件过程,可以实现对输入到窗体控件中的数据进行各种验证。例如,数据类型验证、数据范围验证等。VBA编辑验证数据10/17/202446
VBA中提供Timer时间控件可以实现“定时”功能。但VBA并没有直接提供Timer时间控件,而是通过设置窗体的“计时器间隔(TimerInterval)”属性与添加“计时器触发(Timer)”事件来完成类似“定时”功能。处理过程是:Timer事件每隔TimerInterval时间间隔就会被激发一次,并运行Timer事件过程来响应。这样重复不断,即实现“定时”处理功能。计时事件Timer10/17/202447VBA的程序运行错误处理VBA中提供OnErrorGoTo。语句来控制当有错误发生时程序的处理。OnErrorGoTo指令的一般语句如下:OnErrorGoTo
标号OnErrorResumeNextOnErrorGoTo010/17/2024483、模块基本概念VBA代码存放的位置就是模块。是作为一个单元保存在一起的VBA定义和过程的集合。Access2003包含两种类型的模块,一种是类模块,另一种是标准模块。(1)类模块:是指包含新对象定义的模块。当用户新建一个类的实例的同时也就创建了新的对象,在模块定义的任何过程都会变成这个对象的属性和方法。10/17/202449类模块又可分为三种:窗体模块。是指与特定的窗体相关联的类模块。报表模块。是指与特定的报表相关联的类模块,包含响应报表、报表段、页眉和页脚所触发的事件的代码,对报表模块的操作与对窗体模块的操作相类似。独立的类模块。类模块可以不依附于窗体和报表而独立存在。这种类型的类模块可以为自定义对象创建定义。10/17/202450(2)标准模块:标准模块是指存放整个数据库可用的函数和程序的模块。它包含与任何其他对象都无关的通用过程,以及可以从数据库的任何位置运行的常规过程。独立的类模块和标准模块的区别:主要区别在于范围和生命周期方面。独立的类模块没有相关的对象,声明的任何常量和变量都仅在代码运行的时候是可用的。10/17/2024514、过程及过程调用在程序设计中,为各个相对独立的功能模块所编写的一段程序称之为过程。一个过程是一个VBA函数单元,过程中包括一系列用于执行某个任务或是进行某种计算的语句。过程分为两种:Sub子程序和Function函数过程。每个过程都用唯一的名字加以区分,过程在其他程序中通过名字访问。10/17/2024521)Sub子程序
以“Sub”保留字开始的子程序过程,包括事件过程和通用过程。子过程是指那些用来执行一个操作或多个操作,而不会返回任何值的过程,当录制完宏查看代码时,所看到的就是子程序。10/17/202453事件过程(1)窗体事件过程语法:PrivateSubForm_事件名([参数列表])
[局部变量和常数声明]
语句块EndSub注意:1、窗体事件过程名由Form_事件名组成。2、每个窗体事件过程名前都有一个Private前缀,表示该事件过程不能在它自己的窗体模块之外被调用。3、事件过程有无参数,完全由VB提供的具体事件本身决定,用户不可随意添加。10/17/202454(2)控件事件过程语法:PrivateSub控件名_事件名([参数列表])
[局部变量和常数声明]
语句块EndSub注意:其中的控件名必须与窗体中某控件相匹配,否则VB将认为它是一个通用过程。10/17/202455通用过程:通用过程是一个必须从另一个过程显示调用的程序段,通用过程有助于将复杂的应用程序分解成多个易于管理的逻辑单元,使应用程序更简洁、更易于维护。通用过程分为公有(Public)过程和私有(Private)过程两种,公有过程可以被应用程序中的任一过程调用,而私有过程只能被同一模块中的过程调用。10/17/202456通用过程语法如下:
[Private|Public][Static]Sub过程名([参数列表])
[局部变量和常数声明]’用Dim或Static声明语句块
[ExitSub]
语句块
EndSub10/17/202457建立Sub子过程的方法方法一:S1、打开代码编辑器窗口。S2、选择“插入”菜单中的“过程”命令S3、在“添加过程”对话框中输入过程名,并选择类型和范围。S4、在新创建的过程中输入内容。方法二:S1、在代码编辑器窗口的对象中选择“通用”,在文本编辑器输入PrivateSub过程名。S2、按回车键,创建Sub过程样板,输入内容。10/17/202458例:利用输入输出函数和If结构创建子过程GetInfoOptionCompareDatabase'使用数据库次序进行字符串比较。PublicSubGetInfo()'声明过程名为GetInfo,该Sub过程没有参数DimanswerAsString'声明字符串变量answeranswer=InputBox(Prompt:="Whatisyourname?")'将用户输入的字符赋值给变量aswerIfanswer=EmptyThen'条件If...Then...Else语句
MsgBoxPrompt:="youdidnotentername"'在屏幕上显示消息框Else
MsgBoxPrompt:="yournameis"&answer'MsgBox函数与answer变量连接,在屏幕上显示消息对话框EndIfEndSub10/17/202459Sub子过程的调用调用语法:Call过程名(实际参数表)其中,实际参数的个数、类型和顺序,应该与被调用过程的形式参数相匹配,有多个参数时,用逗号隔开。把过程名作为一个语句来调用语法:过程名[实参1[,实参2…]]
与第一种方式不同的是去掉了关键字和实参列表的括号。10/17/2024602)Function函数过程Function函数过程也称为自定义函数过程,是实现某一数据处理功能并返回处理结果的代码段。函数过程也可简称为函数,是可以返回一个值的过程。创建Function过程的方法:在代码窗口中,利用“工具”菜单中的“添加过程”命令,插入一个函数过程。在代码窗口中,把插入点放在所有现有过程之外,直接输入函数来定义。10/17/202461Function过程语法如下:
[Private|Public][Static]Function函数名([参数列表])[As数据类型][局部变量和常数声明]’用Dim或Static声明
[函数语句块][函数名=<表达式>][ExitFunction][函数语句块][函数名=<表达式>]EndFunction10/17/202462Function过程的调用语法:过程名([实参列表])调用其它模块中的过程调用窗体中的过程,从窗体模块的外部调用窗体中的公有过程,必须用窗体的名字作为调用前缀。例如:CallForm.ExamSub([实参表])调用标准模块中的过程,如果在应用程序中,过程名是唯一的,则调用时不必加模块名。如果有同名的,在其他模块中调用时必须加模块名。
10/17/202463例:编写一个计算圆周长的函数过程,并利用子过程调用该函数,代码如下所示:PublicFunction计算(r!)AsSingle'定义名为“计算”的函数,参数为半径r,类型为单精度计算=2*3.1415926*r'定义函数表达式EndFunctionPublicSub调用()'定义名为“调用”的子过程
Dimx!,y!'定义变量
x=InputBox("请输入半径")'调用输入函数,为变量x输入数值
y=计算(x)'调用计算函数,将结果赋值给变量y
MsgBox("周长为"&y)'调用输出语句,将结果显示出来EndSub10/17/2024643)参数的传递按值传递参数(定义时加ByVal) 按值传递时,是将实参变量的值赋值到一个临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。按地址传递参数 按地址传递参数时,把实参地址传递给被调用过程,形参和实参共用内存的同一地址。调用过程中,形参值一旦改变,相应实参的值也跟着改变。10/17/2024655、创建VBA模块1)VB编码规则语言元素:VB的语言基础是Basic语言,其主要元素包括关键字、函数、表达式和语句。VB代码书写规则:程序中不区分大小写,系统可对用户程序代码进行自动转换。保留行号和标号:通常用在Goto语句中。10/17/202466语句书写规则:在同一行上可以书写多行语句,语句间用冒号(:)分隔;单行语句可以分多行书写,在本行后加续行符空格或下划线;一行允许多达255个字符。程序的注释方式:整行注释一般以Rem开头,也可以用撇号’;用撇号引导的注释,既可以是单独成行,也可以直接放在语句的后面。10/17/2024672)在“代码窗口”中编程代码窗口包含了一个和VB相同的开发调试系统。“代码窗口”上方有两个组合框,左边是对象框,右边是事件过程框。如图所示:10/17/2024683)创建VBA模块
Access中可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 路政系统消防安全管理指南
- 高三冲刺物理带电粒子在磁场中运动|洛伦兹力 圆周运动
- 会计监督试题及答案
- 活动方案试题及答案
- 2026年低压电工习题(含参考答案)
- 2026年校医考试题库及答案
- 团结友爱齐奋进小学主题班会课件
- 会议室预订变更确认通知(8篇范文)
- 2026年和平高校招生测试题及答案
- 2026年怀念母亲书的测试题及答案
- 种质资源共享协议书
- 2025年国开园艺设施题库及答案
- 2025年公开选拔乡镇副科级领导干部笔试题库(附答案)
- 2025口腔医师三基培训
- 2025年成人高考专升本民法真题及答案
- 软硬件资源配置管理办法
- 学堂在线 智能时代下的创新创业实践 期末考试答案
- 乌鲁木齐门楼牌管理办法
- 砂浆企业安全管理制度
- 建筑施工培训课件-木工安全教育
- 汽车整车装配与调试课件:车门总成的装配
评论
0/150
提交评论