模块与VBA程序设计.ppt_第1页
模块与VBA程序设计.ppt_第2页
模块与VBA程序设计.ppt_第3页
模块与VBA程序设计.ppt_第4页
模块与VBA程序设计.ppt_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章,模块与VBA程序设计,二级ACCESS模块与VBA,10.1模块和过程的创建,模块是Access数据库7个对象之一,其实质就是没有界面的VBA程序。模块具有很强的通用性,窗体、报表等对象都可以调用模块内部的过程。模块基本上是由声明、语句和过程组成的集合,它们作为一个已命名的单元存储在一起,对VBA代码进行组织。Access有两种类型的模块:标准模块和类模块。,二级ACCESS模块与VBA,10.1模块和过程的创建,类模块包括窗体模块(模块中包含在指定的窗体或其控件上事件发生时触发的事件过程的代码。)和报表模块(模块中包含由在指定报表或其控件上发生的事件触发的事件过程的代码。),它们各自与某一特定窗体或报表相关联。类模块可以调用标准模块中定义好的过程作用范围限于所属窗体或报表内部,生命期也随窗体或报表的打开而开始、关闭而结束,二级ACCESS模块与VBA,10.1模块和过程的创建,标准模块标准模块包含的是通用过程和常用过程,这些通用过程不与任何对象相关联,常用过程可以在数据库中的任何位置运行。类模块可以调用标准模块中定义好的过程标准模块中的公共变量和公共过程具有全局特性,作用范围在整个应用程序,生命期伴着应用程序运行而开始、关闭而结束,二级ACCESS模块与VBA,10.1模块和过程的创建,模块的基本组成单元过程Sub子过程可执行一系列操作,无返回值可在该子过程之外用CALL显示调用调用Callmysub(参数1,参数2,)Function函数执行一系列操作,返回执行结果返回值直接利用函数名调用获得调用x=myFuntion(参数),Submysub(参数1,参数2,)变量声明部分操作语句部分EndSub,FunctionmyFunction(参数)变量声明部分操作语句部分EndFunction,二级ACCESS模块与VBA,10.1模块和过程的创建,模块的创建创建一个名为“模块入门”的新模块,二级ACCESS模块与VBA,10.1模块和过程的创建,过程的创建在“模块入门”模块中创建一个Hello过程,二级ACCESS模块与VBA,10.2VBA编程环境:VBE界面,工程窗口,属性窗口,代码窗口,立即窗口,对象选定器,过程选定器,二级ACCESS模块与VBA,10.2VBA编程环境:VBE界面,ACCESS视图,运行子过程/用户窗体,中断,重新设定,工程管理器,插入模块,属性窗口,对象浏览器,显示出对象库以及工程里过程中的可用类、属性、方法、事件及常数变量。可以用它来搜索及使用既有的对象,或是来源于其他应用程序的对象。,二级ACCESS模块与VBA,10.2VBA编程环境:如何进入VBE,进入VBE的基本方法在数据库窗口单击“工具”“宏”“VisualBasic编辑器”双击要查看或编辑的模块对象新建一个模块对象对窗体和报表,在设计视图中点击“代码”按钮对窗体和报表,在设计视图中,点击某一控件的“事件属性”,二级ACCESS模块与VBA,VBA程序设计,一门程序设计语言应该怎么学?掌握语言的基本用途掌握语言的基本构成掌握语言的基本书写规范掌握语言的数据类型、运算符、常用函数、基本语句结构、调用关系。利用上述元素编写程序代码,逐步深化,二级ACCESS模块与VBA,10.3面向对象编程基本概念,一、对象与类对象:对象是基本的运行时的实体,如窗体、报表、各种控件等,包括作用于对象的操作(方法)和对象的响应(事件)。将数据和处理这些数据的过程封装在一起。类:一个抽象的整体概念,对象是类的实例化。类与对象是面向对象程序设计语言的基础。例:“学生”类,“张三”对象,二级ACCESS模块与VBA,10.3面向对象编程基本概念,二、属性(Property)所有对象都有自己的属性。用来描述和反映对象特征的参数。如:控件名称(Name)、标题(Caption)、颜色(Color)、字体(FontName)等属性决定了对象展现给用户的界面具有什么样的外观及功能。对象属性设置的方法:在设计模式下,通过属性窗口直接设置对象的属性。在程序的代码中通过赋值实现,其格式为:对象.属性=属性值例:Label10.Caption=“显示”,二级ACCESS模块与VBA,10.3面向对象编程基本概念,在VBA中引用ACCESS对象:基本语法:Forms(或Reports)!窗体(或报表)名称!控件名称.属性名注意要点如果在通用模块或在一类模块中引用另一类模块的控件时,应该使用上述完整语法。如果在类模块中引用自己窗体上的控件,仅采用下面语法:控件名称.属性名,例如:在窗体Form1中引用Form2上的Label1控件Forms!Form2!Label1.Caption=“教师信息表”在引用Form2上引用自己的Label1控件Label1.Caption=“教师信息表,二级ACCESS模块与VBA,基本控件常用属性,二级ACCESS模块与VBA,10.3面向对象编程基本概念,三、事件(Event)及事件过程(EventProcedure)事件:可被对象识别的动作。如:窗体打开OnOpen,按钮的单击OnClick,双击OnDbClick等事件过程:是指附在该对象上的程序代码,是事件触发后处理的程序。事件过程的形式如下:Sub对象名_事件过程名(参数列表).(事件过程代码)EndSub,例如:SubcmdOk_Click()cmdOk.FontSize=20设置命令按钮的字体大小为20EndSub,二级ACCESS模块与VBA,10.3面向对象编程基本概念,四、方法(Method)方法:在对象上可操作的过程,是VB系统提供的一种特殊的过程和函数方法是面向对象的,所以方法调用一般要指明对象。对象方法调用形式:对象.方法参数列表,例如:Debug.print欢迎您使用ACCESS在立即窗口中打印出文字,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,本节内容及要求1.熟悉VB程序中代码和语句书写规则2.掌握VB的数据类型3.掌握VB的运算符和表达式的使用4.掌握常用内部函数的使用,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,编码规则1.VBA代码中不区分字母的大小写。2.一条语句写完后不需加任何结束符。3.同行上可以书写多条语句,语句间要用冒号“:”分隔。4.若一个语句行不能写下全部语句时,可以换行。换行时需在本行后加入续行符,1个空格加下划线“_”。5.一行最多允许255个字符。6.注释以Rem开头,也可以使用单引号“”,注释内容可直接出现在语句的后面。7.在程序转向时需用到标号,标号是以字母开始而以冒号结束的字符串。8.函数和方法后应加上括号()。,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,编码规则举例LABEL10与label10相同x=y+z:y=z+x:z=y+x在同一行书写了三个语句MyVar=“这是一个_&“例子说明如何_&“续行代码“空白加下划线(_)可接续两行以上的代码。Thisisacomment.()引导注释文本RemThisisacommentRem引导注释文本IfNumber=1ThenGoToLine1ElseGoToLine2EndifLine1:标号1MyString=“数值等于1“Line2:标号2MyString=数值等于2,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,数据类型标准数据类型,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,在Access中,有4种不同的编辑环境需要用户指定数据类型表设计视图、查询参数、VBA代码、SQL查询视图。其数据类型与VBA数据类型对比,如右图所示。,数据类型的对比,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,数据类型之间的转换在进行VBA编程过程中,用户可以将一种数据类型的数据转换成另一种特定类型的数据。,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,数据类型自定义类型在模块级别中使用,用于定义包含一个或多个元素的用户自定义的数据类型。,基本语法:Private|PublicType类型名元素名As数据类型元素名As数据类型EndType,例:定义学生类型数据PublicTypeStudentsNameAsString(8)AgeAsIntegerEndType,声明变量:DimStudentAsStudents引用数据:Student.Name=”张三”Student.Age=15,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,标准数据类型要点Boolean数据类型:值只能是True或是False。当转换其他的数值类型为Boolean值时,0会转成False,而其他的值则变成True。当转换Boolean值为其他的数据类型时,False成为0,而True成为-1。Date数据类型:日期须以数字符号(#)扩起来,例如,#2008-3-23#Object数据类型:利用Set语句,声明为Object的变量可以赋值为任何对象的引用。Variant数据类型:所有没被显式声明(用如Dim、Private、Public或Static等语句)为其他类型变量的数据类型。,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,Variant数据类型Variant是一种特殊的数据类型,除了定长String数据及用户定义类型外,可以包含任何种类的数据,以及Empty、Error、Nothing及Null等特殊值。可以用VarType函数(变量类型)或TypeName(类型名)函数来检查Variant中的数据实际类型。,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,标识符程序中常量、变量、过程等对象的名字,VBA标识符规定:第一个字符必须是字母或下划线(_)包含的字符数不超过255个不得与VBA的关键字同名,如不能使用Sub、For等不能使用下列字符:!&$#(空格)从增强程序可读性角度出发,标识符应使人望文生义,了解其代表的内涵。,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,常量在程序运行过程中,其值不能被改变的量称为常量。VBA中有三类常量:普通常量、符号常量、系统常量普通常量整型常量:10、110%(Integer)、23&(Long)实型常量:0.123!(Single)、-1.123#、1.25E+3、-1.25E-3字符串常量:“ABD”、“XYZ、”大家好”逻辑常量:ture、false日期常量:#2002-5-414:30:00PM#、#09/02/99#,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,符号常量在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。关键字Const声明符号常量,基本语法如下Const常量名As类型|类型符号=常数表达式,例如:ConstPI#=3.1415926535等价于:ConstPIAsDouble=3.1415926535,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,系统常量VBA系统提供了应用程序和控件的系统定义常数。它们存放于系统的对象库中,在“对象浏览器”中能查看这些常数。,颜色常数常数值描述vbBlack0 x0黑色vbRed0 xFF红色vbGreen0 xFF00绿色vbYellow0 xFFFF黄色vbBlue0 xFF0000蓝色vbMagenta0 xFF00FF紫红色vbCyan0 xFFFF00青色vbWhite0 xFFFFFF白色,星期常数常数值描述vbUseSystem0vbSunday1星期日vbMonday2星期一vbTuesday3星期二vbWednesday4星期三vbThursday5星期四vbFriday6星期五vbSaturday7星期六,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,变量程序中的变量为临时存在单元,可存放文字、数值、日期和对象属性。每个变量都有一个名字,程序通过变量名对变量进行存取操作。用Dim语句显式声明变量1、Dim变量名AS类型或Dim变量名类型符2、声明的每个变量都要一个单独的As类型子句,没有的作为变体类型(Variant),例1:DimiCountAsinteger,sumAssingle等价于:DimiCount%,sum!例2:DimiCountAsinteger,sum,nameasstring*10则声明了两个变量,其中icount为整型,sum为变体型,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,隐式声明变量VBA允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。VBA根据程序中赋予变量的值来自动调整变量的类型。,例如:变量a,b,Sum都没有事先定义。PrivateSubForm_Click()Sum=0a=10:b=20Sum=a+bdebug.PrintSum=“&SumEndSub,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,强制显式声明变量OptionExplicit良好的编程习惯都应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。VBA中可以强制显式声明,在窗体模块、标准模块和类模块的通用声明段中加入:OptionExplicit,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,变量的作用域和生命周期VBA中,变量定义的位置和方式不同,则变量存在的时间和起作用的范围也有所不同,即变量的作用域与生命期。变量的可见性:即可对变量进行操作的状态。变量作用域的三个层次:局部范围(过程级别)、模块范围、全局范围,二级ACCESS模块与VBA,10.4VBA数据类型、常量、变量,局部范围(过程级别):定义在模块的过程内部,只有在声明此变量的过程中才可使用定义方式:DimxAsSinglStaticyAssingle用Dim定义的局部变量只有在它所在的过程运行时才会有值Static定义的局部变量在整个程序运行期间均有值,所以它可以作为中间变量保存结果。模块范围(Private):定义在模块的所有过程外部的起始位置,运行时在模块所包含的所有子过程和函数中可见。全局范围(Public):定义在模块的所有过程外部的起始位置,运行时在所有类模块和标准模块的所包含的所有子过程和函数过程中都见。一般函数默认为Public,二级ACCESS模块与VBA,变量的作用域和生命周期举例,x全局变量y过程变量z过程静态变量,二级ACCESS模块与VBA,10.5数组,数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。一维数组(线状)Public/Private/Static/Dim数组名(下界To上界)As数据类型下界和上界不能使用变量,必须是常量,一般是整型常量。,例如:DimWorkers(8)AsInteger未定义下界,下届默认为0,有08共9个元素DimWorkers(1To8)AsInteger下届为1,上届为8,有18共8个元素,二级ACCESS模块与VBA,10.5数组,数组的引用数组必须先定义后使用使用形式:数组名(下标)下标可以是整型变量、常量或表达式。引用不能下标越界,通常可以通过一个For循环处理数组DimNumbers(1To10)AsIntegerDimIAsIntegerForI=1To10Numbers(I)=30NextI如果I=11怎么办?,二级ACCESS模块与VBA,10.5数组,二维数组(表的形式)和多维数组Dim数组名(下界To上界,下界To上界,)As数据类型dimAa(19,19)AsInteger等价于dimAa(1To20,1To20)AsInteger,下面将值30赋给数组:DimIAsInteger,JAsIntegerDimAa(9,9)AsIntegerForI=0To9ForJ=0To9Aa(I,J)=30NextJNextI,二级ACCESS模块与VBA,10.5数组,动态数组如果在程序运行之前不能肯定数组的大小,可以使用动态数组。申明方法:Dim数组名()As数据类型过程中用ReDim语句改变数组的大小ReDimPreserve数组名(下标1,下标2)ReDim语句是一个可执行语句,只能出现在过程中,并且可以多次使用,改变数组的维数和大小。每次使用ReDim语句都会使原来数组中值丢失。可以在ReDim后加Preserve参数来保留数组中的数据。但此时只能改变最后一维的大小。,二级ACCESS模块与VBA,10.5数组,例1:利用Redim改变数据维数和大小。Subarraychange()Dimx()asintergeReDimx(20)x(20)=30debug.Printx(20)ReDimx(20,5)x(20,5)=10debug.Printx(20,5)Endsub,例2:利用Preserver保留数组中的值。Subarraychange()Dimx()asintergeReDimx(20)x(20)=30debug.Printx(20)ReDimPreservex(30)debug.Printx(20)Endsub,二级ACCESS模块与VBA,10.6运算符,1.算术运算符(均是双目运算,ia=3),例如:5+10mod109/3+22结果是?,二级ACCESS模块与VBA,10.6运算符,2.字符串运算符字符串运算符有:、+(连接两字符串)区别+(连接运算):两个操作数均应为字符串类型;&(连接运算):两个操作数既可为字符型也可为数值型,当是数值型时,系统自动先将其转换为数字字符,然后进行连接操作。,例:100+123结果为100123Abc+123出错100&123结果为100123100&123结果为100123Abc&123结果为Abc123,二级ACCESS模块与VBA,10.6运算符,3.关系运算符,二级ACCESS模块与VBA,10.6运算符,4.逻辑运算符非Not、与And、或Or、异或Xor、逻辑相等(同或)Eqv、隐含(逐位比较)ImpNot逻辑非为单目运算符(要求一个操作数),其它为双目运算符。,0:false,1:true,二级ACCESS模块与VBA,10.6运算符,5.运算符的执行顺序表达式中的多种不同类型的运算符的优先级如下:算术运算符=字符运算符关系运算符逻辑运算基本说明:当一个表达式中出现多种运算符时,首先进行算术运算符,接着处理字符串连接运算符,然后处理比较运算符,最后处理逻辑运算符,在各类运算中再按照相应的优先次序进行。可以用括号改变优先顺序,强令表达式的某些部分优先运行。括号内的运算总是优先于括号外的运算。对于多重括号,总是由内到外。,二级ACCESS模块与VBA,10.7常用函数,VBA中提供了各种函数,利用函数可以完成许多相关的操作。其使用形式如下:函数名(参数列表),要点说明1.在三角函数中的自变量是以弧度为单位。如:sin300sin(3.14159/180*30)2.取整函数int()和fix()Fix(N)为截断取整,即去掉小数后的数:Fix(9.59)=9Int(N)不大于N的最大整数:Int(9.59)=9、Int(-9.59)=-10,二级ACCESS模块与VBA,10.7常用函数,要点说明3.Rnd函数返回01(包括0和不包括1)之间的双精度随机数。例:产生1-100的随机整数:Int(Rnd*100)+1怎样产生N,M区间的随机数?int(N+(M-N+1)*Rnd)例Int(100+201*Rnd)随机数100,3004.类型转换函数Asc(“Abcd”)值为65只取首字母的Ascii值Val(abc123)值为0,Val(1.2sa10)值为1.2注意:Val()函数只将最前面的数字字符转换为数值。,二级ACCESS模块与VBA,10.7常用函数,5.日期函数Date():返回系统日期,如2008-03-25Time():返回系统时间,如19:30:25Now():返回系统日期和时间:2008-03-2519:30:25Weekday(时间,w):返回17的整数,表示星期几。其中可选参数w是指定一星期的第一天是星期几的常数。例:weekday(#2004-2-29#)=1即2004-2-29为星期天若weekday(#2004-2-29#,3)=6即让星期二为第一天DateAdd()、DateDiff()相关参数见书P303,二级ACCESS模块与VBA,10.8三种基本结构程序设计,传统流程图中的基本符号,二级ACCESS模块与VBA,10.8三种基本结构程序设计,三种基本结构,二级ACCESS模块与VBA,10.8三种基本结构程序设计,三种基本结构,二级ACCESS模块与VBA,10.8三种基本结构程序设计,选择结构,1.IfThen语句(单分支结构)IfThen语句块EndIf或IfThen,例:已知两个数x和y,比较它们的大小,使得x大于y.IfxYThenPrintXElsePrintY,二级ACCESS模块与VBA,10.8三种基本结构程序设计,2.IfThenElse语句(双分支结构)IfThenElseEndIfIfThenElse,例:输出x,y两个中值较大的一个值。IFXYThenPrintXElsePrintYEndIf单行形式:IFXYThenPrintXElsePrintY,二级ACCESS模块与VBA,10.8三种基本结构程序设计,3.IfThenElseIf语句(多分支结构)形式:IfThenElseIfThenElseIfThenElse语句块n+1EndIf,二级ACCESS模块与VBA,10.8三种基本结构程序设计,Ifx=90thenPrint优秀ElseIfx=80ThenPrint良好ElseIfx=70ThenPrint中等ElseIfx=60ThenPrint及格ElsePrint不及格EndIf,例:输入一学生成绩,评定其等级。方法是:90100分为“优秀”,8089分为“良好”,7079分为“中等”,6069分为“及格”,60分以为“不合格”,二级ACCESS模块与VBA,10.8三种基本结构程序设计,SelectCase语句(情况语句),SelectCase变量或表达式Case表达式列表1语句块1Case表达式列表2语句块2CaseElse语句块n+1EndSelect,:与同类型的下面四种形式之一:表达式A+5一组枚举表达式(用逗号分隔)2,4,6,8表达式1To表达式260to100Is关系运算符表达式Isb,a,b)返回a,b中较大的值Switch函数switch(条件式1,表达式1条件式2,表达式2)条件式与表达式成对出现,如条件式为真,则返回对应表达式的值y=switch(x0,1,x=0,0,x0,1)根据x的值来为y赋值。Choose函数Choose(索引式,选项1,选项2,选项n)根据索引式的值返回选项列表中的某个值y=choose(x,1,m,7,n)根据x的值来为y赋值。,二级ACCESS模块与VBA,10.8三种基本结构程序设计,循环结构DoLoop:通过Do来执行循环,有四种形式。其中While是条件为真时循环,Until是条件为假时循环。,形式1、2(当型循环):DoWhile|Until语句块ExitDo语句块Loop,二级ACCESS模块与VBA,10.8三种基本结构程序设计,当型循环举例,SubCommand1.Click()DimIAsIntgerI=1DoWhileI=20PrintII=I+1LoopEndSub,SubCommand1.Click()DimIAsIntgerI=1DoUntilI=20PrintII=I+1LoopEndSub,结果I21,结果I=1,二级ACCESS模块与VBA,10.8三种基本结构程序设计,循环结构,形式3、4:(直到循环)Do语句块ExitDo语句块LoopWhile|Until,二级ACCESS模块与VBA,10.8三种基本结构程序设计,直到循环举例,SubCommand1.Click()DimIAsIntgerI=1DoPrintII=I+1LoopWhileI=20EndSub,SubCommand1.Click()DimIAsIntgerI=1DoPrintII=I+1LoopUntilI=20EndSub,结果I=21,结果I=2,二级ACCESS模块与VBA,10.8三种基本结构程序设计,WhileWend语句循环结构,WhileWend,说明:该语句的功能与DoWhile.Loop实现的循环完全相同。,SubCommand1.Click()DimIAsIntgerI=1WhileI=20PrintII=I+1WendEndSub,二级ACCESS模块与VBA,10.8三种基本结构程序设计,For循环语句(一般用于循环次数已知),For循环变量初值to终值Step步长语句块ExitFor语句块Next循环变量,二级ACCESS模块与VBA,10.8三种基本结构程序设计,For循环语句(一般用于循环次数已知),循环次数,例:ForI=2To13Step3PrintI,NextIPrint“I=“,I循环次数?输出结果?,循环执行次数输出I的值分别为:25811出了循环输出为:I=14,二级ACCESS模块与VBA,10.8三种基本结构程序设计,循环的嵌套多重循环结构如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定。以下是各种嵌套循环的示例:,(1)ForI=.ForJ=.NextJ.NextI,(2)ForI=.DoWhile/Until.Loop.NextI,(3)DoWhile.ForJ=.NextJ.Loop,(4)DoWhile/Until.DoWhile/Until.Loop.Loop,二级ACCESS模块与VBA,10.8三种基本结构程序设计,对于循环的嵌套,要注意以下事项:(1)内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环,不能交叉;(3)不能从循环体外转向循环体内,也不能从外循环转向内循环.正确错误,Forii=1To10Forii=1To20NextiiNextii,二级ACCESS模块与VBA,10.9其它语句,1.Goto语句形式:GoTo标号|行号作用是无条件地转移到标号或行号指定的那行语句.由于goto语句破坏了程序的逻辑顺序,一般不赞成使用,IfNumber=1ThenGoToLine1ElseGoToLine2Line1:标号1MyString=Numberequals1“Line2:标号2MyString=Numberequals2,二级ACCESS模块与VBA,10.9其它语句,2.Exit语句Exit语句用于退出Do.Loop、For.Next、Function或Sub代码块。对应的使用格式为:ExitDo、ExitFor、ExitFunction、ExitSub。分别表示退出DO循环、For循环、函数过程、子过程。语法:ExitDo|For|Function|Select|Sub|While,例如:下面的例子是使用Exit语句退出For.Next循环、Do.Loop循环及子过程。,二级ACCESS模块与VBA,10.9其它语句,PrivateSubForm_Click()DimI%,Num%Do建立无穷循环。ForI=1To100循环100次。Num=Int(Rnd*100)生成一个099的随机数。SelectCaseNumCase10:ExitFor退出For.Next循环。Case50:ExitDo退出Do.Loop循环。Case64:ExitSub退出子过程。EndSelectNextILoopEndSub,二级ACCESS模块与VBA,10.9其它语句,3.Continue语句将控制立即传递给下一轮循环。语法:ContinueDo|For|While,PrivateSubForm_Click()DimI%,Num%ForI=1To100循环100次if(Imod2)=0)thenNum=Num+IelsecontinueforendifNextI,二级ACCESS模块与VBA,10.9其它语句,4.With.EndWith语句With对象名语句块EndWith说明:With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。,例如,要改变一个对象的多个属性,可以在With控制结构中加上属性的赋值语句,这时候只是引用对象一次而不是在每个属性赋值时都要引用它。下面的例子显示了如何使用With语句来给同一个对象的几个属性赋值。,二级ACCESS模块与VBA,10.9其它语句,需要对同一对象设置几个属性。途径之一是使用多条语句。PrivateSubForm_Load()Command1.Caption=退出(E&xit)Command1.Top=500Command1.Left=4500Command1.Enabled=TrueEndSub使用With.EndWith语句,上面程序的代码如下。PrivateSubForm_Load()WithCommand1.Caption=OK.Top=500.Left=4500.Enabled=TrueEndWithEndSub,二级ACCESS模块与VBA,10.10VBA中的常用操作,1.消息窗MsgBox消息窗用于显示消息,等待用户单击按钮,并返回一个整型值。基本格式:MsgBox(提示,按钮风格,标题,帮助,上下文),二级ACCESS模块与VBA,10.10VBA中的常用操作,1.消息窗MsgBoxMsgBox(提示,按钮风格,标题,帮助,上下文),说明:1、除“提示”外,省略任何位置参数,则必须保留相应的逗号分隔符。2、提示文本如需换行,则用Chr(13)+Chr(10)将各行分开。,MsgBox(Hello,vbOKOnly,mytitle)MsgBox(HelloChr(13)+Chr(10)World,mytitle),二级ACCESS模块与VBA,10.10VBA中的常用操作,根据用户所选按钮,函数返回1到7的整数值,其含义如下,二级ACCESS模块与VBA,10.10VBA中的常用操作,2.输入框InputBox提示并获取用户输入的值。基本格式:变量名=InputBox$(,),注意:输入区缺省值有$返回字符类型,否则为数值类型.提示文本如需换行,则用Chr(13)+Chr(10)将各行分开。,二级ACCESS模块与VBA,10.10VBA中的常用操作,返回字符类型举例:有下列语句如下:DimstrNameAsString(40),strS1AsString(40)strS1=“请输入你的姓名”+Chr(13)+Chr(10)+“然后单击确定”strName=InputBox$(strS1,“输入框”,100,100)当键盘输入“王晓明”后,变量strName获得键盘输入的值.,二级ACCESS模块与VBA,10.10VBA中的常用操作,1.DoCmd对象VBA中可以通过调用DoCmd对象的方法来实现对Access的各种操作。,二级ACCESS模块与VBA,10.10VBA中的常用操作,打开各种ACCESS对象示例,二级ACCESS模块与VBA,10.10VBA中的常用操作,关闭ACCESS中的对象DoCmd.Closeobjecttype,objectname,saveobjecttype下列固有常量之一:,acDefault(默认值)acDiagram图acForm窗体acMacro宏acDataAccessPage数据访问页,acModule模块acQuery查询acReport报表acTable表,二级ACCESS模块与VBA,10.10VBA中的常用操作,关闭各种ACCESS对象示例,二级ACCESS模块与VBA,10.10VBA中的常用操作,2.计时事件TimerVBA可通过设置窗体的“计时器间隔(TimerInterval)”属性与添加“计时器触发器(Timer)”事件来完成“定时”功能。基本处理过程:Timer事件每隔TimerInterval时间间隔被激发一次,然后运行Timer事件过程来响应。,PrivateSubForm_Timer()Labeltime.Caption=CStr(Now()EndSub,二级ACCESS模块与VBA,10.10VBA中的常用操作,3.运行错误处理程序中一定要合理的设置错误处理,以便处理程序在不可预知的情况下发生错误。如果仅由操作系统来处理这些错误,不仅会让用户不知所措,还会造成灾难性的后果。VBA中提供了以下语句来处理程序运行时的错误:OnErrorGoTo标号:发生错误时转移到标号处进行处理OnErrorResumeNext:忽略的发生错误,执行下面语句OnErrorGoTo0:关闭出错处理,二级ACCESS模块与VBA,10.11过程调用与参数传递,Sub子过程在VBA中,的Sub子过程分为:事件过程和通用过程1.事件过程,(2)控件事件的语法PrivateSub控件名_事件名(参数列表)语句组EndSub,(1)窗体事件的语法PrivateSubForm_事件名(参数列表)语句组EndSub,二级ACCESS模块与VBA,10.11过程调用与参数传递,2.通用过程,子过程的定义形式如下:Public|PrivateStaticSub子过程名(形参表)语句组ExitSub语句组EndSub,说明:(1)子过程名:命名规则与变量名规则相同。子过程名不返回值,而是通过形参与实参的传递得到结果,调用时可返回多个值。,二级ACCESS模块与VBA,10.11过程调用与参数传递,(2)形式参数列表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获得相应的值。(3)过程可以无形式参数,但括号不能省。(4)参数的定义形式:ByValByRef变量名()As类型,,ByVal表示当该过程被调用时,参数是按值传递的;ByRef(缺省)表示当该过程被调用时,参数是按地址传递的。,例.一个交换两个整型变量值的子过程。PrivateSubSwap(XAsInteger,YAsInteger)DimtempAsIntegerTemp=X:X=Y:Y=TempEndSub,二级ACCESS模块与VBA,10.11过程调用与参数传递,Function过程,Public|PrivateStaticFunction函数名()As函数体函数名=返回值ExitFunction函数名=返回值EndFunction,注意:在函数体内,函数名可以当变量使用,函数的返回值就是通过对函数名的赋值语句来实现的,在函数过程中至少要对函数名赋值一次。,二级ACCESS模块与VBA,10.11过程调用与参数传递,过程的调用,1子过程的调用子过程名参数列表或Call子过程名(参数列表)2函数过程的调用变量名=函数过程名(参数列表),说明:(1)参数列表称为实参或实元,它必须与形参保持个数相同,位置与类型一一对应。,二级ACCESS模块与VBA,10.11过程调用与参数传递,(2)调用时把实参值传递给对应的形参。其中值传递时实参的值不随形参的值变化而改变。而地址传递时实参的值随形参值的改变而改变。(3)当参数是数组时,形参与实参在参数声明时应省略其维数,但括号不能省。(4)调用子过程的形式有两种,用Call关键字时,实参必须加圆括号括起,反之则实参之间用“,”分隔。,例:调用上面定义的Sawp子过程的形式:Swapa,bCallSwap(a,b),二级ACCESS模块与VBA,10.11过程调用与参数传递,PrivateSubCmdOK()CallSwap(a,b)Swapa,bEndSub,PrivateSubSwap(x%,y%)Dimtemp%Temp=XX=YY=TempEndSub,过程调用的执行过程:,二级ACCESS模块与VBA,10.11过程调用与参数传递,过程之间参数的传递,1、形式参数是指在定义通用过程时,出现在Sub或Function语句中的变量名后面园括号内的数,是用来接收传送给子过程的数据,形参表中的各个变量之间用逗号分隔。,2、实际参数实际参数是指在调用Sub或Function过程时,写入子过程名或函数名后括号内的参数,其作用是将它们的数据(数值或地址)传送给Sub或Function过程与其对应的形参变量。实参可由常量、表达式、有效的变量名、数组名(后加左、右括号,如A())组成,实参表中各参数用逗号分隔。,二级ACCESS模块与VBA,10.11过程调用与参数传递,3、参数传递(虚实结合)参数传递指主调过程的实参(调用时已有确定值和内存地址的参数)传递给被调过程的形参,参数的传递有两种方式:按值传递、按地址传递。形参前加“ByVal”关键字的是按值传递,缺省或加“ByRef”关键字的为按地址传递。,传址与传值传址:形参得到的是实参的地址,当形参值的改变同时也改变实参的值。传值:形参得到的是实参的值,形参值的改变不会影响实参的值。,二级ACCESS模块与VBA,10.11过程调用与参数传递,SubSwap2(x%,y%)DimTemp%Temp=x:x=y:y=TempEndSub,SubSwap1(ByValx%,ByValy%)DimTemp%Temp=x:x=y:y=TempEndSub,例6.4,PrivateSubCmdOK_Click()a%=10:b%=20:Swap1a,b传值PrintA1=“&a&B1=“&ba=10:b=20:Swap2a,b传地址PrintA2=“&a&B2=“&bEndSub,二级ACCESS模块与VBA,10.11过程调用与参数传递,值传递的执行过程如下图:,地址传递数据的执行过程,二级ACCESS模块与VBA,10.12VBA数据库编程,VBA通过数据库引擎(Microsofjet)工具完成对数据库的访问,所谓数据库引擎其实是一组动态连接库(DLL),程序运行时被连接到VBA程序程序而实现对数据库的访问功能。VBA中提供了3种数据库访问接口。ODBCAPI:开放数据库互连应用编程接口。DAO:数据访问对象。ADO:Active数据对象,VBA访问的三种数据库类型:本地数据库:ACCESS外部数据库ODBC数据库:如Oracle、SyBase、SQLServer等,二级ACCESS模块与VBA,10.12VBA数据库编程,DAO数据对象模型模型,DBEngine数据库引擎为DAO模型最上层对象,包含并管理其它对象。,二级ACCESS模块与VBA,10.12VBA数据库编程,ADO数据对象模型模型(与语言无关),指定数据连接提供者,建立到数据源的连接。,可执行一个命令,如可执行SQL查询。一般用于表结构的修改。,可执行SQL查询返回一个记录集,并可对记录集进行修改、插入、删除操作。是ADO中最灵活的对象。,二级ACCESS模块与VBA,10.12VBA数据库编程,例:分别用DAO和ADO来完成对“教学管理.mdb”文件中“学生表”的学生年龄都加1的操作。(假设文件存放在E盘“考试中心”文件夹中),使用DAO技术:SubSetAgePlus1()dimweasDAO.Workspace工作区对象dimdbasDAO.Database数据库对象dimrsasDAO.Recordset记录集对象dimfdasDAO.Field字段对象setws=DBEngine.Workspace(0)setdb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论