数据库管理系统应用第6章程序设计基础2019年12月19日教师:周浪部门:信息工程学院6.1VBA概述6.2VBA语言基础6.3VBA模块的创建6.4VBA程序设计基础6.5过程调用与参数传递6.6VBA程序错误处理目录学习要点VBA及模块的基本概念创建模块VBA程序设计基础VBA流程控制语句过程调用和参数传递VBA程序运行错误处理与调试6.1VBA概述VBA:VisualBasicforApplication。VisualBasic(VB)是微软公司开发的一种面向对象的可视化编程语言,而VBA就是这种语言在Office软件编程中的应用。6.1.1VB编程环境:VBEVBE(VisualBasicEditor)是编辑VBA代码时使用的界面。AddYourTexthere工程窗口标准工具条属性窗口监视窗口本地窗口代码窗口立即窗口VBE窗口P170立即窗口?变量名或表达式在立即窗口中,可以输入或粘贴一行代码并执行该代码。在立即窗口中显示变量或表达式的值的命令:立即窗口中的代码是不被保存的。通过Alt+F11组合键,可以在数据库窗口和VBE窗口之间进行切换。进入VBE编程环境(1)第七章中介绍,略对于类模块:进入VBE编程环境(2)对于标准模块:(1)创建新的标准模块时自动进入VBE。(2)修改已存在的标准模块时自动进入VBE。(3)单击“数据库工具”选项卡的“宏”组中的“VisualBasic”按钮即可进入VBE。1.注释语句该语句常用在对整个的注释。注释语句是为了增加程序的可读性,默认以绿色文本显示。(1)序言式注释(2)语句注释格式:Rem注释语句该语句可直接位于其他语句之后。格式:'注释语句6.1.2VBA程序书写原则6.1.2VBA程序书写原则当输入一行语句并按Enter键后,如果该代码以红色文本显示,则表明该行语句存在错误。通常将一个语句写在一行;语句较长时,在适当位置可用续行符“_”将语句连写在下一行;(续行符前应有一个空格)可以用冒号“:”将几个较短的语句写在同一行中。2.语句书写规定6.2.1数据类型Access数据表中的字段所使用的数据类型(OLE对象、备注、附件和计算型数据类型除外)在VBA中都有对应的数据类型。与前基本一致,不再赘述,重点掌握各种类型的常量表示。VBA基本数据类型见P174表6-2所示。6.2VBA语言基础6.2.2常量、变量与数组常量是指在程序的运行过程中,其值不能被改变的量。变量是指程序运行时其值会发生变化的数据。每个变量都有变量名,使用变量前可以指定其数据类型(显式声明),也可以不指定其数据类型(隐式声明)。数组是由一组具有相同数据类型的变量(即数组元素)构成的集合。1.常量在Access中,常量的类型有以下3种:Const语句创建符号常量True、False等系统常量预定义的内部常量内部常量(1)符号常量若在代码中要反复使用某个相同的值,或代表一些具有特定意义的数字或字符串,可以使用符号常量。定义格式:Const符号常量名[As数据类型]=表达式ConstPI=3.14ConstMYBIRTHDAY=#2003-4-1#【例】P175(2)内部常量VBA提供了一些预定义的内部符号常量,它们主要作为DoCmd命令语句中的参数。内部常量以两个前缀字母指明了定义该常量的对象库,如:acForm、acCmdFont、VbKeyDelete等。通过对象浏览器可以查看所有可用对象库中的内部常量。(3)系统常量P265系统定义的常量有七个:True、False、Null、Yes、No、On、Off系统常量可以在所有应用程序中直接使用。2.内存变量1)变量的命名规则:P175变量名只能由字母、数字、汉字和下划线组成,不能含有空格和除下划线之外的其它字符,长度不能超过255个字符。变量名必须以字母或汉字开头,且不区分字母的大小写。变量名不能使用VBA的关键字。2)变量的创建方法(1)自动创建变量(隐式声明)自动创建变量,也称隐式声明变量。即在使用变量前没有声明其数据类型,借助将一个值赋予变量名的方式来建立变量。因为在变量名称后没有附加类型说明,所以数据类型默认为变体数据类型(Variant)。【例】aa=Hellobb=207仅在当前过程有效。不提倡!(2)显式声明创建变量Dim变量名[As数据类型]Dim变量名1[As数据类型],变量名2[As数据类型],…,变量名n[As数据类型]如果不使用As选项来定义变量的数据类型,系统默认该变量为Variant数据类型。2)变量的创建方法先定义,再使用变量。提倡!举例(1)DimVar1AsInteger将Var1变量定义为整型(2)DimVar2AsDouble将Var2变量定义为双精度型(3)DimVar3AsSingle,Var4AsString将Var3定义为单精度型、Var4定义为字符串类型(5)Dimaa,bb,ccAsCurrency将cc变量定义为货币型,aa、bb变量定义为变体类型(4)Dimabc定义abc变量,为变体数据类型补充:类型说明符使用类型说明符定义变量的数据类型时,必须将其放在变量名的最后。举例:Var1%=1234Var2#=123.45Var3$=abc’类型为:Integer’类型为:Double’类型为:String强制声明为了避免使用隐式声明变量,可以在程序开始处使用OptionExplicit语句来强制使用显式声明变量。3)变量的使用范围(作用域)过程变量(局部变量)局部变量只能在定义它的过程内使用,在其它的过程中无法存取局部变量。私有模块变量只能在定义它的模块(包括模块的子过程)内使用模块变量。在模块的声明区域用Private声明。公共模块变量(全局变量)在任何模块和过程中都可以访问全局变量。全局变量需要在模块的声明区域用Public声明。全局/模块变量声明方式Public变量名[As数据类型]P266全局变量声明方式:Private变量名[As数据类型]模块变量(私有变量)声明方式:全局变量和模块变量必须在模块/窗体的声明区域中声明。变量的使用规则与作用域P176作用范围局部变量模块变量全局变量声明方式声明位置能否被本模块的其他过程存取能否被其他模块的过程存取Dim、StaticDim、PrivatePublic在子过程中在窗体/模块的声明区域在标准模块的声明区域不能不能不能能能能(1)全局变量与私有变量的比较全局变量与私有变量的比较(2)私有变量与局部变量的比较私有变量与局部变量的比较(3)静态变量与非静态变量静态变量与非静态变量第一次执行CC1第二次执行CC13.数组数组是一种特殊的变量,由数组名和数组下标组成。VBA中不允许隐式说明数组,数组在使用前必须用Dim命令声明,说明数组的大小、数据类型及作用范围。数组的类型静态数组中的元素个数在声明时被指定,在程序运行时不能改变数组元素的个数。数组有两种类型:____________和___________。静态数组动态数组(1)声明静态数组3.数组(1)声明静态数组Dim数组名([下标下界to]下标上界)[As数据类型]语法格式:一维数组二维或多维数组Dim数组名([下标下界to]下标上界[,…])[As数据类型](1)声明静态数组说明As选项缺省时,数组中各元素为变体数据类型。下标下界的默认值为0,如果设置下标下界为非0值,既可以使用to选项,也可以在模块的通用声明部分用OptionBase来更改数组的默认下标下界。OptionBase1设置数组的下标下界为1OptionBase0设置数组的下标下界为默认值OptionBase格式:【例】Dimaa(5)AsSingleDimbb(1to6,2to7)AsStringDimcc(2to5,3to8,10)AsBooleanDimdd(3,1to4)2)数组的使用语法格式:数组名(下标值)下标值是指定范围内(上下界之间)的一个整数,其值不能超出这个范围。如果是多维数组,则下标各整数间用逗号隔开。【例】A1(0,0)=ABCB1(3)=True3)声明动态数组动态数组中的元素个数在声明时不指定,在程序运行时可以改变数组元素中的个数。建立动态数组的步骤DimArray()(1)用Dim声明空的动态数组,但不指定数组元素的个数。如:ReDimArray(5,10)(2)然后用ReDim语句配置数组个数。说明:ReDim语句只能出现在过程中,可以改变数组的大小和上下界,但不能改变数组的维数。说明(1)使用ReDim重新声明数组后,原有数组元素中的值将全部清除并取其默认值。数据类型默认值数值型包括:整型、长整型、单精度型、双精度型和货币型。数值型字符型布尔型日期型变体类型数据库对象0空字符串False00:00:00EmptyNothing说明(2)若要保留数组中元素原有的值,则需在ReDim后加Preserve选项。ReDim[Preserve]Array(5,10)Preserve可以改变数组中最后一维的上界,但不能改变这一维的下界,改变下界将导致错误。若改变后的数组比原来小,则多余数据将丢失。举例(1)举例(2)6.2.3标准函数函数的标准形式:函数名不可缺省。函数名(参数列表)函数的参数可以是常量、变量或表达式,且置于函数名后的圆括号中,多个参数间用逗号隔开。函数无参数时,其后的圆括号可以省略。函数被调用时,都会返回一个特定类型的值。注意事项对每一个函数需掌握:(1)函数名(2)参数(个数、顺序、类型、含义)(3)函数功能(4)返回值及其类型1.数学函数(1)绝对值函数功能:返回参数的绝对值Abs(数值表达式)【例】Abs(-25)25Abs(12\5+(-2)^3)6返回值数据类型:数值型1.数学函数(2)向下取整函数返回值数据类型:数值型Int(数值表达式)【例】Int(3.56)3Int(-3.56)-4参数为负值时返回小于等于参数值的最大负数。功能:返回参数的向下取整的值1.数学函数(3)取整函数(靠0取整)返回值数据类型:数值型Fix(数值表达式)【例】Fix(3.56)3Fix(-3.56)-3参数为负值时返回大于等于参数值的最小负数。功能:返回参数的整数部分1.数学函数(4)求算术平方根函数返回值数据类型:双精度型Sqr(数值表达式)【例】Sqr(9)3Sqr(Sqr(16))2功能:计算参数的算术平方根1.数学函数(5)三角函数返回值数据类型:双精度型Sin(数值表达式)功能:计算参数的正弦、余弦和正切值Cos(数值表达式)Tan(数值表达式)参数是以弧度为单位的角度值。1.数学函数【例】Pi=3.1415927Sin(90*Pi/180)1Cos(60*Pi/180)0.50000Tan(45*Pi/180)1.000001.数学函数(6)随机函数返回值数据类型:单精度型Rnd(数值表达式)【例】Int(100*Rnd)产生1个[0,99]的随机整数Int(100*Rnd)+1产生1个[1,100]的随机整数功能:产生一个大于等于0且小于1的随机数1.数学函数(7)四舍五入函数返回值数据类型:双精度型Round(数值表达式1[,数值表达式2])功能:对数值表达式1的值按数值表达式2指定小数位数进行四舍五入【例】Round(123.456,1)123.5Round(123.456,2)123.46Round函数Round(123.456,0)123Round(123.456)1232.字符串函数(1)字符串检索函数功能:返回String2在String1中最早出现的位置InStr([Start,]String1,String2[,Compare])返回值数据类型:长整型InStr函数Compare指定字符串比较的方法,其值可以是:0做二进制比较1不区分大小写的文本比较(默认)2基于数据库中