,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第十一章,面向对象程序设计语言,VBA,第十一章 面向对象程序设计语言VBA,1,内容,编程的概念,过程、子程序和函数,VBA,编程环境,常量、变量与数据类型,数组和自定义变量,常用语句与程序结构,VBA,编程错误处理,内容 编程的概念,2,编程的基本概念,模块与宏,使用模块和宏可以将数据库中所有对象联系起来、统一管理,形成完整的数据库系统。,Access,模块,:,Visual Basic,语言编写的程序。它将,VB,的声明、语句和过程集合在一起,统一命名,并通过嵌入在,Access,中的编辑器和编译器与,Access,结合。,Access,宏,:一个或多个操作命令的集合。可控制其他对象的操作,也可作为窗体或报表控件中的事件代码控制数据库其他对象的操作,还可成为实用的数据库管理系统菜单栏的命令。,编程的基本概念 模块与宏 使用模块和宏可以将数据库,3,表示实体,如一个学生等。一种对象包含多种属性,如学号、姓名、入学总分、所在班级等。对象还带自己的方法,即对象所能执行的行为,如查询学生情况等。,典型,Access,应用程序是由窗体、表、查询和其他对象构成的集合。数据库窗口把可供选择的对象排列在一起,形成不同的类。,换不同类的数据库对象,对象,表示实体,如一个学生等。一种对象包含多种属性,如学,4,属性和方法用于,描述了对象的性质和行为。,引用格式,:,对象,.,属性,或,对象,.,方法,txtInput1.backColor,DoCmd,对象:有许多方法,如,Openform,打开窗体,GotoControl,将焦点移到窗体上的一个控件,SetFocus,将焦点移到窗体上的一个控件,RunCommand,执行,Access,菜单和工具条上的命令,属性和方法,属性和方法用于描述了对象的性质和行为。txtInput1.b,5,事件,事件是对象可辨认的动作,如单击鼠标、按下某个键等事件响应代码:若为一个事件编写一段,VBA,代码,则在事件发生时执行代码,完成指定的动作。,例:新建窗体并放置控件,(,如图所示,),:,按钮,1,名,“,bOk,”,,标题,“,显示,”,按钮,2,名,“,bClear,”,,标题,“,清除,”,文本框 名,“,tText,”,,标签的标题,“,欢迎,”,现设计两个按钮的事件过程,完成以下功能:,单击“显示”按钮,文本框内输出“欢迎学习,VBA!”,信息,;,单击“清除”按钮,清空文本框内容。,事件 事件是对象可辨认的动作,如单击鼠标、按下,6,Option Compare Database,Private Sub bClear_Click(),Me!tText.SetFocus ,聚焦文本框,Me!tText.Text=,“”,清空文本框表面文字,End Sub,窗体模块代码,:,Private Sub bOk_Click(),Me!tText.SetFocus,聚焦文本框,Me!tText.Text=,“,欢迎学习,VBA!,”,显示文字,End Sub,以上程序处理段可以分别用以下代码替换:,bClear,事件过程,Me!tText=“”,或,Me!tText.Value=“”,bOk,事件过程,Me!tText=“,欢迎学习,VBA!”,或,Me!tText.Value=“,欢迎学习,VBA!”,事件代码,Option Compare Database窗体模块代码:,7,过程、子程序和函数,过程是将,VBA,语言的声明和语句集合在一起,作为一个命名单位的程序段(执行特定功能的语句块)。,过程的三种类型,:,子程序,:执行一系列操作的过程。,函数过程,:特殊的、能返回值的,Function,过程。,能否返回值,是过程和函数之间最大的区别。,属性过程,:用于为窗体、报表和类模块增加自定义属性。,过程、子程序和函数 过程是将VBA语言的声明和语句,8,子程序是执行一系列操作的过程。使用时可多次调用,若模块有错误,改正之后,则程序中所有引用它的地方都得到维护。,定义格式,:,Public|PrivateStatic Sub,子程序名,(),Exit Sub,End Sub,Public,所有模块的所有其他过程都可调用,Private,适用于同一模块中的其他过程,Static,过程中的变量在模块打开期间始终有效,子程序,子程序是执行一系列操作的过程。使用时可多,9,函数也是执行一系列操作的程序段,而且可以使用函数名返回一个值。使用时同样可多次调用,若模块有错误,改正之后,则程序中所有引用它的地方也都得到维护。,定义格式,:,Public|PrivateStatic Function,函数名,()As,数据类型,Exit Function,函数名表达式,End Sub,Public,所有模块的所有其他过程都可调用,Private,适用于同一模块中的其他过程,Static,过程中的变量在模块打开期间始终有效,函数,函数也是执行一系列操作的程序段,而且可,10,计算圆的面积,并加入错误处理代码,Public Function Area(R As Single)As Single,On Error GoTo Err_Handle,Area,3.14159*R*R,Exit_Handle:,Exit Function,Err_Handle:,MsgBox Err.Description,Resume Exit_Handle,End Function,函数的调用,:,计算半径为,3,的圆的面积:,Area(3),变量做实参:,Dim MyR As Single,Area(MyR),过程应用例,计算圆的面积,并加入错误处理代码过程应用例,11,标准模块,:包含在数据库窗口的模块对象列表中,其中有通用过程和常用过程,这些过程不与,Access,数据库文件中的任何对象相关联。,类模块,:包含类的定义(属性和方法)的模块,有三种基本形式:窗体类模块、报表类模块和自定义类模块,它们各自与某一窗体或报表相关联。,类模块也可脱离窗体或报表而单独存在,这种类模块可在数据库窗口的模块页中显示。,VBA,模块类型,标准模块:包含在数据库窗口的模块对象列表中,其中有通用过程,12,VBA,编程环境,工程窗口,选择对象,属性窗口,选择对象的属性,代码窗口,选择事件,编程窗口,:,VBA编程环境工程窗口属性窗口代码窗口选择事件编程窗口:,13,窗口工具条,视图,Microsoft Access,按钮,:切换,Access 2000,窗口,插入按钮,:插入模块或过程,运行子过程,/,用户窗体按钮,:运行模块中的程序,中断按钮,:中断正在运行的程序,重新设置按钮,:结束正在运行的程序,设置模式按钮,:在设计模式和非设计模式之间切换,工程资源管理器按钮,:用于打开工程资源管理器,属性窗口按钮,:用于打开属性窗口,对象浏览器按钮,:用于打开对象浏览器,Microsoft Accsee,插入模块,运行子过程,/,用户窗体,设计模式,中断,重新设计,工程资源管理器,对象浏览器,属性窗口,窗口工具条 视图Microsoft Access按钮:切换A,14,工程、属性、代码窗口,工程窗口,:也叫工程资源管理器,显示应用程序中用到的模块文件列表。可控制代码窗口、对象窗口,以及对象文件夹的显示。,属性窗口,:所选对象的属性列表。可“按字母序”和“按分类序”查看属性,编辑这些对象的属性。,在属性窗口显示,Access,类对象的方法:先在设计视图中打开对象。再双击工程窗口上的一个模块或类,代码窗口就会显示相应的指令和声明。,代码窗口,:用于输入和编辑,VBA,代码。,工程、属性、代码窗口工程窗口:也叫工程资源管理器,显示应用程,15,变量、常量与数据类型,常量、变量与数据类型,数据类型,:划分变量的种类,以表示不同种类的数据。,常量,:数据的字面值。,字面常量,:,如,3.721,、“,VBA”,、,#2019-7-1#,符号常量,:用,Const,语句说明,可在模块中引用,系统定义常量,:,True,、,False,、,Null,等,变量,:数据代名词,变量名可随意定义,但不能与,VBA,关键词冲突,变量的值可按需变化。,变量必须先声明数据类型,然后才能使用。,变量、常量与数据类型常量、变量与数据类型数据类型:划分变量的,16,VBA,主要数据类型,VBA主要数据类型,17,数值型数据的符号,:,整型,%,、长整型,&,、单精度型,!,、双精度型,#,例:,1.5#78%3.33!8&,布尔型数据的值,:两种值,True,和,False,,其他数值类型转换为布尔型时,,0,变成,False,,其他值均为,True,。布尔型转换为其他型时,,False,成为,0,,,True,成为,-1,。,日期型变量的值,:日期值用,#,括起来,如,#2019-7-1#,日期变量以短日期格式显示。其他数值型变量转换为日期型时,小数点左边的值为日期,右边值为时间。午夜为,0,,中午为,0.5,,负整数为,1899,年,12,月,30,日前。,主要类型说明,数值型数据的符号:主要类型说明,18,Variant(,变体,),数据类型,:若未给变量指定数据类型,,Access,自动指定其为,Variant,类型。,Variant,可包含除定长,String,数据及用户定义类型之外的任何种类的数据。也可包含,Empty,、,Error,、,Nothing,及,Null,特殊值。,变量的初始化,:声明而未赋值的变量的值为:,-,数值变量初始化为,0,-,变长字符串为零长度串,定长字符串都填上零,-Variant,变量初始化为,Empty,-,用户自定义变量中的元素都当成个别变量来初始化,Variant(变体)数据类型:若未给变量指定数据类型,19,变量和常量的声明,使用,Dim,语句来声明变量,其功能为声明变量,并为变量分配存储空间。例如,,Dim tName As String,声明了字符串变量,tName,为,Sting,型数据。可给其赋值:,tName=“,程书宜”,而赋值之后即可引用该变量:,MsgBox “,姓名:”,&tName,消息框输出信息:,姓名:程书宜,可在同一行内声明多个变量。例如,,Dim tVar1,tVar2 As Boolean,tVar3 As Date,其中,tVar1,的类型未指定类型。默认为,Variant,。,常量以,Const,语句声明,例如,,Public Const PI=3.14159,变量和常量的声明 使用Dim语句来声明变量,其功能,20,变量和常量的作用域,全局变量,在数据库的所有模块的所有过程中有效,。例如,,Public Dim tName As String,Public Const PI=3.1415926,所声明的变量和常量可在整个程序中引用。,变量和常量的作用域全局变量 在数据库的所有模块的所有过程中有,21,模块变量,在模块内有效,。,Dim,和,Static,所声明的变量默认为在模块内私有。也可用,Private,语句显式声明。例如,,Dim tName As String,Const PI=3.1415926,所声明的变量和常只能被它们所在的模块使用。,模块变量 在模块内有效。Dim和Static所声明的变量默,22,局部变量,只在某个过程内起作用,。,在过程结束之前,,Dim,语句一直保存着变量的值,即以,Dim,语句声明的变量在过程之间调用时会丢失数据。而用,Static,语句声明的变量则在模块内一直保留其值,直到模块被复位或重新启动。,局部变量 只在某个过程内起作用。在过程结束之前,Dim语句一,23,数据类型转换,数据类型转换,24,数组和自定义变量,数组的声明和引用,数组,:表示一组具有相同数据类型的值。,数组的声明,: