第8章模块与VBA编程基础.ppt
第8章 模块与VBA编程基础,考试大纲,VBA程序设计基础 1.面向对象程序设计的基本概念 2.模块的基本概念(1)类模块(2)标准模块 3.创建模块(1)创建VBA模块(2)编写常用事件代码 Click,Load,Init,GetFocus,LostFocus 4.VBA编程基础(1)常量,变量,常用内部函数,表达式(2)VBA程序流程控制:顺序控制,选择控制,循环控制(3)过程的定义与调用:子过程,函数过程,参数传递,Contents,模块的基本概念,创建模块,1,2,模块是Access数据库中的一个重要对象,它以VBA(Visual Basic for Applications)为基础编写以函数过程(Function)或子过程为单元的集合方式存储。Access中,模块分为类模块和标准模块两种类型。,8.1 模块的基本概念,*模块和宏区别,“模块”和“宏”有什么区别?使用“宏”更加简单,不需要编程,而是用“模块”,要求对编程有基本知识,比较复杂。“模块”的运行速度比较快,而“宏”运行速度比较慢。“宏”的每个基本操作在VBA中都有相应的等效命令,如果在“模块”中使用这些语句就可以实现所有的单独的“宏”命令,所以“模块”的功能比“宏”更加强大。,类模块(文件扩展名为.cls)类模块是含有类定义的模块,包括其属性、事件和方法的定义。与窗体、报表、控件等紧密关联,如:窗体模块和报表模块都是类模块。,8.1.1 类模块,窗体和报表模块通常都含有事件过程,该过程用于响应窗体或报表中的事件。可以使用事件过程来控制窗体或报表的行为,以及它们对用户操作的响应,例如:用鼠标单击某个命令按钮。窗体和报表模块具有局部特性,其作用范围局限在所属窗体和报表内部,而生命周期则是伴随着窗体和报表的打开而开始,关闭而结束。,8.1.1 类模块,类模块(文件扩展名为.cls),8.1.1 类模块,例:form1,标准模块(文件扩展名为.bas)标准模块作用是合理组织程序或控制程序执行流程,纯代码,不与任何对象(窗体、报表、控件等)相关联,可放置在数据库中的任何位置,可以被工程内数据库对象调用。,8.1.2 标准模块,标准模块(文件扩展名为.bas)标准模块中的公共变量和公共过程具有局部特性,其作用范围在整个应用程序里,而生命周期则是伴随着应用程序的运行而开始,关闭而结束。,8.1.2 标准模块,标准模块(文件扩展名为.bas),8.1.2 标准模块,例:form1,Access宏实质上就是VBA程序,宏的操作都是由VBA代码实现的。宏的用法简单,上手容易,比较适合没有编程基础的用户开发普通应用程序。宏的不足是功能较弱、运行效率较差。Access模块中内嵌的VBA功能强大,具有较完 善的语法体系和强大的开发功能。它采用目前主流 的面向对象机制和可视化编程环境,适用于开发 高级Access数据库应用系统。,8.1.3 将宏转换为模块,每一个宏操作都有自己对应的VBA代码,根据需要我们可以把宏转换为模块。,8.1.3 将宏转换为模块,过程是模块的组成单元,由VBA代码编写而成。过程分两种类型:Sub子过程和Function函数过程。,8.2 创建模块,一 在模块中加入过程声明:声明(定义)变量过程(若干个):过程是模块的组成单元,分2种:子(Sub)过程 子过程没有返回值,它的定义格式如下:Sub过程名 程序代码End Sub 其中的程序代码表示要完成的一系列操作。调用子过程用Call 过程名。,8.2 创建模块,一 在模块中加入过程 函数(Function)函数过程又称为Function过程,函数过程有返回值,它的定义格式如下。Function 过程名 程序代码End Function 调用函数过程时,直接引用函数过程的名称。,8.2 创建模块,一 在模块中加入过程,8.2 创建模块,二 在模块中执行宏 在模块的过程定义中,使用Docmd对象的RunMacro方法,执行宏,其格式:Docmd.RunMacro MacroName,RepeatCount,RepeatExpressionMacroName:当前数据库中宏的名字;RepeatCount:可选项,计算宏运行次数的整数值;RepeatExpression:可选项,数值表达式,在每次运行宏时进行计算,结果为False,停止运行宏。,8.2 创建模块,8.3 VBA程序设计基础,VBA 是微软Office中的内置编程语言,其语法与VB的兼容,在Access程序设计中,当某些操作不能使用其他Access对象实现,或者实现较难时,就可利用VBA语言编写程序代码。,8.3.1 面向对象程序设计的基本概念,1.集合(类)和对象集合:含有相同属性的事物的总称成为集合,比如所有的学生就构成一个集合(类)。对象:集合中的某一个实体,例如学生集合中的某一个学生就是一个对象。在自然界中,一个对象就是一个实体,如一辆汽车就是一个对象。在面向对象的程序设计中,对象代表应用程序中的元素,如表、窗体、按钮等。Access有几十个对象,其中包括对象和对象集合。所有对象和对象集合按层次结构组织,处在最上层的是Application对象,即Access应用程序,其他对象或对象集合都处在它的下层或更下层。,8.3.1 面向对象程序设计的基本概念,2.属性和方法 属性是对象的特征。如汽车有颜色和型号属性,按钮有标题和名称属性。对象的类别不同,属性会有所不同。同类别对象的不同实例,属性也有差异。例如,同是命令按钮,名称属性不允许相同。描述对象的性质和行为,引用方式:对象.属性或者对象.行为DoCmd对象:通过调用包含在内部的方法来实现VBA编程中对Access的操作。具体调用格式:DoCmd.OpenReport“报表名”,视图,查询名称,条件 DoCmd.OpenReport“教师信息“,Docmd是Access的一个特殊对象,用来调用内置方法,在程序中实现对Access的操作,诸如打开窗口、关闭窗体、打开报表、关闭报表等。DoCmd 对象的大多数方法都有参数,有些参数是必需的,有些则是可选的。若省略可选参数,参数将采用默认值。,Docmd对象,(1)用DoCmd 对象打开窗体 格式:DoCmd.OpenForm 窗体名 功能:用默认形式打开指定窗体。例如:DoCmd.OpenForm 文本框练习,(2)用DoCmd 对象关闭窗体 格式1:DoCmd.Close acForm,窗体名 功能:关闭指定窗体。例如:DoCmd.Close acForm,文本框练习 格式2:DoCmd.Close 功能:关闭当前窗体。(3)用DoCmd 对象打开报表 格式:DoCmd.OpenReport 报表名,acViewPreview 功能:用预览形式打开指定报表。例如:DoCmd.OpenReport 工资报表,acViewPreview,Docmd对象,(4)用DoCmd 对象关闭报表 格式1:DoCmd.Close acReport,报表名 功能:关闭指定报表。例如:DoCmd.Close acReport,工资报表 格式2:DoCmd.Close 功能:关闭当前报表。,Docmd对象,(5)用DoCmd 对象运行宏 格式:DoCmd.RunMacro 宏名 功能:运行指定宏。例如:DoCmd.RunMacro 宏1(6)用DoCmd 对象退出Access。格式:DoCmd.Quit 功能:关闭所有Access对象和Access本身。,Docmd对象,(1)在窗体中建立5个按钮名称分别为c1、c2、c3、c4、c5标题分别为“打开窗体”、“关闭窗体”、“打开报表”、“关闭报表”、“退出Access”。,实例:使用DoCmd对象,(2)c1代码:DoCmd.OpenForm 教师基本情况“(3)c2代码:DoCmd.Close acForm,教师基本情况“(4)c3代码:DoCmd.OpenReport“按年龄段统计报表,acViewPreview(5)c4代码:DoCmd.Close acReport,按年龄段统计报表“(6)c5代码:DoCmd.Quit,例:使用DoCmd对象,8.3.1 面向对象程序设计的基本概念,3.事件和事件过程事件:Access窗体或者报表及其上控件等对象可以“辨识”的动作,如单击、双击、某一个按键等。事件过程:为某个事件编写VBA代码过程,来完成指定的动作。在类模块每一个过程的开始行,都显示对象名和事件名。如:Private Sub c1_Click()。,例:动态设置控件属性,(1)在窗体中建1个文本框名称为t1。(2)在窗体中建1个标签名称为b1标题为“欢迎你!”。(3)在窗体中建3个命令按钮名称分别为c1、c2、c3标题 分别为“红色”、“绿色”、“蓝色”。,8.3.1 面向对象程序设计的基本概念,3.事件和事件过程,(4)设置各按钮的前景色,在属性窗口可查看颜色值。,(5)c1的click事件代码:t1.BackColor=255 b1.ForeColor=255,(6)c2的click事件代码:t1.BackColor=33792 b1.ForeColor=33792(7)c3的click事件代码:t1.BackColor=16711680 b1.ForeColor=16711680,执行结果:,8.3.2 VBE编程环境,1.进入VBE编辑环境类模块:1)定位窗体或者报表,单击工具栏“代码”按钮;2)或者通过窗体、报表或者控件“属性”窗口中“事件”选项卡的“事件过程”项进入。标准模块:1)已有模块,在数据库窗体选择“模块”对象,双击要查看的模块;2)新建模块,在数据库窗体选择“模块”对象,单击“新建”按钮;3)在数据库对象窗体中,单击“工具”菜单“宏”“Visual basic 编辑器”。,工具栏,属性窗口,代码窗口,工程窗口,8.3.2 Visual Basic编程环境,(1)标准工具栏,(2)工程窗口工程资源管理器,显示应用程序的所有模块文件。3个按钮:查看代码 按钮可以打开相应的代码窗口。查看对象 按钮可以打开相应的对象窗口。切换文件夹 可以隐藏或显示对象的分类文件夹。(3)代码窗口 代码窗口主要是用来编写、显示以及编辑VBA代码,如下图所示。,8.3.2 Visual Basic编程环境,(3)代码窗口,对象浏览器快速访问子过程自动显示提示信息F1帮助,代码窗口,数据库引擎,(4)属性窗口 列出了所选对象的属性,由“对象”框和“属性”列表组成。对象框:用于列出当前所选的对象。属性列表:按字母或分类对对象属性进行排序。可以在属性窗口中直接用前面用到的方法设置 对象的属性(静态设置方法)。可以在代码窗口中用VBA代码编辑对象的属 性(动态设置方法)。(5)立即窗口用来进行快速的表达式计算、简单方法的操作寄进行程序测试的工作窗口。,8.3.2 Visual Basic编程环境,二、进入VBE编程环境,VBE将模块分成对象、标准和类模块。进入其编辑环境有多种方式:一、对象模块:可以直接定位到窗体或报表,然后单击视图下的“代码”按钮进入;或定位到窗体、报表和控件上通过指定对象事件处理过程进入。其方法有两种:(1)右键单击控件对象,单击快捷菜单上的“事件生成器命令”,打开“事件生成器”对话框,选择其中的“代码生成器”,单击“确定”按钮即可进入;(2)单击属性窗口的“事件”选项卡,选中某个事件直接单击属性右侧的“”按钮,打开“事件生成器”对话框,选择其中的“代码生成器”,单击“确定”按钮即可进入。,二、进入VBE编程环境,二、对于标准模块:有3种方法进入:(1)对于已存在的标准模块,只需从数据库窗体对象列表上选择“模块”,双击要查看的模块对象即可进入;(2)要创建新的标准模块,需要从数据库窗体对象列表上选择“模块”,单击工具栏上的“新建”按钮即可进入;(3)在数据库对象窗体中,选择“工具”菜单里“宏”子菜单的“VisualBasic编辑器”选项即可进入。使用Alt+F11组合键,可以方便的在数据库窗口和VBE之间进行切换。,三、VBE环境中编写VBA代码,VBA代码是由语句组成的,一条语句就是一行代码。例如intCount=3 将3赋值给变量intCountDebug.Print intCount 在立即窗口打印变量intCount的值3,三、VBE环境中编写VBA代码,Access的VBE编辑环境提供了完整的开发和调试工具。其中的代码窗口顶部包含两个组合框,左侧为对象列表,右侧为过程列表。操作时,从左侧组合框选定一个对象后,右侧过程组合框中会列出该对象的所有事件过程,再从该对象过程列表选项中选择某个事件名称,系统会自动生成相应的事件过程模块,用户添加代码即可。双击工程窗口中的任何类或对象都可以在代码窗口中打开相应代码进行编辑处理,四、程序语句书写原则,1 语句书写规定通常一个语句写在一行,若要分行用续行符”-”;”:“将一行中多条语句隔开;若语句中出现红色表示有错误。,四、程序语句书写原则,2 注释语句一个好的程序都要有注释语句。在VBA中使用下列格式:Rem 注释语句(单引号)注释语句 Rem 定义两个变量 Dim Str1,Str2 Str1=“beijing”Str2=“Shanghai”,四、程序语句书写原则,3 采用缩进格式书写程序 编辑缩进(或凸出)4 F1帮助信息,一、标准数据类型VBA提供了多种数据类型的支持,这样也是为了大家进行编程提供方便。各种数据类型所占的存储空间、所表示数据范围大小、以及所支持的数据运算不同。数据类型可以分为数值型、布尔型、日期型、字符型、对象型、变体型和用户自定义的数据类型。,8.3.3 数据类型和数据库对象,8.3.3 数据类型与数据库对象,数据类型转换函数,例:在立即窗口中计算函数值(1)在VBE界面“视图”菜单“立即窗口”,显示立即窗口。(2)输入表达式x=“true”回车输入表达式y=“false”回车输入表达式?x+y回车,显示结果为:truefalse。(3)输入表达式?cbool(x)+cbool(y)回车,显示结果为:-1。说明:每行写完后必须回车才能生效。问号与print语句相同,在立 即窗口显示计算结果。,数据类型-布尔型,布尔数据类型以16位数字形式存储。布尔数据类型只有True和False两个值。布尔数据支持逻辑与、或、非等运算。当其他的数值类型转化为布尔型时,0转化为False,其他转化为True。当布尔型转化为其他的数值类型时,False转化为 0,True转化为-1。,标识符:Boolean,数据类型-日期型,日期数据类型以64位浮点数值形式存储。日期数据类型前后必须用#封住如:#2012/4/1#日期变量根据计算机中的短日期格式显示,时间则根据计算机的时间格式显示。当其他数值类型转化为时间类型时,整数部分表示日期,小数部分表示时间,负数表示1899年12月31日以前的日期。,标识符:Date,数据类型-变体型,变体数据类型所代表的数据类型是不确定的,可以成为任何类型的变量。变体的数据类型的变量可以存储特殊值,如:Empty,Error,Nothing,Null等。变体数据类型中的数值类型可以代表任何的整型和实型数。可以用VarType和TypeName函数检查变体中的数据,标识符:Variant,数据类型-字符型,每个字符以一个字节(8位)进行表示,对应的数值的范围是0255。字符中的前128个字符对应于ASCII字符集中的定义,字符集后128个字符代表特定的字符。字符数据类型两种:变长字符和定长字符。变长字符可以包括的字符数量为0到约20亿个定长字符可以包括的字符数量为1到约64K个字符。,标识符:String,数据类型-数值型,VBA中数值型包括整型、长整型、单精度、双精度和货币等。数据的存储从8位到64位不等。数据支持加、减、乘、除等运算。货币类型的数据保持小数点左边15位数字,右边4位数字,以满足精度的需要。,标识符,二 用户定义的数据类型,前面所介绍的数据类型都是原子型的数据类型,即不可以再分割的数据类型,使用Type语句可以定义任何结构型数据类型,如:定义格式:Type 数据类型名 域名1 as 数据类型 域名2 as 数据类型 End Type,二 用户定义的数据类型,例如:Type newstudent txtno As String*7 txtname As String txtsex As string*1 txtage As Integer End Type 这样就定义了“newstudent”这种数据类型,它包括“编号“、“姓名”、“性别”、“年龄”四个数据域。,二 用户定义的数据类型,用户定义数据类型变量的取值可指明变量名及分量名,两者用句号分开,如:Dim NewStu as NewStudent NewStu.txtSno=“980306”NewStu.txtName=“冯伟”NewStu.txtSex=“女”NewStu.txtAge=20,二 用户定义的数据类型,也可以使用With简化程序的重复部分,将上面的变量赋值:With NewStu.txtSno=“980306”.txtName=“冯伟”.txtSex=“女”.txtAge=20 End With,三 数据库对象,如数据库、表、查询、窗体、报表等也有对应的VBA对象数据类型,这些数据类型由引用的对象库所定义,对应关系见:P208 表8.3,8.3.4 常量和变量,一、变量在VBA中变量的概念是怎么样呢?变量是程序运行时值会发生变化的数据。变量的命名规则与字段命名一样,不能使用VBA的关键字。在VBA中不必先声明变量再使用变量,但是先声明再使用是良好编程的习惯。变量的数据类型可以是前面所介绍的数据类型中的任何一种,也可以是用户自定义的数据类型。,变量-变量名命名原则,变量的命名原则有以下几点:第一个字母必须是英文字母。不能在变量名中使用空格、句点等符号。变量名的长度不能超过255个字符。变量名不区分大小写。不能在某一范围内的相同层次中使用重复的变量名。变量不能与函数名、过程名相同。,以下是合法的变量名:a,x,x3,BOOK_1,sum5以下是非法的变量名:3s s*T-3x bowy-1 if,一 变量的声明,1、显式声明 VBA中定义变量的格式为:Dim 变量名 AS 类型 格式中Dim是一个VBA命令,此处用于定义变量;As是关键字,此处用于指定变量的数据类型。例如:Dim x as Integer x为整型变量 Dim x%,y!x是整型,y为单精度,一 变量的声明,2、隐含声明 VBA允许用户在编写应用程序时,不声明变量而直接使用,这就是隐式声明。所有隐式声明的变量都是Variant数据类型。例如:Dim m,n,NewVar=258m,n为变体Variant变量,NewVar为Variant类型变量,其值为258。,二 强制声明,在默认情况下,VBA允许在代码中使用未声明的变量,如果在模块设计窗口的顶部“通用声明”区域中,加入语句:Option Explicit 说明:强制要求所有变量必须定义才能使用。这种方法只能为当前模块设置了自动变量声明功能,如果想为所有模块都启用此功能,可以单击菜单命令“工具”下“选项”对话框中,选中“要求变量声明”选项即可。,三 变量的作用域,1、局部范围(Local)变量定义在模块的过程内部,过程代码执行时才可见。在子过程或函数过程中定义的或直接使用的变量作用范围都是局部的。在子过程或函数内部使用Dim、StaticAs关键字说明的变量就是局部范围的。2、模块范围(Module)变量定义在模块的所有过程之外的起始位置,运行时在模块所包含的所有子过程或函数过程中可见。在模块的通用说明区,用Dim、Static、PrivateAs关键字定义的变量作用域都是模块范围。,三 变量的作用域,3、全局范围(Public)变量定义在标准模块的所有过程之外的起始位置,运行时在类模块和标准模块的所有子过程或函数过程中都可见。在标准模块的变量定义区域,用PublicAs 或 GlobalAs说明的变量就属于全局的范围。变量的持续时间(生命周期)是从变量定义语句所在的过程第一次运行,到程序代码执行完毕并将控制权交回调用它的过程为止的时间。,四数据库对象变量,Access建立的数据库对象及其属性,均可被看成是VBA程序代码中的变量及其指定的值来加以引用。例如,Access中窗体和报表对象的引用格式为:Forms!窗体名称!控件名称.属性名称或 Reports!报表名称!控件名称.属性名称关键字Forms或Reports分别表示窗体或报表对象集合。感叹号“!”分隔开对象名称和控件名称。“属性名称”部分缺省,则为控件基本属性。如果对象名称中含有空格或标点符号,就要用方括号把名称括起来。,四数据库对象变量,如:Forms!学生管理!编号=”980306“Forms!学生管理!编 号=”980306“对象名称含空格如果要多次引用对象可以用Set关键字来建立控件对象的变量。如:Dim txtname As Control Set txtname=Forms!学生管理!姓名 txtname=”冯伟“返,一个特殊的模块变量 本地窗口打开时,自动生成一个名为“Me”的特殊模块变量。对于类模块,定义为Me。Me是对象的引用,引用当前模块中当前类的实例。Me变量不需要专门定义,直接使用即可。例如,用代码定义“学生信息”窗体中“Lab”标签的标题属性,以下两种方法效果是一样的:标准方法:Forms!学生信息!Lab.Caption=学生信息浏览常用方法:Me!Lab.Caption=学生信息浏览,例:用static、dim和public定义变量,(1)在窗体中建立2个文本框分别命名为t1和t2附加标签的标题分别为“静态变量”和“局部变量”。(2)在窗体中建立命令按钮名称为c1标题为“计算”。,(3)c1的click代码:Static a As Integer Dim b As Integer a=a+1:b=b+1:c=c+1 T1=a:T2=b:T3=c 新建一个模块,添加代码:Public c As Integer,(4)执行时不断单击命令按钮,观察值的变化。然后关闭窗体,再次打开,再观察值的变化,五 数组,数组是在有规则的结构中包含一种数据类型的一组数据,也称作数组元素变量。数组变量由变量名和数组下标构成,使用数组必须先定义数组。通常用Dim语句来定义数组,定义格式为:Dim 数组名(to)As 缺省情况下,下标下限为0,数组元素从“数组名(0)”至“数组名(下标上限)”;如果使用to选项,则可以安排非0下限。,五 数组,例如,dim score(10)as Integer 定义了11个整形数构成的数组,数组元素为score(0)至score(10)再如,dim score(1 to 10)as Integer定义了10个元素的整型数组,数组元素为score(1)至 score(10)注:(1)所有数组元素在内存连续存放(2)根据下标区分数组元素,五 数组,关于数组的定义,还有下面的几点说明:(1)定义数组时数组名的命名规则与变量名的命名规则相同。(2)一般在定义数组时应给出数组的上界和下界。但也可以省略下界,缺省 为0。例如,Dim a(10)As Single默认情况下,数组a由11个元素组成。若希望下标从1开始,可在模块的通用声明段使用Option Base语句声明。其使用格式为Option Base 0|1 后面的参数只能取 0 或 1,五 数组,(3)和不能使用变量,必须是常量,常量可以是字面常量或符号常量,一般是整型常量。(4)如果省略As子句,则数组的类型为Varient变体类型。二维数组的定义:格式为:Dim 数组名(to,to)As 例如,Dim c(1 To 3,1 To 4)As Single,五 数组,VBA还支持动态数组,定义和使用方法是:先用Dim显式定义数组但不指明数组元素数目,然后用ReDim关键字决定数组包含的元素数,以建立动态数组。创建方法:Dim NewArray()As LongReDim NewArray(9,9,9)如果想释放数组占用的空间可将ReDim设置0个元素。,六 变量标识命名法则,在编写VBA程序代码时,会用到大量的变量名称和不同的数据类型。对于控件对象,可以用VBA的Set关键字将每个命名的控件对象指定为一个变量名称。目前,VB和VBA均推荐使用Hungarian符号法作为命名法则。该方法也被广泛用在C和C+等一些程序中。Hungarian符号法使用一组代表数据类型的码。用小写字母作为变量名的前缀。见P212 表8.4 如,七 符号常量,如果程序中多处用到某个常量,将其定义成符号常量可增加代码的可读性,也便于维护。符号常量用关键字Const来定义,格式如下:Const 符号常量名称=常量值 例如:Const PI as single=3.1415926定义了一个符号常量PI,其值为3.1415926若是在模块的声明区中定义符号常量,则建立一个所有模块都可以用的全局符号常量。一般是Const前加Global或Public关键字。,七 符号常量,说明:符号常量名一般用大写字母,以便与变量名区分。如果符号常量定义在模块声明区,所有模块的过程都能使用该变量,通常在前面加上Global或Public。如:Public Const PI=3.14如果符号常量定义在事件的过程中,该符号常量只在本过程中可用。符号常量定义时不用指明数据类型。,八 系统常量(内部常量/固有常量),这是一类特殊的符号常量,Access系统内部包含若干个启动时就建立的系统常量,有True、False、Yes、No、On、Off和Null等。在编码时可以直接使用。例如:VBA类库中,vbRed代表红色,vbBlue代表蓝色。这里开始的两个字母表示所在的类库Access类库的常量以ac开始,如acForm等。ADO类库的常量以ad开始,如adOpenKeyset。,例:使用符号常量和数组,(1)在窗体建文本框名称为t1。(2)在窗体建命令按钮名称为c1标题为“确定”。(3)c1的代码:,const AA=“欢迎你!”定义符号常量 dim b(1)As String 定义数组 b(0)=AA b(1)=t1 MsgBox b(0)&Chr(13)&Chr(13)&b(1),vbInformation,消息框说明:Chr(13)生成一个回车,用单引号开始的字符串为注释语句。,(4)转到窗体视图在文本框中输入“张三”单击“确定”按钮。,函数实际上是系统事先定义好的内部程序,用来完成特定的功能。VBA提供了大量的内部函数,供用户在编程时使用。函数的调用形式为:函数名(参数表)其中,参数可以是常量、变量或表达式,可以有一个或多个。每个函数被调用时,都会有一个返回值。根据函数的不同,参数与返回值都有特定的数据类型与之对应。内置函数按其功能可分为数学函数、转换函数、字符串函数、日期函数和格式输出函数。,8.3.5 常用标准函数,8.3.5 常用标准函数,常用标准函数数学函数:abs()、int()、fix()、sin()、cos()字符串函数:instr()、left()、right()、mid()日期/时间函数:date()、time()、now()、year()month()、day()、weekday()类型转换函数:asc()、chr()、str()、val(),1算术函数(1)abs(x),返回x的绝对值。(2)int(x),返回x的整数部分,x0,每次产生不同随机数;若x=0,产生最近生成的随机数;若x0时可直接写rnd,省略括号和参数。,8.3.5 常用标准函数,例如:int(100*rnd),产生099之间的随机整数。int(101*rnd),产生0100之间的随机整数。int(100*rnd+1),产生1100之间的随机整数。int(100*rnd+100),产生100199之间的随机整数。int(101*rnd+100),产生100200之间的随机整数。(5)round(x,n),n是小数位数,对x的小数做四舍五入,返回有n位小数的x值。例如:round(12.735,2),返回12.74。,8.3.5 常用标准函数,2字符串函数(1)len(x),返回x的长度,即字符个数。要求x为字符串类型。(2)space(n),返回由n个空格组成的字符串,n为数字。(3)ucase(x),将x中的小写字母转大写。lcase(x),将x中的大写字母转小写。(4)trim(x),去掉x的首部和尾部空格。ltrim(x),去掉x的首部空格。rtrim(x),去掉x的尾部空格。(5)instr(起始位置,字串s1,字串s2,比较方式);返回字串s2在字串s1中最早出现的位置,返回值是一个整数。(6)字符串截取函数Left(,),从字符串左边起截取N个字符Right(,),从字符串右边起截取N个字符Mid(,,),从左边第N1个字符起截取N2个字符,8.3.5 常用标准函数,3日期时间函数(1)获取系统日期和时间函数Date(),Time(),Now()(2)截取日期分量函数Year(x),month(x),day(x)weekday(x,n),返回17的整数,表示星期几。说明:n为可选项,默认值1。当n取值为1时,星期天返回1,星期一返回2,依次类推。若n取值为2,则星期一返回1,星期二返回2,星期天返回7。(3)截取时间分量函数hour(x),minute(x),second(x),8.3.5 常用标准函数,(4)时间间隔函数DateAdd(,),对表达式表示的日期按照间隔类型加上或减去指定的时间间隔值。(5)计算两个日期的间隔值函数DateDiff(,W1,W2),返回日期1和日期2之间按照间隔类型所指定的时间间隔数目。(6)返回日期指定时间部分函数DatePart(,W1,W2)(7)返回包含指定年月日的日期函数DateSerial(表达式1,表达式2,表达式3),返回由表达式1值为年、表达式2值为月、表达式3值为日组成的日期值,8.3.5 常用标准函数,4类型转换函数,8.3.5 常用标准函数,表8.8“C-”开头的类型转换函数,4类型转换函数(1)asc(x),返回首字符的ASCII码,其中,x是字符串或字符串变量名。说明:ASCII码是美国标准信息转换码,共128个字符,对应十进制数0127。(2)chr(n),将数字n转换成相应字符,n的取值范围0127。(3)str(n),将数字转换为字符串,n是数字或数字表达式。说明:当数字转换为字符串时,总会在前头留一个符号位,如果是正数,符号位显示空格。(4)val(x),将数字型字符串转换为数字,x是数字型字符串。说明:转换时自动将空格、制表符、换行符去掉,当遇到第一个不能识别为数字的字符时即停止读入。比较:csng()cdbl()cint()clng()ccur()cbool()cdate(),8.3.5 常用标准函数,(5)字符串转日期函数 datevalue(x)如:datevalue(“february 29,2004”)(6)处理空值的函数 Nz Nz函数可以将Null值转换为数字0、空字串或自定义的返回值。格式:Nz(变量/表达式/字段属性名,指定值)说明:指定值是可选项。若给出指定值,Nz函数返回指定值。若省略指定值,当类型为数值型且值为Null,Nz函数返回数字0。当类型为字符型且值为Null,Nz函数返回空字串。,例:如果文本框为空,显示提示信息。,(1)在窗体建文本框名称为t1附加标签标题为“输入数值”。(2)在窗体建标签名称为b1标题为“空”;建标签名称为label2标题为“输入的内容为:”(3)在窗体建命令按钮标题为“验证”名称为c1。,(4)c1的click事件代码:Dim aa As String aa=Nz(t1.Value,文本框不能为空!)MsgBox aa b1.Caption=Nz(t1.Value)(5)转到窗体视图,文本框为空时单击命令按钮,显示消息。,(6)在文本框中输入字串“abc123”,单击命令按钮,显示结果,补充:,1输出函数MsgBox 格式:msgbox(显示信息,按钮数目+图标类型,标题栏字符串)功能:在对话框中显示消息,等待用户单击按钮,返回一个整数,该值代表用户单击了哪个按钮。,2输入函数inputbox格式:inputbox(提示信息,标题栏字符串,默认值)功能:提示用户输入一个字符串或数值。说明:(1)“提示信息”是必选项,是一个字符串,显示在输入框中。(2)“标题栏字符串”是可选项,省略此项,标题栏将显示应用程序名。(3)默认值是可选项,是字串或数字,省略此项,系统会自动匹配数据类型。(4)函数返回值是在输入框中输入的数字或字符串。,3验证函数,VBA的常用验证函数,补充 计算外部数据源数据的函数,2Davg函数格式:Davg(字段名,表名,条件表达式)功能:对指定字段求平均值。说明:若省略条件表达式,对全体字段求平均值。例如:davg(年龄,学生,性别=男)3Dsum函数格式:Dsum(字段名,表名,条件表达式)功能:对指定字段求和。说明:若省略条件表达式,对全体字段求和。例如:dsum(年龄,学生,性别=男),除了之前介绍过的函数,还有以下函数:1.dlookup函数 格式:dlookup(“字段名”,“表名”,“条件表达式”)功能:获取特定字段的值。例如:?dlookup(姓名,教师,性别=男),4Dcount函数格式:Dcount(字段名,表名,条件表达式)功能:对指定字段统计个数。说明:若省略条件表达式,对全体字段统计个数。例如:Dcount(编号,教师,性别=女)5.dmax函数 6.dmin函数,例:统计外部表数据,外部数据:,(1)在窗体建5个文本框名称为t1、t2、t3、t4、t5附加标签的标题分别为“考试科目数”、“考试总分”、“平均学分”、“最高分”,“最高分科目”。(2)在窗体建立标签名称为b1。,(3)代码如下:Option Compare DatabasePublic xm As StringPrivate Sub Form_Load()xm=InputBox(请输入要统计的姓名:)b1.Caption=xm+的成绩统计 t1=DCount(课程名称,学生个人成绩,姓名=xm)t2=DSum(成绩,学生个人成绩,姓名=xm)t3=DAvg(学分,学生个人成绩,姓名=xm)t4=DMax(成绩,学生个人成绩,姓名=xm)t5=DLookup(课程名称,学生个人成绩,姓名=xm and 成绩=t4)End Sub,一、运算符算术运算符:+、-、*、/、Mod关系运算符:=、=、逻辑运算符:AND、OR、NOT连接运算符:&、+,8.3.6 运算符和表达式,8.3.6 运算符与表达式 1.运算符VBA中的运算符可分为4种类型:算术运算符、字符串运算符、关系运算符和逻辑运算符。(1)算术运算符 算术运算符是常用的运算符,用来执行简单的算术运算,VBA提供了7个算术运算符。乘幂()、乘法(*)、除法(/)、整数除法()、求模(mod)、加法(+)、减法(-)。,运算符算术运算符,将两个操作数进行大小比较,结果为逻辑值,即真(True)或假(False)。相等=、不相等、大于、大于等于=、小于、小于等于=。注意:?字符串比较,则按字符从左到右一一比较,直到出现不同的字符为止。默认不区分大小写。,(2)关系运算符,(2)关系运算符,将操作数进行逻辑运算,结果是逻辑值 与and、或or、非not。对两个逻辑值进行比较,结果仍然是逻辑值。,(3)逻辑运算符,(3)逻辑运算符,(4)字符串连接运算符 字符串连接运算就是将两个字符串连接起来生成一个新的字符串。字符串运算符包括:+运算符&运算符,+运算符:用来连接两个字符串表达式,形成一个新的字符串。注意:“+”运算符要求两边的操作数都是字符串。【例】“+”运算符应