第第88章章VBAVBA编程入门编程入门内容提要内容提要88--11VBAVBA概念概念88--22VBAVBA编程基础编程基础88--3VBA3VBA常用语句常用语句88--4VBA4VBA程序流程控制程序流程控制88--55数组数组88--6VBA6VBA与宏与宏88--77小结及练习小结及练习VBA(VisualBasicforApplication)VBA(VisualBasicforApplication)是是MicrosoftOfficeMicrosoftOffice系列软件的内置编系列软件的内置编程语言,其语法结构与程语言,其语法结构与VisualBasicVisualBasic编编程语言互相兼容,采用的是面向对象的程语言互相兼容,采用的是面向对象的编程机制和可视化的编程环境。编程机制和可视化的编程环境。88--1VBA1VBA概述概述88--11--1VBA1VBA简介简介1.1.集合和对象集合和对象VBAVBA中的应用程序是由许多对象组成的,如中的应用程序是由许多对象组成的,如表、窗体、查询等。对象是帮助构造应用程序表、窗体、查询等。对象是帮助构造应用程序的元素,以特定的方式组织这些对象,就形成的元素,以特定的方式组织这些对象,就形成了应用程序。了应用程序。数据库窗口把可供选择的对象排列在一起,数据库窗口把可供选择的对象排列在一起,形成不同的类。形成不同的类。88--11--22面向对象程序设计的基本概念面向对象程序设计的基本概念2.2.对象的属性、事件和方法对象的属性、事件和方法属性属性属性描述了对象的自身性质。其格式为:属性描述了对象的自身性质。其格式为:对象名对象名..属性属性==属性值属性值事件事件事件是指可以发生在一个对象上且能够被该对象所事件是指可以发生在一个对象上且能够被该对象所识别的动作。识别的动作。如:单击某个命令按钮就产生该按钮的如:单击某个命令按钮就产生该按钮的““单击单击””事事件件当某个对象发生某一事件后,就会驱动系统去执行当某个对象发生某一事件后,就会驱动系统去执行预先编好的、与这一事件相对应的一段程序。预先编好的、与这一事件相对应的一段程序。方法方法方法是系统事先设计好的,可以完成一定方法是系统事先设计好的,可以完成一定操作的特殊过程,是附属于对象的行为和动操作的特殊过程,是附属于对象的行为和动作。在需要使用的时候可以直接调用。作。在需要使用的时候可以直接调用。其调用格式为:其调用格式为:对象名对象名..方法名方法名AccessAccess中除数据库的中除数据库的77个对象外,还提供个对象外,还提供一个重要的对象:一个重要的对象:DoCmdDoCmd对象对象除窗体、控件的除窗体、控件的SetFocus(SetFocus(获得控制焦点获得控制焦点))方法外,用得最多得是方法外,用得最多得是DoCmdDoCmd对象对象的一些方的一些方法。使用这些方法,可以在法。使用这些方法,可以在VBAVBA中运行中运行AccessAccess的操作。的操作。打开当前数据库中的打开当前数据库中的““雇员雇员””窗体窗体DoCmd.OpenFormEmployeesDoCmd.OpenFormEmployees在数据库窗口中选择在数据库窗口中选择““雇员雇员””窗体窗体DoCmd.SelectObjectacForm,DoCmd.SelectObjectacForm,EmployeesEmployees,True,True在数据库窗口中关闭在数据库窗口中关闭““雇员雇员””窗体窗体DoCmd.CloseacForm,DoCmd.CloseacForm,““EmployeesEmployees””,acSaveYes,acSaveYes删除数据库中的删除数据库中的““雇员雇员””表表DoCmd.DeleteObjectEmployeesDoCmd.DeleteObjectEmployeesDoCmdDoCmd对象的常用方法(参照教材对象的常用方法(参照教材P190P190页)页)例例88--11新建一个窗体并添加两个命令按钮,新建一个窗体并添加两个命令按钮,运行窗体后,单击第一个按钮,新式一个消运行窗体后,单击第一个按钮,新式一个消息框;单击第二个按钮,退出当前窗体。息框;单击第二个按钮,退出当前窗体。(参照教材(参照教材P191P191页)页)通过此例,体会可视化编程、面向对象通过此例,体会可视化编程、面向对象、事件过程、应用方法等基本概念。、事件过程、应用方法等基本概念。进入进入VBEVBE编程环境编程环境VBEVBE窗口的组成窗口的组成VBEVBE窗口由工具栏、工程资源管理器窗口、窗口由工具栏、工程资源管理器窗口、属性窗口、代码窗口和立即窗口组成。属性窗口、代码窗口和立即窗口组成。在在VBEVBE环境中编写环境中编写VBAVBA代码代码88--11--3VBA3VBA编程环境编程环境标准工具条标准工具条视图视图MicrosoftAccessMicrosoftAccess按钮:切换按钮:切换Access2000Access2000窗口窗口插入按钮:插入模块或过程插入按钮:插入模块或过程运行子过程运行子过程//用户窗体按钮:运行模块中的程序用户窗体按钮:运行模块中的程序中断按钮:中断正在运行的程序中断按钮:中断正在运行的程序重新设置按钮:结束正在运行的程序重新设置按钮:结束正在运行的程序设置模式按钮:在设计模式和非设计模式之间切换设置模式按钮:在设计模式和非设计模式之间切换工程资源管理器按钮:用于打开工程资源管理器工程资源管理器按钮:用于打开工程资源管理器属性窗口按钮:用于打开属性窗口属性窗口按钮:用于打开属性窗口对象浏览器按钮:用于打开对象浏览器对象浏览器按钮:用于打开对象浏览器MicrosoftAccsee插入模块运行子过程/用户窗体设计模式中断重新设计工程资源管理器对象浏览器属性窗口工程窗口-选择对象属性窗口-选择对象的属性代码窗口选择事件VBEVBE编程环境编程环境88--22--11常量、变量常量、变量88--2VBA2VBA编程基础编程基础常量:在程序运行中其存储的值不会改变。常量:在程序运行中其存储的值不会改变。变量:在程序运行中其值可以改变。变量:在程序运行中其值可以改变。VBAVBA使用常量、变量来存储值。用来保存使用常量、变量来存储值。用来保存在程序运行期间数据。在程序运行期间数据。常量常量在程序运行过程中,其值在程序运行过程中,其值不会被改变不会被改变的量称的量称为常量。在为常量。在VBAVBA中有三类常量:中有三类常量:直接常量直接常量如:如:1010,,20%20%,,123.0123.0,,““AB”AB”,“,“VBAVBA程序设计”程序设计”等等符号常量符号常量系统常量系统常量指指VBAVBA系统预先定义好的,用户可以直接引用的量。系统预先定义好的,用户可以直接引用的量。如:如:acFormacForm,,acQueryacQuery,,vbOkvbOk,,vbRedvbRed符号常量符号常量在程序中,某个常量多次被使用,则可以使用一在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。有效地改进了程序的可读性和可维护性。VBAVBA中使用关键字中使用关键字ConstConst声明符号常量声明符号常量。。其格式如下:其格式如下:ConstConst常量名常量名[[类型符号类型符号]=]=常数表达式常数表达式如:如:ConstConstPIPI#=#=33..14159261415926变量是内存中的临时单元,存放在程变量是内存中的临时单元,存放在程序执行过程中产生的中间结果和最后输出结果。序执行过程中产生的中间结果和最后输出结果。在程序中使用变量,就要给变量定义在程序中使用变量,就要给变量定义名称及类型,即对变量进行声明。名称及类型,即对变量进行声明。变量变量变量命名规则变量命名规则变量名必须以字母或汉字开头,后可跟字母、变量名必须以字母或汉字开头,后可跟字母、汉字、数字或下划线组成(不能含有小数点和空汉字、数字或下划线组成(不能含有小数点和空格),长度不超过格),长度不超过255255个字符的字符串;个字符的字符串;不能使用不能使用VBAVBA中的关键字;中的关键字;VBAVBA中不区分变量名的大小写;中不区分变量名的大小写;变量名的最后一个字符可以是变量名的最后一个字符可以是%%、、&&、!、、!、##、、$$等表示数据类型的声明符。等表示数据类型的声明符。说明:常量名的命名规则与变量名的命名规则相同说明:常量名的命名规则与变量名的命名规则相同88--22--22数据类型与变量的声明数据类型与变量的声明在在VBAVBA中,数据类型用来决定变量中,数据类型用来决定变量可以保存何种数据。可以保存何种数据。VBAVBA支持多种数据支持多种数据类型,为用户编程提供了方便。类型,为用户编程提供了方便。参照教材参照教材P196P196页表页表88--1VBA1VBA的数据类型的数据类型VBAVBA的数据类型的数据类型数据类型数据类型类型声明符类型声明符存储空间存储空间取值范围取值范围整型(整型(IntegerInteger))%%22--3276832768~~3276732767长整型(长整型(LongLong))&&44--21474836482147483648~~21474836472147483647单精度浮点型单精度浮点型((SingleSingle))!!44负数:负数:--3.402823E383.402823E38~~--1.401298E1.401298E--4545正数:正数:1.401298E1.401298E--4545~~3.402823E383.402823E38双精度浮点型双精度浮点型((DoubleDouble))##88负数:负数:--1.79769313486232E3081.79769313486232E308~~--4.94065645841247E4.94065645841247E--324324正数:正数:4.94065645841247E4.94065645841247E--324324~~1.79769313486232E3081.79769313486232E308货币型货币型(Currency)(Currency)@@88--922337203685477.5808922337203685477.5808~~922337203685477.5807922337203685477.5807日期型日期型(Date)(Date)88100100年年11月月11日~日~99999999年年1212月月3131日日字符型字符型(String)(String)$$00字符~字符~6540065400个字符个字符字节型字节型(Byte)(Byte)1100~~255255逻辑型逻辑型(Boolean)(Boolean)22TrueTrue或或FalseFalse对象型对象型(Object)(Object)44任何引用的对象任何引用的对象变体型变体型(Variant)(Variant)变量声明变量声明用用Dim|StaticDim|Static语句显式声明局部变量语句显式声明局部变量格式:格式:DimDim变量名变量名[AS[AS类型类型]]或或DimDim变量名类型符变量名类型符语句中的语句中的““AsAs类型类型””子句是可选的。如果子句是可选的。如果使用该子句,就可以定义变量的数据类型。未使用该子句,就可以定义变量的数据类型。未使用,默认变量的类型为变体型(使用,默认变量的类型为变体型(VariantVariant)。)。例如:例如:DimiAsinteger,sDimiAsinteger,s表示声明了一个名为表示声明了一个名为ii的整型变量和一