NCRE第7章VBA编程基础2第7章VBA编程基础7.1VBA的编程环境7.2VBA模块简介7.3VBA程序设计基础7.4VBA流程控制语句7.5面向对象程序设计的基本概念7.6过程调用和参数传递7.7VBA的常用操作7.8用户定义类模块创建和引用7.9VBA程序运行错误处理37.1VBA的编程环境直接进入:单击“数据库工具”选项卡,在“宏”组中单击“VisualBasic”通过创建模块进入:单击“创建”选项卡,然后在“宏与代码”组中单击“VisualBasic”通过窗体和报表等对象的设计进入“VBA”:通过控件的事件响应,选择“代码生成器”进入代码编辑。进入VBA环境的3中方式47.2VBA模块简介7.2.1标准模块Sub子过程Function函数过程7.2.2类模块系统对象模块窗体对象模块和报表对象模块等用户定义类模块过程是模块的主要组成单元57.3VBA程序设计基础数据类型数据类型类型标识符号字段类型取值范围整数Integer%字节/整数/是/否-32768~32767长整数Long&长整数/自动编号-2147483648~2147483647单精度数Single!单精度数负数-3.402823E38~-1.401298E-45正数1.401298E-45~3.402823E38双精度数Double#双精度数负数-1.79769313486232E308~-4.94065645841247E-324正数4.94065645841247E-324~1.79769313486232E308货币Currency@货币-922337203685477.5808~922337203685477.5807字符串String$文本0字符~65500字符布尔型Boolean逻辑值True或False日期型Date日期/时间100年1月1日~9999年12月31日变体类型Variant无任何January1/10000(日期)数字和双精度同,文本和字符串同67.3VBA程序设计基础变量与常量变量是指程序运行时值会发生变化的数据。变量名的命名,同字段命名一样,变量命名不能包含有空格或除了下划线字符(_)外的任何其它的标点符号,其长度不得超过255个字符。常量是在程序中可以直接引用的实际值,其值在程序运行中不变。不同的数据类型,常量的表现形式也不同,在VBA中有3种常量:直接常量、符号常量和系统常量。77.3VBA程序设计基础变量的声明Dim……[AsVarType]例如:DimNewVar_1AsInteger’NewVa_1为整型变量DimNewVar_2%,sum!’NewVar_2为整型变量,sum为单精度型变量DimNewVar_2%,sum!相当于DimNewVar_2AsInteger,sumAsSingle。87.3VBA程序设计基础强制声明在默认情况下,VBA允许在代码中使用未声明的变量,如果在模块设计窗口的顶部“通用-声明”区域中,加入语句:OptionExplicit97.3VBA程序设计基础变量的作用域1.局部范围在子过程或函数过程中定义Dim、Ststic、Private…As2.模块范围在模块通用区定义Dim、Ststic、Private…As3.全局范围Public…As107.3VBA程序设计基础数据库对象变量Access建立的数据库对象及其属性,均可被看成是VBA程序代码中的变量及其指定的值来加以引用。例如,Access中窗体与报表对象的引用格式为:Forms!窗体名称!控件名称[.属性名称]或Reports!报表名称!控件名称[.属性名称]117.3VBA程序设计基础数组数组是在有规则的结构中包含一种数据类型的一组数据,也称作数组元素变量。数组变量由变量名和数组下标构成,通常用Dim语句来定义数组,定义格式为:Dim数组名([下标下限to]下标上限)例如:DimNewArray(10)AsInteger’定义了11个整型数构成的数组,数组元素为NewArray(0)至NewArray(10)DimNewArray(1To10)AsInteger’定义了10个整型数构成的数组,数组元素为NewArray(1)至NewArray(10)127.3VBA程序设计基础7.3.4常用标准函数标准函数一般用于表达式中,有的能和语句一样使用。其使用形式如下:函数名(参数1,参数2[,参数3][,参数4][,参数5]…)其中,函数名必不可少,函数的参数放在函数名后的圆括号中,参数可以是常量、变量或表达式,可以有一个或多个,少数函数为无参函数。每个函数被调用时,都会返回一个返回值。1.算术函数2.字符串函数3.日期/时间函数4.类型函数137.3VBA程序设计基础7.3.5运算符和表达式运算符1.算术运算符用于算术运算,主要有乘幂(^)、乘法(*)、除法(/)、整数除法(\)、求模运算(Mod)、加法(+)及减法(–)等7个运算符。DimMyValue’变量定义MyValue=10Mod4’返回2MyValue=10\3’返回3147.3VBA程序设计基础2.关系运算符用来表示两个或多个值或表达式之间的大小关系,有相等(=)、不等()、小于()、大于()、小于相等(=)和大于相等(=)等6个运算符。MyValue=(104)’返回TrueMyValue=(1=2)’返回FalseMyValue=(”周””刘”)’返回FalseMyValue=(#2013/12/25#=#2014/2/28#)’返回True157.3VBA程序设计基础3.逻辑运算符用于逻辑运算,包括:与(And)、或(Or)和非(Not)3个运算符。MyValue=(104AND1=2)’返回FalseMyValue=(104OR1=2)’返回True167.3VBA程序设计基础优先级高低高低算数运算符连接运算符比较运算符逻辑运算符指数运算(^)字符串连接(&)字符串连接(+)相等(=)不等()小于()大于()小于相等(=)大于相等(=)Not负数(–)And乘法和除法(*、/)Or整数除法(\)求模运算(Mod)加法和减法(+、–)运算符的优先级177.4VBA流程控制语句VBA程序语句按照其功能不同分为两大类型:一是声明语句,用于给变量、常量或过程定义命名;二是执行语句,用于执行赋值操作、调用过程、实现各种流程控制。执行语句可分为3种结构:1.顺序结构:按照语句顺序顺次执行。如赋值语句、过程调用语句等。2.分支结构:又称选择结构,根据条件选择执行路径。3.循环结构:重复执行某一段程序语句。187.4VBA流程控制语句7.4.1赋值语句赋值语句是为变量指定一个值或表达式。通常以等号(=)连接。在前面我们已多次用到,其使用格式为:[Let]变量名=值或表达式这里,Let为可选项。注意:“=”是赋值号,不是等号197.4VBA流程控制语句7.4.2条件语句1.If—Then语句(单分支结构)语句结构为:If条件表达式1Then条件表达式1为真时要执行的语句或If条件表达式1Then条件表达式1为真时要执行的语句序列EndIfTFFT条件表达式语句块图8.8单分支结构流程图图8.9双分支结构流程图条件表达式语句块1语句块2207.4VBA流程控制语句2.If…Then…Else语句(双分支结构)语句结构为:If条件表达式1Then条件表达式1为真时要执行的语句Else条件表达式1为假时要执行的语句或If条件表达式1Then条件表达式1为真时要执行的语句序列Else条件表达式1为假时要执行的语句序列EndIf217.4VBA流程控制语句3.If—Then—ElseIf语句(多分支结构)语句结构为(图8.10所示):If条件表达式1Then条件表达式1为真时要执行的语句序列1ElseIf条件表达式2Then如果条件表达式1为假,并且条件表达式2为真时要执行的语句系列2……[else语句序列n]EndIfTTTFF条件表达式1语句块1条件表达式2语句块2语句块nF条件表达式n语句块n+1图8.10多分支结构流程图227.4VBA流程控制语句4.SelectCase—EndSelect语句使用格式如下:SelectCase表达式Case表达式1表达式的值与表达式1的值相等时执行的语句序列[Case表达式2To表达式3][表达式的值介于表达式2的值和表达式3的值之间时执行的语句序列][CaseIs关系运算符表达式4][表达式的值与表达式4的值之间满足关系运算为真时执行的语句序列][CaseElse][上面的情况均不符合时执行的语句序列]EndSelect237.4VBA流程控制语句FT表达式1语句块FT表达式2语句块FT表达式n语句块语句块图8.11SelectCase…EndSelect语句结构流程图247.4VBA流程控制语句7.4.3循环语句1.For—Next语句For—Next语句能够重复执行程序代码区域特定次数,使用格式如下:For循环变量=初值To终值[Step步长]循环体[条件语句序列ExitFor结束条件语句序列]Next[循环变量]循环变量=初值循环变量≤终值循环变量=循环变量+步长值Next的下一条语句图8.12For循环语句流程图循环体FT257.4VBA流程控制语句2.DoWhile—Loop语句使用格式如下:DoWhile条件式循环体[条件语句序列ExitDo结束条件语句序列]LoopT条件表达式语句块F图8.13DoWhile—Loop循环语句流程图267.4VBA流程控制语句3.DoUntil—Loop语句与DoWhile—Loop结构相对应,还有另一个Do循环结构,DoUntil—Loop结构。该结构是条件式值为假时,重复执行循环,直至条件式值为真,结束循环。条件表达式语句块FT图8.14DoUntil—Loop循环语句流程循环流程如图8.14所示。使用格式如下:DoUntil条件式循环体[条件语句序列ExitDo结束条件语句序列]Loop条件表达式语句块FT图8.14DoUntil—Loop循环语句流程277.4VBA流程控制语句4.Do—LoopWhile语句Do循环体[条件语句序列ExitDo结束条件语句序列]LoopWhile条件式循环流程如图8.15所示。5.Do—LoopUntil语句Do循环体[条件语句序列ExitDo结束条件语句序列]LoopUntil条件式循环流程如图8.16所示。287.4VBA流程控制语句语句块条件表达式TF语句块条件表达式FT图8.15Do—LoopWhile循环语句流程图图8.16Do—LoopUntil循环语句流程图297.5面向对象程序设计的基本概念7.5.1集合和对象一个对象就是一个实体,如一辆自行车或一个人等。每种对象都具有一些属性以相互区分,如自行车的尺寸、颜色等。即属性可以定义对象的一个实例。对象除了属性以外还有方法。对象的方法就是对象的可以执行的行为,自行车行走、人说话等。一般情况下,对象都具有多个方法。在Access应用程序由表、查询、窗体、报表、宏和模块对象列表构成,形成不同的类。307.5面向对象程序设计的基本概念7.5.2属性和方法属性和方法描述了对象的性质和行为。其引用方式为:对象.属性或对象.行为。Access中“对象”可以是单一对象,也可以是对象的集合。例如,Label1.Caption属性表示“标签”控件对象的标题属性,Reports.Item(0)表示报表集合中的第一个报表对象。数据库对象的属性均可以在各自的“设计”视图中,通过“属性窗体”进行浏览和设置。317.5面向对象程序设计的基本概念7.5.3事件和事件过程事件是Access窗体或报表及其上的控件等对象可以“辨识”的动作,如单击鼠标、窗体或报表打开等。在Access数据库系统里,可以通过两种方式来处理窗体、报表或控件的事件响应。一是使用宏对