第8章模块与VBA程序设计2.pptx
第8章 模块与VBA程序设计8.1 模块与VBA简介8.2 VBA面向对象程序设计8.3 VBA编程基础8.4 VBA程序的流程控制8.5 子过程与函数过程8.6 VBA常用的操作8.7 VBA数据库编程8.8 VBA程序运行错误处理与调试VBA简介VBA是Visual Basic for Applications的英文缩写,是Microsoft Office系列软件的内置编程语言,是用Visual Basic语言来作为语法基础的可视化的高级语言。VB是微软公司推出的可视化BASIC语言,是一种编程简单、功能强大的面向对象开发工具。VBA的语法结构与VB编程语言互相兼容,它使用了对象、属性、方法和事件等概念,使得初学者在编程的过程中感到十分容易,这也可以说是VBA的优点之一。VBA简介VB语言开发系统是独立运行的开发环境,它创建的应用程序可以独立运行在Windows平台上;而VBA则不同,其编程环境和VBA程序都必须依赖Office应用程序(如Access、Word、Excel等)。实际上VBA是“寄生于”VB应用程序的版本。用VBA语言编写的代码,将保存在Access中的一个模块里,并通过类似在窗体中激发宏的操作那样来启动(运行)这个模块,从而实现相应的功能。VBA 的开发环境VBEAccess的编程界面称为VBE(Visual Basic Editor),是Access提供的一个编程系统,是用来开发VBA的环境,通过在VBE中输入代码形成VBA程序。启动Access 2010,然后才能进入VBE环境。VBA 的开发环境VBE(1)直接进入VBA。在数据库中,单击“数据库工具”选项卡,在“宏”组中单击“Visual Basic”按钮,可进入VBA的编程环境界面VBA 的开发环境VBE(2)创建模块进入VBA。在数据库中,单击“创建”选项卡,在“宏与代码”组中单击“Visual Basic”按钮,可进入VBA的编程环境界面。VBA 的开发环境VBE(3)通过窗体和报表等大型的设计进入VBA。通过窗体和报表等大型的设计进入VBA有2种方法:在窗体或报表设计视图中单击“查看代码”按钮,进入VBAVBA 的开发环境VBE通过控件的事件响应进入VBA,在控件的“属性表”窗格中,单击对象事件的“省略号”按钮添加事件过程后,在窗体、报表或控件的事件过程中进入VBA(4)按Alt+F11组合键。VBE窗口的组成VBE窗口主要由“标准”工具栏、工程窗口、属性窗口和代码窗口4部分组成模块在Access 2010中,模块有两种类型:类模块和标准模块(1)类模块。类模块是包含代码和数据的集合,总是与某一特定的窗体或报表相关联。类模块包括窗体模块和报表模块。(2)标准模块。标准模块是代码的集合,标准模块包含与其他对象都无关的公共过程,以及公共变量的声明。标准模块显示在导航窗格中。标准模块和类模块都显示在“对象浏览器”对话框中。模块的组成模块由声明区域和过程两部分组成,声明区域用来声明模块使用的变量,过程是模块的组成单元。过程分为两种类型:子过程(Sub)和函数过程(Function)。(1)子过程。子过程又称为Sub过程,可以执行一系列操作,无返回值。定义格式为:Sub Sub 过程过程名名 程序代码程序代码 End End SubSub在过程名前加上关键字Call可以显式调用一个子过程。例题例8-1下面是一个简单的验证密码的Sub过程。Private Sub CheckPwd()Dim Pwd As StringPwdInputBox(请输入密码!)If Pwd123456 Then MsgBox 密码正确,欢迎进入系统!Else MsgBox 密码错误!End IfEnd Sub上例中Sub CheckPwd()就是创建的一个模块。模块的组成(2)函数过程。函数过程又称为Function过程,可以执行一系列操作,有返回值。定义格式为:Function Function 过程过程名名 程序代码程序代码 End End FunctionFunction调用函数过程时,需要直接引用函数过程的名称,而不能使用Call来调用执行。例题例8-2下面是编写求圆形面积的函数过程。Private Function Circle(r As Single)As SingleDim Circle As SingleCircle=0If r=0 Then MsgBox 圆半径必须是正数!End If Circle=3.14159*r*rEnd Function将宏转换为模块转换窗体或报表中的宏。1)在设计视图中打开窗体。2)选择“窗体设计工具/设计”上下文命令选项卡,单击“工具”组中的“将窗体的宏转换为Visual Basic代码”按钮,屏幕显示“转换窗体宏”对话框。3)在对话框中,单击“转换”按钮,屏幕显示转换完毕的提示对话框。4)单击“确定”按钮完成转换。转换全局宏1)在数据库窗口的导航窗格中,展开宏对象列表,选择要转换的宏。2)执行“文件”选项卡中的“对象另存为”命令,打开“另存为”对话框。3)在对话框的“保存类型”下拉列表框中选择“模块”选项,然后单击“确定”按钮,屏幕显示“转换宏”对话框。4)在对话框中单击“转换”按钮,屏幕显示转换完毕的提示对话框。5)单击“确定”按钮完成转换。创建和运行模块例8-3 以Sub过程为例创建模块,实现两个数的交换。Private Sub Command1_Click()Dim x As Integer Dim y As Integer x=Text0 把文本框0的值赋值给x y=Text2 把文本框2的值赋值给y Call swap(x,y)调用过程swap,或者使用格式 swap x,y Text0=x 把交换后的x值重新赋值给文本框0 Text2=y 把交换后的y值重新赋值给文本框2End SubPublic Sub swap(a As Integer,b As Integer)定义一个过程,实现2个数的交换 Dim temp As Integer 定义一个临时变量 temp=a 把a的值赋值给temp a=b 把b的值赋值给a b=temp 把temp的值赋值给bEnd Sub8.2 VBA面向对象程序设计对象:是面向对象方法中最基本的概念。对象可以用来表示客观世界中的任何实体,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。例如:一个人、一本书、一台计算机、一次比赛、一门课程等都是对象。在VBA中,每个可以操作的实体都是对象。例如,表、查询、窗体、报表,宏和模块,以及按钮、文本框、列表框等都是常用的对象。对象是VBA应用程序的基本单元,VBA提供了各种标准对象,可以在程序中直接使用这些对象。8.2 VBA面向对象程序设计某一种类型的对象具有一些共同的属性。将这些共同属性抽象出来就组成一个类。类是描述对象的特征和行为(功能)的模板。客观世界中的实体通常都既具有静态的属性,又具有动态的操作,因此,面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体,通常把对象的操作称为方法。属性、事件和方法属性、方法和事件构成了对象的基本要素。现实生活中的每个对象都有许多特性,每个特性都有一个具体的值。在面向对象程序设计中,对象的特性称为对象的属性,描述该对象特性的具体数据称为属性值。每个对象有多个属性,每个属性有属性值。对象属性的引用方式为:对象对象.属性属性 如:Text1.Value Label0.ForeColor Label0.Caption=“eee”属性、事件和方法方法就是事件发生时对象所执行的操作。VBA中的方法是事件发生时执行的一段内部程序,即事件过程代码。这些代码指定事件发生时对象需要完成的操作。VBA提供了许多常用的方法,我们可以直接调用这些方法,但有些方法则需要我们编写代码来实现。对象方法的引用方式为:对象对象.方法方法 如:DoCmd.OpenForm “学生信息表”属性、事件和方法事件是能够识别的动作。如按钮可以识别单击事件、双击事件等。在类模块每一个过程的开始行都显示对象名和事件名。如:Private Sub c1_Click()。Access 2010中主要的对象事件如表8-2所示。8.3 VBA编程基础标识符命名标识符命名规则规则:(1)由字母、数字、下划线组成,第一个字符必须是字母。(2)不能包含空格以及除下划线之外的标点符号。例如:!、&、$、#等。(3)不能用VBA的关键字和保留字。例如:Dim、Str等。(4)变量名称包含的字符个数不得多于255个。(5)变量名不区分英文字母的大小写。例如sum和SUM是同一个变量名称。(6)从增强程序可读性角度出发,标识符名称应使人见名知意,了解其代表的内涵。8.3 VBA编程基础语句的构成语句的构成VBA程序是语句的集合,语句是一条能够完成某项操作的命令,可以包含关键字、运算符、变量、常数和表达式,用来告诉计算机完成指定任务。8.3 VBA编程基础程序书写规则(1)每条语句通常单独占一行,一行允许多达255个字符。一行可以书写多条语句,各语句之间以冒号“:”分开。(2)如果想将一条语句写在多行上(如太长),则可以在行末尾加续行字符(一个空格加一个下划线)表示此行尚未结束。(3)如果一行语句输入完成后显示为红色,表示该语句存在错误。(4)尽量使用注释信息,清晰易读。(5)注释以Rem开头,也可以使用单引号“”,注释内容可直接出现在语句的后面。(6)代码不区分英文字母大小写。(7)函数和方法后应加上括号。(8)VBA会自动对语句进行一定的格式化。如调整大小写、运算符与操作数之间的间距等,使编写的程序更整齐规范、易于阅读理解。标准数据类型VBAVBA类型型声明符号声明符号数据数据类型型取取值范范围默默认值ByteByte字节02550IntegerInteger%整型-32 76832 7670BooleanBoolean是/否True 和FalseFalseLongLong&长整型-2 147 483 6482 147 483 6470SingleSingle!单精度负数:-3.402 823E+38-1.401 298E-450正数:1.401 298E-453.402 823E+38DoubleDouble#双精度负数:-1.797 693 134 862 31E+308-4.940 656 484 124 7E-3240正数:4.940 656 484 124 7E-3241.797 693 134 862 31E+308CurrencyCurrency货币-22 337 203 685922 337 203 6850StringString$文本或备注根据字符串长度而定DateDate日期/时间January 1,100December 31,99990VariantVariant任何Empty数据类型之间的转换函数函数类型型参数表达式取参数表达式取值范范围CBoolBoolean任何有效数值或字符串表达式CByteByte0255CCurCurrency-922 337 203 685 477.580 8922 337 20 3685 477.580 7CDateDate任何有效日期表达式CDblDouble负数 -1.797 693 134 862 32E308-4 946 564 584 124 7E-324正数 4.946 564 584 124 7E-3241.797 693 134 862 32E308CIntCIntInteger-32 76832 767,小数部分四舍五入CLngLong-2 147 483 6482 147 483 647,小数部分四舍五入CSngSingle负数-3.402 823E38-1.401 298E-45正数1.401 298E-453.402 823E38CVarVariant数值,范围与Double相同;文本,范围与String相同CStrCStrStringCStr的返回值依据表达式而定对象数据类型对象象对象数据象数据类型型对象象库对应的数据的数据库对象象类型型数据库DatabaseDAO 3.6使用DAO时用Jet数据库引擎打开的数据库连接ConnectionADO 2.1ADO取代了DAO的数据库连接对象窗体FormAccess 9.0窗体,包括子窗体报表ReportAccess 9.0报表,包括子报表控件ControlAccess 9.0窗体和报表上的控件查询QueryDefDAO 3.6查询表TableDefDAO 3.6数据表命令CommandADO 2.1ADO取代DAO.QueryDef对象结果集DAO.RecordsetDAO 3.6表的虚拟表示或DAO创建的查询结果结果集ADO.RecordsetADO 2.1ADO取代DAO.Recordset对象用户定义数据类型应用过程中可以建立包含一个或多个VBA标准数据类型的数据类型,这就是用户定义数据类型。创建自定义的数据类型的语句是TypeEndType,用户自定义类型可包含一个或多个基本数据类型的数据元素、数组或一个先前定义的用户自定义类型。定义格式为:Type Type 数据类型名数据类型名 As As As As EndTypeEndType例题例8-4定义一个学生信息数据类型。Type NewStudentNo As String*8 学号,8位定长字符串Name As String 姓名,变长字符串StuSex As String*1 性别,1位定长字符串StuAge As Integer 年龄,整型EndType例题例8-5定义一个学生信息类型变量NewStud。Dim NewStu As NewStudentNewStu20150123NewStu.Name宏图NewStu.StuSex男NewStu.StuAge19常量、变量常量是指在程序运行过程中,其值不能被改变的量。常量的类型有4种:直接常量、符号常量、固有常量、系统定义常量。(1)直接常量。直接常量直接出现在代码中,即通常的数值或字符串值,也称为字面常量,它的表示形式决定它的类型和值。如:10,3.14,345#(双精度),345.12(货币型),hello,I LOVE VBA 程序设计等。常量、变量(2)符号常量。在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。VBA中使用关键字Const 声明符号常量。其语法规则如下:Const Const 常量名常量名 As As 类型类型=常数表达式常数表达式常量、变量例如:Const PI=3.1415926Const CCStr=I love Access上例声明中PI是实型常量,其值为3.1415926,CCStr是一个字符串常量,其值为I love Access。常量、变量1)符号常量名必须以字母为首字符,从第二个字符开始可以是数字或字母以及下划线。但要注意的是不能用VBA中的关键字作为常量名。例如,5s、RS.6D、If这几个常量命名就是错误的。2)若是在模块的通用声明区中定义符号常量,则建立一个所有模块都可以用的全局符号常量。一般是Const前加Global或Public关键字。例如:Public Const PI=3.143)如果符号常量定义在事件的过程中,该符号常量只在本过程中可用。4)符号常量定义时可以不用指明数据类型。常量、变量(3)固有常量。VBA还提供了许多固有常量,固有常量也叫做内部常量,它是Access自定义的常量。固有常量有两个字母前缀指明了定义该常量的对象库。通常来自Access库的常量以“ac”开头,来自ADO库的常量以“ad”开头,而来自Visual Basic库的常量则以“vb”开头。例如:acForm、adAddNew、vbCurrency。常量、变量(4)系统定义常量。系统定义常量指VBA系统预先定义好的,用户可以直接引用的量。例如:True、False、Yes、No、On、Off、Null等。系统定义常量可以在应用程序中使用。常量、变量变量变量是指在程序运行过程中,其值可以发生改变的量。任何一个变量都有三个要素:变量名、变量类型、变量的值。(1)变量的命名规则。所有的变量命名时都要遵循标识符的命名规则。(2)变量的声明。使用变量前,一般先声明变量名和类型(即先定义),后使用变量。根据变量类型的定义的方式,可以将变量分为隐含型变量和显式变量两种形式。常量、变量1)显式变量声明。使用Dim语句显式声明变量:Dim Dim 变量名变量名 AsAs数据类型数据类型,变量名变量名 AsAs数据类数据类型型 说明:可以用Dim同时定义多个变量,变量之间用西文逗号分隔,每一个变量都应该用As声明类型。例如:Dim a1 As integer,a2 As boolean。用Dim定义的变量是局部变量,会按照数据类型自动设置默认值。常量、变量例如:Dim name As stringDim x As integer,y As integerDim i上述举例中,第二条语句同时声明了两个变量x和y,第三条语句定义i为变体类型,可以存储任何类型数据。常量、变量用类型说明符声明变量类型。在变量名后加VBA的类型说明符来声明变量类型。例如:Dim iCount%,sum!,等价于Dim iCount As integer,sum As single。常量、变量2)隐式说明。VBA允许用户在编写应用程序时,不声明变量而直接使用,系统临时为新变量分配存储空间并使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。VBA根据程序中赋予变量的值来自动调整变量的类型。例8-6 变量a,b,Sum都没有事先定义。Private Sub Form_Click()Sum=0 a=10:b=20 Sum=a+b debug.Print Sum=&Sum End Sub常量、变量3)强制声明。为了保证所有变量都得到声明,可以使用强制声明功能,这样,只要在运行时遇到一个未经明确声明的变量名,系统就会发出错误警告。要强制显式声明变量,需要在窗体模块或标准模块的通用声明段中加入语句:Option Explicit说明:该语句的作用范围仅限于其所在模块。常量、变量(3)变量的初始化。声明一个变量而未赋值的时候,变量的值为系统默认值:数值型变量初始化为0;字符型变量为零长度字符串;变体型变量初始化为Empty。(4)变量的作用域和生命周期。在VBA编程中,变量定义的位置和方式不同,则它存在的时间和起作用的范围也有所不同,这就是变量的作用域与生命周期。常量、变量1)变量的作用域。变量的作用域是变量在程序中起作用的范围。分3个层次,从低到高依次为:局部(Locate)、模块(Private)、全局(Public)。局部(Locate):又称为本地变量,仅在声明变量的过程中有效。在过程和函数内部用dim声明或不用声明直接使用的变量,都是局部变量。局部变量在本地拥有最高级,当存在同名的模块级变量时,模块级变量被屏蔽。模块(Private):模块变量在所声明模块的所有函数和所有过程中都有效,变量定义在模块所有过程之外的起始位置,通常是窗体变量或标准模块变量。全局(Public):全局变量又称为公共变量,定义在标准模块所有过程之外,在所有模块的所有过程和函数中都有效。常量、变量定义格式:public public 变量名变量名 As As 数据类型数据类型例如:Dim Num,Total As Integer Num为可变类型Private Price As Currency Public Average As Single 常量、变量2)变量的生命周期。变量的生命周期是指变量在运行时有效的持续时间。变量的持续时间是从变量声明语句所在的过程第一次运行到代码执行完毕并将控制权交回调用它的过程为止的时间。局部变量(Locate):生命周期从过程或函数被调用到运行结束。全局变量(Public):生命周期从声明到Access应用程序结束。过程(Private)中用dim定义的变量,每次调用过程时都重新开始,过程结束时立即消失。用static代替dim定义变量,可以在过程实例间保留局部变量的值。用static定义的变量称为静态变量,作用范围与dim相同,在整个模块执行时一直存在。运算符和表达式1 1运算符运算符VBA中有很丰富的运算符。根据运算规则的不同,VBA中的运算符可分为4种类型:算术运算符、字符串运算符、关系运算符和逻辑运算符。(1)算术运算符。VBA提供了8个算术运算符运算符和表达式(2)字符串运算符字符串运算就是将两个字符串连接起来生成一个新的字符串。字符串运算符包括“&”运算符和“+”运算符。1)“&”运算符:将两个不同类型的数据(表达式的值)作字符串连接。例如:1&+&2&等于&1+2 结果为:1+2等于3说明:由于符号“&”还是长整型的类型定义符,在字符串变量后使用运算符“&”时,变量与运算符“&”之间应加一个空格。运算符“&”两边的操作数可以是字符型,也可以是数值型。不管是字符型还是数值型,进行连接操作前,系统先进行操作数类型转换,数值型转换成字符型,然后再做连接运算。例8-7 “&”运算符应用示例。12&56 结果为 1256运算符和表达式2)“+”运算符:用来连接两个字符串表达式,形成一个新的字符串。例8-8 “+”运算符应用示例。“4321”+1234 结果为 55554321+1234结果为 43211234abcd+1234 出错4321+1234&100结果为 5555100说明:使用字符运算符进行运算时,如果运算符两边都是字符型数据,“+”与“&”运算的结果相同。由于使用“+”号的局限性以及容易与算术运算符的加号(+)混淆,所以不提倡使用。运算符和表达式(3)关系运算符。两个操作数或者两个运算式子的值进行大小比较,结果为逻辑值,即真(True)或假(False)。运算符和表达式(4)逻辑运算符。逻辑运算符也叫布尔运算符,用于完成逻辑运算。VBA中有与(And)、或(Or)和非(Not)等6个逻辑运算符。运算符和表达式使用逻辑运算符可以对两个逻辑量进行逻辑运算,其结果仍为逻辑值真(True)或假(False)表达式表达式由常量、变量、运算符、函数、逻辑量和括号等按一定的规则组成的式子。表达式书写规则:(1)运算符不能相邻。如a+-b是错误的。(2)乘号不能省略。如x乘以y应写成x*y。(3)括号必须成对出现,均使用圆括号。(4)表达式从左到右在同一基准上书写,无高低。表达式例如:数值表达式:Cos(180*Pi/180)*100逻辑表达式:(N=0)And(N Mod 2 0)注意:VBA表达式写法与数学表达式不尽相同,例如3=x=7。正确的VBA表达式:3=x And x=7。错误的VBA表达式:3=x=7或3=x Or x=7。标准函数标准函数按其功能可分为数学函数、转换函数、字符串函数、日期函数和验证函数等。标准函数的格式:函数名(,)说明:参数放在函数名后的圆括号中,它可以是常量、变量或表达式,可以有一个或多个,或者是无参数函数。每个函数被调用时,都会返回一个值。每个函数被调用时,都会有一个返回值。根据函数的不同,参数与返回值都有特定的数据类型与之对应。标准函数1 1数学函数数学函数(1)绝对值函数Abs():返回数值表达式的绝对值。(2)取整函数Int、Fix。Int():当数值表达式为正数时,返回其整数部分;当数据表达式为负数时,返回小于等于数值表达式的第一个负整数。Fix():当数值达式为正数时,返回其整数部分;当数据表达式为负数时,返回大于等于数值表达式的第一个负整数。例如:Int(3.1)=3Int(-3.1)=-4 Fix(3.1)=3Fix(-3.1)=-3 标准函数(3)自然指数函数Exp():求e的数值表达式次幂,其中2.7182818284590。(4)自然对数函数Log():求以e为底的数值表达式的值的对数。(5)开平方函数Sqr():求数值表达式的平方根。(6)正弦函数Sin():求数值表达式的正弦值,数值表达式以弧度为单位。(7)余弦函数Cos():求数值表达式的余弦值,数值表达式以弧度为单位。(8)正切函数Tan():求数值表达式的正切值,数值表达式以弧度为单位。(9)产生随机数函数Rnd():产生一个01之间的随机数,数据类型为单精度。标准函数2 2、转换转换函数函数类型转换函数的功能是将数据转换成指定的数据类型。(1)字符串转换为字符代码函数Asc():返回字符串首字符的ASCII值。(2)字符代码转换为字符串函数Chr():返回与字符代码对应的字符。(3)数字转换为字符串函数Str():将数值表达式转换成字符串,注意:正数转换后会保留一位前导空格(表示正号)。(4)字符串转换成数字函数Val():将数字字符串转换成数值型数字,注意:转换时可自动将字符串中的空格、制表符和换行符去掉,当遇到不能识别为数字的字符时,停止读入字符串。标准函数3 3、字符串字符串函数函数字符串函数完成字符串处理功能。主要包括:(1)字符串截取函数。1)Left(,):从字符串表达式的左边起截取数值表达式个数的字符。2)Right(,):从字符串表达式的右边起截取数值表达式个数的字符。3)Mid(,数值表达式2):从字符串表达式左边第数值表达式1个字符起截取数值表达式2个字符,如果省略数据值表达式2则取到字符串末尾。标准函数(2)字符串检索函数。InStr(Start,Compare)检索字符串表达式2在字符串表达式1中最早出现的位置,返回一个整数。Start为可选参数,用来设置检索的起始位置,如省略则从第一个字符开始检索。Compare也为可选参数,用来指定字符串的比较方法,其值可以是1、2和0(默认),其中0(默认)为做二进制比较,1为做不区分大小写的文本比较,2为做基于数据库中包含信息的比较。如指定了Compare参数,则一定要有Start参数。Instr(“abcdehfdeldsf”,”de”)Instr(5,“abcdehfdeldsf”,”De”,1)标准函数(3)字符串长度检测函数。Len():返回字符串所含字符个数。例:Len(Access基础教程)返回10 注意:定长字符串的长度是其定义时的长度,和字符串实际值无关。例8-11 字符串长度检测函数举例。Dim str As String*8 str=Access Len(str)返回8 标准函数(4)大小写转换函数。UCase():将字符串中小写字母转成大写字母。LCase():将字符串中大写字母转成小写字母。例8-12 大小写转换函数举例。UCase(Access)返回ACCESSLCase(Access)返回access标准函数(5)生成空格函数。Space():返回数值表达式值个数的空格。(6)删除空格函数。LTrim():删除字符串的前导空格。RTrim():删除字符串的尾部空格。Trim():删除字符串的前导和尾部空格。标准函数4 4、日期日期函数函数(1)Date():返回当前系统日期。(2)Time():返回当前系统时间。(3)Now():返回当前系统日期和时间。假设当前系统日期和时间为2008-4-7 15:00:00。(4)Date()返回2008-4-7(5)Time()返回15:00:00(6)Now()返回2008-4-7 15:00:00(7)Year():返回日期表达式中的年份。(8)Month():返回日期表达式中的月份。(9)Day():返回日期表达式中的日期。(10)Weekday(,W):返回17的整数,表示星期几。W为可选项,用来指定一星期中的第一天是星期几的常数。如省略,默认星期日为一周的第一天。标准函数5 5、验证验证函数函数Access提供了一些对数据进行校验的函数标准函数例8-15 检验字符串类型。步骤如下:(1)建立文本框名称为t1附加标签标题为“输入年龄:”。(2)建立命令按钮名称为Command1标题为“验证”。(3)Command1的click事件代码:Private Sub Command1_Click()If t1=Or IsNull(t1)ThenMsgBox 不能为空!,vbCritical,提示 ElseIf IsNumeric(t1)=False Then MsgBox 必须是数字!,vbCritical,提示 ElseIf t1=150 Then MsgBox 超出范围!,vbCritical,提示 Else MsgBox 验证通过!,vbInformation,提示 End IfEnd Sub数组数组是包含相同数据类型的一组变量的集合。通过数组索引下标对数组中的单个变量进行引用。数组在内存中表现为一个连续的内存块。1 1一维数组一维数组定义格式:Public/Private/Static/Dim数组名(下界 To 上界)As数据类型数组(1)声明中下标是常数,不允许为表达式或变量。“下标”的一般形式为“下界 to 上界”。上界、下界为整数,不得超过Long数据类型的范围,并且下界应小于上界。若不指定下界,下界默认为 0。(2)As类型:若缺省,默认为变体型数组。若声明为数值型,数组中的全部元素都初始化为0,若声明为字符型,全部元素都初始化为空字符串。若声明为布尔型,全部元素都初始化为 False。(3)在模块的声明部分使用“Option Base 1”语句,可以将数组下标默认值由0改为1。(4)数组要先定义后使用,VBA不允许隐式声明数组。(5)“数组名”的命名遵守变量规则。同一过程中数组名不能与其他变量重名。(6)如果使用As语句定义数组类型,同一数组只能存放相同类型的数据。数组二维数组二维数组定义格式:Dim 数组名(下界 to 上界,下界 to 上界)As类型例如:Dim c(3,4)As Integer,定义了有20个元素的数组c,行下标从0到3,列下标从0到4。例如:Dim d(1 to 3,2 to 4)As Integer,定义了有9个元素的数组d,行下标从1到3,列下标从2到4。数组动态数组动态数组在定义数组时可以不指定下标,在程序运行需要时再指定,即数组元素的数量是可动态改变的。定义动态数组的方法是,先用Dim定义数组;然后用ReDim语句配置数组个数。ReDim语句声明只能用在过程中,它是可执行语句,可以改变数组中元素的个数,但不能改变数组的维数。每次用ReDim语句配置数组时,原有数组的值全部清零。例如:Dim bAges()As Byte ReDim bAges(N-1)8.4 VBA程序的流程控制VBA程序是语句的集合,语句是一条能够完成某项操作的命令,程序用来告诉计算机完成指定任务。VBA语句按照功能分类,一般分为两类语句:声明语句和执行语句。声明语句:用来定义变量、常量,并指定数据类型。执行语句:进行赋值操作、调用过程、实现各种流程控制。8.4 VBA程序的流程控制执行语句又称为控制语句,包含3种基本结构:顺序结构、选择结构、循环结构。顺序结构:按语句排列顺序依次执行。选择结构:又称为条件结构,根据不同条件选择执行不同操作。循环结构:重复执行某段程序代码。8.4 VBA程序的流程控制注释语句注释语句注释语句是非执行语句,用来提高程序的可读性,不被解释和编译。注释语句显示为绿色。格式1:rem 注释内容说明:用rem引导的注释语句,如果放在其他语句后面,之间用冒号分隔。格式2:注释内容说明:用单引号引导的注释语句,放在其他语句后面时无需使用冒号分隔。8.4 VBA程序的流程控制例8-16 注释实例。Dim a1 As integer,a2 As integer:rem 定义两个整型变量 a1=12 给两个变量赋值 a2=34 a1=a1+a2 将两个变量的和赋给变a1msgbox a1+a2=&a1,vbInformation,消息框:r:rem 用消息框显示结果8.4 VBA程序的流程控制赋值语句赋值语句赋值语句用来为变量指定一个值。格式:变量名=值或表达式(1)格式中的等号(=)称为赋值号,与数学中等号意义不同。(2)赋值号左边只能是变量名或对象的属性,不能是常量和表达式。(3)赋值语句有计算和赋值双重功能,将赋值号右边的计算结果赋给赋值号左边的变量。(4)赋值号两边要类型匹配。程序在处理实际问题时,往往需要根据条件是否成立,决定程序的执行方向,根据不同的条件,选择不同的处理过程,这就是选择结构。VBA中常用的实现选择结构的语句有两种:(1)If 语句 (2)Select Case语句选择结构选择结构1 1If If语句语句(1)单分支条件语句格式:If If Then Then 语句组语句组End IfEnd If例8-17 求两个数的最大值。Dim a As Integer,b As Integer a=3 b=5If ab Then a=b End IfMsgbox 最大值为:&a,vbInformation,消息框选择结构(2)双分支条件语句格式:If If Then Then ElseElse End IfEnd If例8-18 求两个数的最大值。Dim a As Integer,b As Integer,max As Integer a=12:b=8If ab Then max=b 用max存放最大值 else max=aEnd IfMsgbox 最大值为:&max,vbInformation,消息框选择结构(3)嵌套(多分支)的条件语句格式:If If Then1 Then If If Then2 Then 语句语句组组1 1 Else Else 语句语句组组2 2 End If End IfElseElse If If Then3 Then 语句语句组组3 3 Else Else 语句语句组组4 4 End If End IfEnd IfEnd If例8-19 输入某考生的成绩 score,当x90时,输出“优秀”;当75x90时,输出“良好”;当60 x75时,输出“合格”,当x60 时,输出“不合格”。Dim score As Integer score=CInt(InputBox(请输入考生的百分制成绩:)If score=75 Then If score=90 Then MsgBox 优秀 成绩分数90 Else MsgBox 良好 75成绩分数90 End If Else If score=60 Then MsgBox 合格 60成绩分数75 Else MsgBox 不及格 成绩分数60 End If End If例8-19 输入某考生的成绩 score,当x90时,输出“优秀”;当75x90时,输出“良好”;当60 x75时,输出“合格”,当x60 时,输出“不合格”。Dim score As Integer score=CInt(InputBox(请输入考生的百分制成绩:)If score=90 Then MsgBox 优秀 成绩分数90 Else if score=75 then MsgBox 良好 75成绩分数90 Else if score=60 Then MsgBox 合格 Else MsgBox 不及格 成绩分数60 End If End IfEnd If例8-19 输入某考生的成绩 score,当score90时,输出“优秀”;当75 score90时,输出“良好”;当60 score75时,输出“合格”,当score60 时,输出“不合格”。Dim score As Integer score=CInt(InputBox(请输入考生的百分制成绩:)If score=90 Then MsgBox 优秀 成绩分数90 ElseIf score=75 then MsgBox 良好 75成绩分数90 ElseIf score=60