1、NCRE第第7章章 VBA编程基础编程基础 第第7章章 VBA编程基础编程基础 7.1 7.1 VBA的编程环境的编程环境 7.2 7.2 VBA模块简介模块简介7.3 7.3 VBA程序设计基础程序设计基础7.4 7.4 VBA流程控制语句流程控制语句 7.5 7.5 面向对象程序设计的基本概念面向对象程序设计的基本概念 7.6 7.6 过程调用和参数传递过程调用和参数传递 7.7 7.7 VBA的常用操作的常用操作7.8 7.8 用户定义类模块创建和引用用户定义类模块创建和引用 7.9 7.9 VBA程序运行错误处理程序运行错误处理27.1 VBA的编程环境的编程环境 v直接进入:单击直接
2、进入:单击“数据库工具数据库工具”选项卡,在选项卡,在“宏宏”组中单击组中单击“Visual Basic”v通过创建模块进入:单击通过创建模块进入:单击“创建创建”选项卡,然选项卡,然后在后在“宏与代码宏与代码”组中单击组中单击“Visual Basic”v通过窗体和报表等对象的设计进入通过窗体和报表等对象的设计进入“VBA”:通过控件的事件响应,选择通过控件的事件响应,选择“代码生成器代码生成器”进入进入代码编辑。代码编辑。进入进入VBA环境的环境的3中方式中方式 37.2 VBA模块简介模块简介7.2.1 标准模块标准模块Sub子过程Function函数过程7.2.2 类模块类模块系统对象
3、模块窗体对象模块和报表对象模块等用户定义类模块v过程是模块的主要组成单元过程是模块的主要组成单元47.3 VBA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础v数据类型数据类型数据类型类型标识符号字段类型取值范围 整数Integer%字节/整数/是/否-3276832767 长整数Long&长整数/自动编号-21474836482147483647 单精度数Single!单精度数负数-3.402823E38-1.401298E-45正数1.401298E-453.402823E38 双精度数Double#双精度数负数-1.79769313486232E308-4.9406564
4、5841247E-324正数 4.94065645841247E-3241.79769313486232E308 货币Currency货币-922337203685477.5808922337203685477.5807 字符串String$文本0字符65500字符 布尔型Boolean逻辑值True或False 日期型Date日期/时间100年1月1日9999年12月31日 变体类型Variant无任何January1/10000(日期)数字和双精度同,文本和字符串同57.3 VBA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础v变量与常量变量与常量变量是指程序运行时值会发生
5、变化的数据。变量变量是指程序运行时值会发生变化的数据。变量名的命名,同字段命名一样,变量命名不能包含有名的命名,同字段命名一样,变量命名不能包含有空格或除了下划线字符(空格或除了下划线字符(_)外的任何其它的标点符)外的任何其它的标点符号,其长度不得超过号,其长度不得超过255个字符。个字符。常量是在程序中可以直接引用的实际值,其值在常量是在程序中可以直接引用的实际值,其值在程序运行中不变。不同的数据类型,常量的表现形程序运行中不变。不同的数据类型,常量的表现形式也不同,在式也不同,在VBA中有中有3种常量:直接常量、符号种常量:直接常量、符号常量和系统常量。常量和系统常量。67.3 VBA7
6、.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础v变量的声明变量的声明DimAs例如:Dim NewVar_1 As Integer NewVa_1为整型变量Dim NewVar_2%,sum!NewVar_2为整型变量,sum为单精度型变量Dim NewVar_2%,sum!相当于Dim NewVar_2 As Integer,sum As Single。77.3 VBA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础强制声明在默认情况下,在默认情况下,VBA允许在代码中使用未声明的允许在代码中使用未声明的变量,如果在模块设计窗口的顶部变量,如果在模块设计窗口的顶部
7、“通用通用-声明声明”区区域中,加入语句:域中,加入语句:Option Explicit87.3 VBA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础v变量的作用域变量的作用域1.局部范围局部范围 在子过程或函数过程中定义Dim、Ststic、PrivateAs2.模块范围模块范围在模块通用区定义Dim、Ststic、PrivateAs3.全局范围全局范围PublicAs97.3 VBA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础v数据库对象变量数据库对象变量Access建立的数据库对象及其属性,均可被看成建立的数据库对象及其属性,均可被看成是是VBA程序代码
8、中的变量及其指定的值来加以引用。程序代码中的变量及其指定的值来加以引用。例如,例如,Access中窗体与报表对象的引用格式为:中窗体与报表对象的引用格式为:Forms!窗体名称窗体名称!控件名称控件名称.属性名称属性名称或或 Reports!报表名称报表名称!控件名称控件名称.属性名称属性名称107.3 VBA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础v数组数组是在有规则的结构中包含一种数据类型的一组数据,也称作数组元素变量。数组变量由变量名和数组下标构成,通常用Dim语句来定义数组,定义格式为:Dim 数组名(下标下限 to 下标上限)例如:Dim NewArray(10
9、)As Integer 定义了11个整型数构成的数组,数组元素为NewArray(0)至NewArray(10)Dim NewArray(1 To 10)As Integer 定义了10个整型数构成的数组,数组元素为NewArray(1)至NewArray(10)117.3 VBA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础7.3.4 常用标准函数常用标准函数标准函数一般用于表达式中,有的能和语句一样使用。其标准函数一般用于表达式中,有的能和语句一样使用。其使用形式如下:使用形式如下:函数名(函数名(,参数参数3,参数参数4,参数参数5)其中,函数名必不可少,函数的参数放在函
10、数名后的圆括其中,函数名必不可少,函数的参数放在函数名后的圆括号中,参数可以是常量、变量或表达式,可以有一个或多个,号中,参数可以是常量、变量或表达式,可以有一个或多个,少数函数为无参函数。每个函数被调用时,都会返回一个返少数函数为无参函数。每个函数被调用时,都会返回一个返回值。回值。1.算术函数2.字符串函数3.日期/时间函数4.类型函数127.3 VBA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础7.3.5 运算符和表达式运算符和表达式运算符1算术运算符用于算术运算,主要有乘幂()、乘法(*)、除法(/)、整数除法()、求模运算(Mod)、加法(+)及减法()等7个运算符
11、。Dim MyValue 变量定义变量定义MyValue=10 Mod 4 返回返回2MyValue=10 3 返回返回3137.3 VBA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础2关系运算符关系运算符 用来表示两个或多个值或表达式之间的大小关系,有相等(=)、不等()、小于()、小于相等(=)等6个运算符。MyValue=(10 4)返回TrueMyValue=(1=2)返回FalseMyValue=(”周”刘”)返回FalseMyValue=(#2013/12/25#4 AND 1=2)返回FalseMyValue=(10 4 OR 1=2)返回True157.3 V
12、BA7.3 VBA程序设计基础程序设计基础程序设计基础程序设计基础优先级高 低高低算数运算符连接运算符比较运算符逻辑运算符指数运算()字符串连接(&)字符串连接(+)相等(=)不等()小于()小于相等(=)Not负数()And乘法和除法(*、/)Or整数除法()求模运算(Mod)加法和减法(+、)运算符的优先级167.4 VBA7.4 VBA流程控制语句流程控制语句流程控制语句流程控制语句VBA程序语句按照其功能不同分为两大类型:程序语句按照其功能不同分为两大类型:一是声明语句,用于给变量、常量或过程定义命一是声明语句,用于给变量、常量或过程定义命名;二是执行语句,用于执行赋值操作、调用过程、
13、名;二是执行语句,用于执行赋值操作、调用过程、实现各种流程控制。实现各种流程控制。执行语句可分为执行语句可分为3种结构:种结构:1顺序结构:按照语句顺序顺次执行。如赋值语顺序结构:按照语句顺序顺次执行。如赋值语句、过程调用语句等。句、过程调用语句等。2分支结构:又称选择结构,根据条件选择执行分支结构:又称选择结构,根据条件选择执行路径。路径。3循环结构:重复执行某一段程序语句。循环结构:重复执行某一段程序语句。177.4 VBA流程控制语句流程控制语句7.4.1赋值语句赋值语句赋值语句是为变量指定一个值或表达式。通常以赋值语句是为变量指定一个值或表达式。通常以等号(等号(=)连接。在前面我们已
14、多次用到,其使用格)连接。在前面我们已多次用到,其使用格式为:式为:Let 变量名变量名=值或表达式值或表达式这里,这里,Let为可选项。为可选项。注意:注意:“=”是赋值号,不是等号是赋值号,不是等号187.4 VBA流程控制语句流程控制语句7.4.2 条件语句条件语句1IfThen语句(单分支结构)语句结构为:If Then 或If Then End IfTFFT条件表达式语句块图8.8 单分支结构流程图 图8.9 双分支结构流程图条件表达式语句块1语句块2197.4 VBA流程控制语句流程控制语句2IfThenElse语句(双分支结构)语句(双分支结构)语句结构为:If Then Els
15、e 或If Then Else End If207.4 VBA流程控制语句流程控制语句3IfThenElseIf语句(多分支结构)语句(多分支结构)语句结构为(图语句结构为(图8.10所示):所示):If Then ElseIf Thenelse End IfTTTFF条件表达式1语句块1条件表达式2语句块2语句块nF条件表达式n语句块n+1图 8.10 多分支结构流程图217.4 VBA流程控制语句流程控制语句4Select CaseEnd Select语句语句使用格式如下:使用格式如下:Select Case表达式表达式Case 表达式表达式1 表达式的值与表达式表达式的值与表达式1的值相
16、等时执行的语句序列的值相等时执行的语句序列Case 表达式表达式2 To 表达式表达式3 表表达达式式的的值值介介于于表表达达式式2的的值值和和表表达达式式3的的值值之之间间时时执执行行的语句序列的语句序列Case Is 关系运算符表达式关系运算符表达式4 表表达达式式的的值值与与表表达达式式4的的值值之之间间满满足足关关系系运运算算为为真真时时执执行行的语句序列的语句序列Case Else 上面的情况均不符合时执行的语句序列上面的情况均不符合时执行的语句序列End Select227.4 VBA流程控制语句流程控制语句FT表达式1语句块FT表达式2语句块FT表达式n语句块语句块图8.11 S
17、elect Case End Select语句结构流程图237.4 VBA流程控制语句流程控制语句7.4.3 循环语句循环语句1.ForNext语句 ForNext语句能够重复执行程序代码区域特定次数,使用格式如下:For 循环变量=初值 To 终值Step 步长 循环体 条件语句序列 Exit For 结束条件语句序列Next 循环变量循环变量=初值循环变量终值循环变量=循环变量+步长值Next的下一条语句图 8.12 For循环语句流程图循环体FT247.4 VBA流程控制语句流程控制语句2DoWhileLoop语句使用格式如下:Do While 循环体 条件语句序列 Exit Do 结束
18、条件语句序列LoopT条件表达式语句块F图8.13 Do WhileLoop循环语句流程图257.4 VBA7.4 VBA流程控制语句流程控制语句流程控制语句流程控制语句3Do UntilLoop语句与DoWhileLoop结构相对应,还有另一个Do循环结构,DoUntilLoop结构。该结构是条件式值为假时,重复执行循环,直至条件式值为真,结束循环。条件表达式语句块FT图8.14 Do UntilLoop循环语句流程循环流程如图8.14所示。使用格式如下:Do Until 循环体 条件语句序列 Exit Do 结束条件语句序列Loop条件表达式语句块FT图8.14 Do UntilLoop循
19、环语句流程267.4 VBA7.4 VBA流程控制语句流程控制语句流程控制语句流程控制语句4DoLoop While语句语句Do 循环体循环体 条件语句序列条件语句序列 Exit Do 结束条件语句序列结束条件语句序列LoopWhile 条件式条件式循环流程如图循环流程如图8.15所示。所示。5DoLoop Until语句语句Do 循环体循环体 条件语句序列条件语句序列 Exit Do 结束条件语句序列结束条件语句序列Loop Until 条件式条件式循环流程如图循环流程如图8.16所示。所示。277.4 VBA7.4 VBA流程控制语句流程控制语句流程控制语句流程控制语句语句块条 件 表达式
20、TF语句块条 件 表达式FT图 8.15 DoLoop While循环语句流程图 图 8.16 DoLoop Until循环语句流程图287.5 7.5 面向对象程序设计的基本概念面向对象程序设计的基本概念7.5.1 集合和对象一个对象就是一个实体,如一辆自行车或一个人一个对象就是一个实体,如一辆自行车或一个人等。每种对象都具有一些属性以相互区分,如自行等。每种对象都具有一些属性以相互区分,如自行车的尺寸、颜色等。即属性可以定义对象的一个实车的尺寸、颜色等。即属性可以定义对象的一个实例。例。对象除了属性以外还有方法。对象的方法就是对对象除了属性以外还有方法。对象的方法就是对象的可以执行的行为,
21、自行车行走、人说话等。一象的可以执行的行为,自行车行走、人说话等。一般情况下,对象都具有多个方法。般情况下,对象都具有多个方法。在在Access应用程序由表、查询、窗体、报表、宏应用程序由表、查询、窗体、报表、宏和模块对象列表构成,形成不同的类。和模块对象列表构成,形成不同的类。297.5 7.5 面向对象程序设计的基本概念面向对象程序设计的基本概念7.5.2 属性和方法属性和方法 属性和方法描述了对象的性质和行为。其引用方属性和方法描述了对象的性质和行为。其引用方式为:对象式为:对象.属性属性 或或 对象对象.行为。行为。Access中中“对象对象”可以是单一对象,也可以是对可以是单一对象,
22、也可以是对象的集合。例如,象的集合。例如,Label1.Caption属性表示属性表示“标签标签”控件对象的标题属性,控件对象的标题属性,Reports.Item(0)表示报表表示报表集合中的第一个报表对象。数据库对象的属性均可集合中的第一个报表对象。数据库对象的属性均可以在各自的以在各自的“设计设计”视图中,通过视图中,通过“属性窗体属性窗体”进进行浏览和设置行浏览和设置。307.5 7.5 面向对象程序设计的基本概念面向对象程序设计的基本概念7.5.3 事件和事件过程事件和事件过程 事件是事件是Access窗体或报表及其上的控件等对象可窗体或报表及其上的控件等对象可以以“辨识辨识”的动作,
23、如单击鼠标、窗体或报表打开的动作,如单击鼠标、窗体或报表打开等。在等。在Access数据库系统里,可以通过两种方式来数据库系统里,可以通过两种方式来处理窗体、报表或控件的事件响应。一是使用宏对处理窗体、报表或控件的事件响应。一是使用宏对象来设置事件属性,对此前面已有叙述;二是为某象来设置事件属性,对此前面已有叙述;二是为某个事件编写个事件编写VBA代码过程,完成指定动作,这样的代码过程,完成指定动作,这样的代码过程称为事件过程或事件响应代码。代码过程称为事件过程或事件响应代码。317.7 VBA7.7 VBA常见操作常见操作常见操作常见操作 8.7.1打开和关闭操作1打开窗体操作命令格式为:D
24、oCmd.OpenForm formname,view,filtername,wherecondition,datamode,windowmode例如:以对话框形式打开名为“学生信息登录”窗体。Docmd.OpenForm“学生信息登录”,acDialog注意,参数可以省略,取缺省值,但分隔符”,”不能省略。327.7 VBA7.7 VBA常见操作常见操作常见操作常见操作2打开报表操作命令格式为:命令格式为:DoCmd.OpenReport reportname,view,filtername,wherecondition例如:预览名为例如:预览名为“学生信息表学生信息表”报表的语句为:报表的
25、语句为:Docmd.OpenReport“学生信息表学生信息表”,acViewPreview注意,参数可以省略,取缺省值,但分隔符注意,参数可以省略,取缺省值,但分隔符”,”不能省略。不能省略。337.7 VBA7.7 VBA常见操作常见操作常见操作常见操作3关闭操作命令格式为:命令格式为:DoCmd.Close objecttype,objectname,save例如:关闭名为例如:关闭名为“学生信息登录学生信息登录”窗体。窗体。DoCmd.Close acForm,”学生信息登录学生信息登录”如果如果“学生信息登录学生信息登录”窗体就是当前窗体,则可窗体就是当前窗体,则可以使用语句:以使用
26、语句:DoCmd.Close。347.7 VBA7.7 VBA常见操作常见操作常见操作常见操作8.7.2 输入和输出操作1输入框(InputBox)InputBox(prompt,title,default,xpos,ypos,helpfile,context)例如:例如:strName=InputBox(请输入姓名:请输入姓名:,Msg)357.7 VBA7.7 VBA常见操作常见操作常见操作常见操作2消息框(MsgBox)MsgBox(prompt,buttons,title,helpfile,context)例如:例如:MsgBox 数据处理结束数据处理结束!,vbInformation,消消息息。显示消息框如图。显示消息框如图8.24。36NCREAccessAccess数据库程序设计数据库程序设计