资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,第,8,章,模块与,VBA,编程,本章内容,8.1,模块概述,8.2 VBA,编程环境,8.3,面向对象程序设计,8.4 VBA,编程语言基础,8.5 VBA,程序流程控制语句,8.6 VBA,过程调用与参数传递,8.7 VBA,程序调试,8.1,模 块 概 述,模块是,Access,数据库中的一个数据库对象,它以,VBA(Visual Basic for Application),语言为基础编写。,8.1.1,模块的类型,类模块,可以,包含新对象的定义的模块。一个类的每个实例都新建一个对象。,窗体,模块和报表模块都是类模块。,Access,有两种类型的模块:类模块和标准模块,。,标准模块,简称“模块”。,大多数模块都是标准模块,其中包含的代码和特定的数据库对象并无关联,当数据库中对象被移动时,模块还在原数据库中不动。,8.1.2,将宏转换为模块,转换,窗体或报表中的宏,将,窗体或报表引用的任意宏转换为,VBA,代码,并向窗体或报表的类模块中添加该代码。该类模块将成为窗体或报表的组成部分,并且如果窗体或报表被移动或复制时,它也随之改变,。,例,8-1,将“打开学生表”窗体中的宏转换为,模块,。,转换全局宏,例,8-2,将“打开学生表”全局宏转换成,VBA,代码。操作步骤如下:,8.1.3,模块的结构,模块,声明部分,可以,在这部分定义变量、常量、自定义类型和外部过程。在模块中,声明部分与过程部分是分割开来的,声明部分中设定的常量和变量是全局性的,可以被模块中的所有过程调用。,过程,定义部分,这,是一种自动执行的过程,用来对用户或程序代码启动的事件或系统触发的事件做出响应。类模块中的过程大部分是事件过程,也可以包含仅供本模块调用的过程和函数。标准模块中的过程和函数均为通用过程,可以供本模块或其他模块中的语句调用。,8.2 VBA,编程环境,在,Access,中,,VBA,程序是使用,VB,编辑器,(Visual Basic Editor,,,VBE),编写的。,VBE,是编辑、编译、运行、调试,VBA,代码的集成环境。,8.2.1,打开,VBE,窗口,启动,VBE,的方法:,在数据库中,单击“数据库工具”选项卡“宏”选项组中的,Visual Basic,按钮。,在数据库中,单击“创建”选项卡“宏与代码”选项组中的,Visual Basic,按钮。,创建新的标准模块。单击“创建”选项卡“宏与代码”选项组中的“模块”按钮,就在,VBE,编辑器中创建一个空白模块。,如果已有一个标准模块。在“导航窗格”窗口选择“模块”对象列表中的该模块,就会打开,VBE,窗口并显示该模块的内容。,在窗体、报表的设计视图中,右击控件对象,再选择快捷菜单上的“事件生成器”命令,打开“选择生成器”对话框,选择其中的“代码生成器”选项,单击“确定”按钮。,8.2.2 VBE,窗口,8.3,面向对象程序设计,属性,方法,事件,VBA,程序设计是一种面向对象的程序设计。面向对象程序设计是一种系统化的程序设计方法,它基于对象模型,采用面向对象的程序设计语言编程实现。,事件过程,8.3.1,属性,属性,是对象所具有的性质特征,。窗体,设计中,,通过,“属性表”对所选对象的属性进行可视化设置,这种设置属性的方式成为,静态设置,。也可以通过编写代码的方式设置对象的属性,在,VBA,代码中设置属性的方式称为,动态设置,。,8.3.1,属性,1.,对象属性的代码表示方法,在,代码中引用控件对象属性的引用格式是:,对象,名,.,属性名,=,属性值,说明,:,Me,是,VBA,编程中使用频率较高的关键字,,Me,是“包含这段代码的对象”的简称,可以代表当前对象。在类模块中,,Me,代表当前窗体或当前报表。,在,VBA,代码中可以使用,Form,表示当前窗体。,若,省略,,则表示引用的是当前窗体中的对象。,属性,名必须使用英文字符表示。,8.3.1,属性,2.,常用,控件对象的属性,属性标识,功能,使用举例,Name,唯一标识每个对象,Caption,窗体标题栏上的内容,控件上的标题内容,Label1.caption=,计算,Cancel,指定命令按钮是否是窗体上的“取消”按钮,Default,指定命令按钮是否是窗体上的“默认”按钮,Enabled,用于设置对象是否可用,如果值为,False,为灰色不可用,Command1.enabed=false,Visible,用于设置对象是否可见,如果值为,False,为不会显示,Command1.visible=false,Fontbold,设置字体是否加粗,如果为,True,字体加粗,Label1.fontbold=true,Fontname,设置字体名,Text1.fontname=”,隶书,”,Fontsize,字体的大小值,Label1.fontsize=20,Forecolor,标题的颜色,Text1.forecolor=RGB(0,0,255),TabIndex,在窗体中,Tab,键次序中的位置,Left,控件左上角距窗体左边界的距离,Label1.left=20,Top,控件左上角距窗体上边界的距离,Text1.top=10,Width,控件的宽度,Label1.width=20,Height,控件的高度,Label1.width=30,Value,文本框中的内容,Text1.value=100,text,设置文本框中显示的文本,(,要求文本框先获得焦点,),Text1.text=100,8.3.2,方法,对象,的方法是对象可以执行的行为。如果说,对象的属性是静态规格,那么对象的方法便是动态操作。每个对象都有自己的若干方法,从而构成该对象的方法集。可以把方法理解为内部函数,可以用来完成改变对象的,当前,状态某种特定的功能,。,1.,对象方法的引用,方式,:,对象名,.,方法名,2.SetFocus,方法,:,使,对象获得焦点,只有获得焦点的控件才是当前操作的对象,。,3.DoCmd,对象,方法,:,它的主要功能是通过调用包含在内部的方法实现,VBA,编程中对,Access,的操作,。,8.3.3,事件,事件,是,Access,预先定义好的,能被对象识别的动作。事件作用于对象,对象识别事件并做出相应的反应,如单击事件,(Click),、双击事件,(DblClick),、移动鼠标事件,(MouseMove),等都能引起对象做出操作。,事件,是固定的,由系统定义好的,用户不能定义新的事件,只能引用。,8.3.3,事件,1.,窗体对象事件,事件动作,动作说明,Load,窗体加载时发生事件,UnLoad,窗体卸载时发生事件,Open,窗体打开时发生事件,Clase,窗体关闭时发生事件,Click,窗体单击时发生事件,DblClick,窗体双击时发生事件,MouseDown,窗体鼠标按下时发生事件,KeyPress,窗体上键盘按键时发生事件,KeyDown,窗体上键盘按下键时发生事件,8.3.3,事件,1.,窗体对象事件,事件动作,动作说明,Load,窗体加载时发生事件,UnLoad,窗体卸载时发生事件,Open,窗体打开时发生事件,Clase,窗体关闭时发生事件,Click,窗体单击时发生事件,DblClick,窗体双击时发生事件,MouseDown,窗体鼠标按下时发生事件,KeyPress,窗体上键盘按键时发生事件,KeyDown,窗体上键盘按下键时发生事件,当窗体首次打开时,依次触发了下列事件,顺序是:,打开,(Open),加载,(Load),调整大小,(Resize),激活,(Activate),成为当前,(Current),。,关闭,窗体时事件触发顺序:,卸载,(Unload),停用,(Deactivate),关闭,(Close),。,8.3.3,事件,2.,报表对象事件,事件动作,动作说明,Open,报表打开时发生事件,Close,报表关闭时发生事件,3.,命令按钮控件,事件,事件动作,动作说明,Click,按钮单击时发生事件,DblClick,按钮双击时发生事件,Enter,按钮获得输入焦点之前发生事件,GetFocus,按钮获得输入焦点时发生事件,MouseDown,按钮上鼠标按下时发生事件,KeyPress,按钮上键盘按键时发生事件,KeyDown,按钮上键盘按下键时发生事件,8.3.3,事件,4.,标签控件事件,5.,文本框控件事件,事件动作,动作说明,Click,标签单击时发生事件,DblClick,标签双击时发生事件,MouseDown,标签上鼠标按下时发生事件,事件动作,动作说明,AfterUpdate,文本框内容更新后发生事件,Enter,文本框获得输入焦点之前或拥有输入焦点之后按回车时发生事件,GetFocus,文本框获得输入焦点时发生事件,LostFocus,文本框失去输入焦点时发生事件,Change,文本框内容更新时发生事件,KeyPress,文本框内键盘按键时发生事件,MouseDown,文本框内鼠标按下时发生事件,事件动作,动作说明,BeforeUpdate,文本框内容更新前发生事件,8.3.4,事件,过程,在,Access,的程序设计中,需要从对象属性和事件方法两个方面进行设计,其中事件响应可以通过“宏”操作,也可以通过编写某个事件过程代码,由程序来完成指定操作。,事件过程用来识别对象的激发,存在于对象模块中,当事件被激发时事件过程就自动执行。,对象事件过程的编写方法是进入,VBE,代码编辑窗口,进行代码编写。,8.3.4,事件,过程,在,Access,的程序设计中,需要从对象属性和事件方法两个方面进行设计,其中事件响应可以通过“宏”操作,也可以通过编写某个事件过程代码,由程序来完成指定操作。,事件过程用来识别对象的激发,存在于对象模块中,当事件被激发时事件过程就自动执行。,对象事件过程的编写方法是进入,VBE,代码编辑窗口,进行代码编写。,8.3.4,事件,过程,1.,代码编写方法,进入对象代码生成器的方法有以下,3,种:,在,窗体、报表的设计视图中,右击控件对象,选择,如,下图,所,示快捷菜单上的“事件生成器”命令,就会,出现代码,编辑器。,对象,的快捷菜单,“代码生成器”,窗口,8.3.4,事件,过程,1.,代码编写方法,如果,是对该对象的第一次操作,将出现,如,下,图所,示的“选择生成器”对话框。选择“代码生成器”后单击“确定”按钮。也会进入代码编辑器窗口。,8.3.4,事件,过程,1.,代码编写方法,选择控件对象,单击属性窗口的“事件”选项卡,选中某个事件并单击属性栏右边的省略号按钮,也可以打开“选择生成器”对话框,选择其中的“代码生成器”选项,单击“确定”按钮。,命令按钮,Command1,的,Click,事件过程名为“,Command1_Click,”。该子程序就是处理该事件的程序,称为事件过程,一般格式如下:,Private Sub,对象名,_,事件名,(,参数表,),(,事件过程代码,),End Sub,8.3.4,事件,过程,2.,案例,创建,如,图所,示的名为“计算球体体积”窗体,窗体上有文本框,text1,和,text2,,标签,label1,和,label2,,两个命令按钮,command1(,计算,),和,command2(,退出,),,窗体实现在,text1,中输入一个数据,单击命令按钮,command1,时,在,text2,里显示以其为半径的球体体积,。,命令按钮,command1(,计算,),的事件代码如下:,Private,Sub Command1_Click(),r=Text1.Value,v=(4/3)*3.14*r 3,Text2.Value=v,End Sub,8.4 VBA,编程语言,基础,8.4.1,数据类型,数据类型,类型关键字,类型符,存储空间,取值范围,整型,Integer,%,2,-32768,32767,长整型,Long,&,4,-2147483648,2147483647,单精度浮点型,Single,!,4,负数:,-3.402823E38,-1.401298E-45,正数:,1.401298E-45,3.402823E38,双精度浮点型,Double,#,8,负数:,-1.79769313486232E308,-4.94065645841247E-324,正数:,4.94065645841247E-324,1.79769313486232E308,8.4 VBA,编程语言,基础,8.4.1,数据类型,数据类型,类型关键字,类型符,存储空间,取值范围,货币型,Currency,8,-922337203685477.5808,922337203685477.5807,日期型,Date,无,8,100,年,1,月,1,日,9999,年,12,月,31,日,字符型,String,$,暂不定,0,字符,65400,个字符,字节型,Byte,无,1,0,255,逻辑型,Boolean,无,2,True,或,False,对象型,Object,无,4,任何引用的对象,变体型,Variant,无,暂不定,数字和双精度相同;文本和字符串相同,8.4.2,常量,1.,直接,常量,不同类型的直接常量有不同的表示方法,使用时应遵循相应的规则,常用的表示方法如下:,(1),数值型:十进制整数由数字,09,和正、负号组成,实数可采用小数表示形式或科学记数表示形式。科学计数法用,E,表示,10,的乘幂。如:,123,、,-489,、,2.34E-3,。,(2),字符型:字符串常量是一个用双引号括起来的字符序列。在字符串中,字母的大小写是有区别的。如:,abc,、,吉林财经,。,(3),布尔型:有,True,和,False,两个值。,(4),日期型:以字面上可被认作日期和时间的字符并用一对“,#,”括起来表示。如:,#2015-11-25#,。,8.4.2,常量,2.,符号常量,符号,常量是用标识符来表示某个常量,用户一旦定义了符号常量,在以后的程序中不能用赋值语句来改变它们的值,否则,在运行程序时将出现错误。,标识符,是用来表示用户所定义的常量、变量、过程、函数等程序要素的符号。在,VBA,中,标识符的命名必须是以字母或汉字开头,且只能由汉字、字母,(az,或,AZ),、数字,(09),或下划线,(_),所组成,其最大长度为,255,个字符。此外,不能使用,VBA,的关键字作为标识符,标识符不区分大小写。,在,VBA,中声明常量的语句格式如下:,Const,常量名,As,数据类型,|,类型符,=,表达式,常量名,As,数据类型,|,类型符,=,表达式,8.4.2,常量,3.,系统常量,系统,常量是,Access,系统内部包含有若干个启动时就建立的系统常量,有,True,、,False,、,Yes,、,No,、,On,、,Off,和,Null,等。编码时可以直接使用。,4,.,固有常量,VBA,提供的一些预定义的内部符号常量,通过前两个字母来指明定义该常量的对象库。来自,Access,的常量以“,ac,”开头,来自,VB,库的常量则以“,vb,”开头,来自,ADO,库的常量以“,ad,”开头。如:,acForm,、,adAddNew,、,vbCurrency,。,8.4.3,变量,变量,是指在程序运行过程期间其值可以变化的量。在,VBA,代码中声明和使用指定的变量来存储值、计算结果或操作数据库中的任意对象。一个变量有,3,个要素:变量名、数据类型和变量值。在,VBA,代码中,通过变量名来引用变量。,1.,变量的命名,变量命名时应遵循以下准则:,(1),变量名必须以英文字母开头,可以包含字母、数字或下划线字符“,_,”,(2),变量名不能包含空格、句点等字符。,(3),变量名的长度不能超过,255,个字符,且变量名不区分大小写。,(4),不能在某一范围内的相同层次中使用重复的变量名。,(5),变量的名字不能是,VBA,的关键字,如,For,、,To,、,Next,、,If,等。,如,a1,、,b_1,、,sa,等可以作为变量名,,1a,、,b.1,、,x-1,等不能作为变量名。,8.4.3,变量,2.,变量的,声明,声明,变量有两个作用,一是指定变量的数据类型,二是指定变量的作用范围。如果在程序中没有明确声明变量,,VBA,会默认将它声明为,Variant,数据类型,。,(,1),显式声明变量,显式声明变量要使用,Dim,语句,,Dim,语句的格式为:,Dim,变量名,As,数据类型,|,类型符,变量名,As,数据类型,|,类型符,8.4.3,变量,2.,变量的,声明,(2),隐式声明变量,隐,式变量是指没有直接定义,借助将一个值指定给变量名的方式建立的变量。当在变量名称后没有附加类型符来指明隐含变量的类型时,默认为变体类型,。,(,3),变量的强制声明,在,VBA,中可以强制要求在过程中使用变量前必须进行声明,方法如下:,方法一:在模块通用声明部分中包含一个,Option Explicit,语句,它要求在模块级别中强制对模块中所有使用的变量显式声明。,方法二:在,VBE,窗口中,选择“工具”菜单“选项”命令,打开“选项”对话框。在“编辑器”选项卡下,选择“代码设置”栏中的“要求变量声明”,复选框,。,8.4.4,数组,1.,定义一维数组,(1),格式,1,Dim (to )As,例如:,Dim y(1 to 5)As Integer,。,该语句声明数组变量为,y,,该数组元素从,y(1),y(5),共有,5,个元素。,(2),格式,2,Dim ()As,例如:,Dim x(5)As Integer,。,声明数组变量为,x,,该数组元素从,x(0),x(5),共有,6,个元素。,8.4.4,数组,2.,定义多维数组,格式:,Dim(,)As,例如,:,Dim b(1 to 3,3 to 5)as Integer,。,定义,二维数组,每个元素都为整型,行下标下界为,1,,上界为,3,,共,3,行,列下标下界为,3,,上界为,5,共,3,列,该数组共,3*3=9,个元素,各元素分别表示为:,b(1,3),、,b(1,4),、,b(1,5),、,b(2,3),、,b(2,4),、,b(2,5),、,b(3,3),、,b(3,4),、,b(3,5),。,例如:,Dim,C(3,1 to 3)as Integer,定义二维数组,每个元素都为整型,行下标下界为,0,,上界为,3,,共,4,行,列下标下界为,1,,上界为,3,共,3,列,该数组共,4*3=12,个元素。,8.4.5,函数与表达式,1,.,函数,在,VBA,中,除在模块创建中可以定义子过程与函数过程完成特定功能外,又提供了近百个内置的标准函数,可以方便地完成许多操作。,标准函数一般用于表达式中,有的能和语句一样使用。其使用形式如下:,函数,名,(,参数,1,,参数,2,,参数,3,,参数,4,,参数,5,),其中,函数名必不可少,函数的参数放在函数名后的圆括号中,参数可以是常量、变量或表达式,可以有一个或多个,少数函数为无参函数。,8.4.5,函数与表达式,2.,表达式,表达式是将常量、变量、字段名、控件属性和函数用运算符组合而成的式子,用于完成各种形式的运算和处理。在,VBA,中有,5,类运算符,使用这些运算符可以分别构成算术表达式、字符表达式、关系表达式、逻辑表达式和对象引用表达式。,8.5 VBA,程序流程控制语句,基本语句,顺序结构,分支结构,循环结构,1,2,3,4,8.5.1,基本语句,1.,程序语句的书写规则,VBA,程序是由语句组成的,程序语句有严格的书写规则。,(1),通常一行书写一条语句,如果语句较长,一行写不下时,可以在末尾使用续行符“,_,”将语句写在下一行。,(2),当将几条语句写在一行时,使用“,:,”分隔各语句。,(3),一条命令以,Enter,键作为结束标志。,(4),语句中的英文不区分大小写。,(5),建议采用缩进格式书写程序,让程序中同级别的语句在同一列对齐。使用缩进格式书写的程序能清楚地显示程序的结构,不仅帮助用户阅读程序,还有利于程序的维护。,8.5.1,基本语句,2.,注释语句,注释语句对,程序的维护有很大的好处。在,VBA,程序中,注释可以通过以下两种形式实现:,(1),格式,1,:,注释内容,(,可以在代码后面,),如,Dim x as Integer ,定义整型变量,x,(2),格式,2,:,Rem,注释内容,(,必须独立一行,),如:,Rem,定义整型变量,Dim x as Integer,8.5.1,基本语句,3.,赋值语句,赋值语句是为变量指定一个值或表达式。通常以等号,(=),连接。其使用格式为:,变量名值或表达式,如:,Dim x as Integer ,定义整型变量,x,x=100 ,给变量,x,赋值,100,8.5.1,基本语句,4.,输入输出语句,(1)InputBox(),函数,InputBox(),函数的作用是显示一个输入对话框,对话框中有一些提示信息及文本框,等待用户输入信息或按下按钮。在按钮事件发生后返回文本框中输入内容的值,返回值的类型为文本类型。,格式:,InputBox(,提示,标题,缺省值,x,坐标位置,y,坐标位置,),参数说明:,“提示”:唯一不能省略的选项,是字符串表达式,在对话框中作为提示信息显示。,“标题”:字符串表达式,在对话框的标题栏显示。可省略。,“缺省”:当无输入新值时,则该缺省值作为输入的内容。,“,x,坐标位置”和“,y,坐标位置”:确定对话框在屏幕上的位置。,注意,:,若,用户单击“取消”,该函数返回长度为零的字符串,(),8.5.1,基本语句,4.,输入输出语句,(2)MsgBox(),函数,MsgBox,(),过程的作用是使用其消息框输出信息。,MsgBox,函数格式:,MsgBox(,提示,按钮,标题,),MsgBox,过程格式:,MsgBox,提示,按钮,标题,参数说明:,“提示”:唯一不能省略的选项,用于在对话框上输出结果或提示性文本。,“按钮”:用来指定对话框中按钮的个数和形式,默认值为,0,,其值与按钮数目和图标样式的对应关系如,表所,示。,“标题”:参数用于指定该对话框的标题,若省略则用“,Microsoft Access,”作为标题。,注意:,MsgBox,函数与,MsgBox,过程的格式区别,前者有一对圆括号,后者没有圆括号。,8.5.1,基本语句,MsgBox(),函数中按钮与图标的参数值,分组,常数,值,buttons,参数的各组的设置值描述,按钮类型,与数目,vbOKOnly,0,只显示“确定”按钮,vbOKCancel,1,显示“确定”及“取消”按钮,vbAbortRetryIgnore,2,显示“终止”、“重试”及“忽略”按钮,vbYesNoCancel,3,显示“是”、“否”及“取消”按钮,vbYesNo,4,显示“是”及“否”按钮,vbRetryCancel,5,显示“重试”及“取消”按钮,图标样式,vbCritical,16,显示,Critical Message,图标,vbQuestion,32,显示,Warning Query,图标,vbExclamation,48,显示,Warning Message,图标,vbInformation,64,显示,Information Message,图标,按钮,默认值,vbDefaultButton1,0,第一个按钮是默认值,vbDefaultButton2,256,第二个按钮是默认值,vbDefaultButton3,512,第三个按钮是默认值,vbDefaultButton4,768,第四个按钮是默认值,8.5.1,基本语句,案例:,用,Inputbox(),和,Msgbox(),设计名为“欢迎登录”窗体。窗体的设计视图,如,下图,所,示,单击“登录”按钮,运行窗体,界面所,示。,欢迎,登录窗体设计视图,在,command1(,输入用户信息,),按钮输入事件代码如下:,Private Sub Command1_Click(),xm=InputBox(,请输入姓名,),MsgBox,欢迎,&xm&,使用本系统,End Sub,运行窗体界面,8.5.2,顺序结构,顺序,结构是最简单的一种结构,计算机按照语句的排列顺序依次执行每一条语句。数据结构的语句主要是赋值语句和输入输出语句。,例,:,在,数据库中,建立一个能够计算圆面积的模块,。,在,代码窗口输入程序代码如下,。,Sub,模块,1(),Dim r As Single ,定义半径,Dim square As Single ,定义存放面积的字符,Const PI=3.1416 ,设置常数,PI,r=InputBox(,请输入半径:,),为,r,赋值,square=PI*r*r ,面积计算公式,MsgBox,半径为,&r&,圆面积是:,&square ,以对话框形式显示结果,End Sub,8.5.3,分支结构,1,.,单分支结构,单分支结构有两种格式。,格式:,(1),单行结构的格式,If,条件表达式,Then,语句块,(2),块结构的格式,If,条件表达式,Then,语句块,End If,功能:若条件值为,True,,则执行,Then,后面的语句组,否则执行本语句的下一个语句。其执行过程如,图所,示。,8.5.3,分支结构,例:,设计,“判断正数”窗体,判断一个数是否是正数。,设计窗体界面如,图所,示。,文本框为,text1,,两个命令按钮分别为,command1,和,command2,。,command1(,“判断”,),按钮的事件代码如下:,Private Sub Command1_Click(),Dim a As Single,a=Text1.Value,If a 0 Then MsgBox a&,是正数,End,Sub,8.5.3,分支结构,2.,双分支结构,格式,:,If,Then,Else,End If,功能:,若,为真时,执行,,之后转向执行,End If,后的语句;若条件表达式为假时,则执行,Else,语句后的,。,8.5.3,分支结构,例,:,编写,一个窗体“计算运费”,用于计算顺丰快递的运费。顺丰快递的收费规定是:重量小于等于,1,公斤时,收费,22,元。超过,1,公斤时,超出部分按每公斤,8,元收费。要求根据输入的任何重量,计算出相应的运费。窗体的界面如,图所,示。两个文本框分别为,text1,和,text2,,命令按钮分别为,command1(,计算,),和,command2(,退出,),。,command1(,“计算”,),按钮的事件代码如下:,Private Sub Command1_Click(),Dim zl As Single,Dim yf As Single,zl=Text1.Value,If z1 1 Then,yf=22,Else,yf=(zl-1)*8+22,End If,Text2.Value=yf,End Sub,8.5.3,分支结构,例,:,使用,窗体的计时器触发事件,Timer,,在窗体的标签上实现自动计秒功能,(,从,0,开始,),。在窗体打开时开始计秒,单击其上按钮,则停止计秒,再单击按钮,继续计秒。,按钮,(command1),单击事件代码如下:,Private Sub Command1_Click(),If Me.TimerInterval=0 Then,Me.TimerInterval=1000,Label1.Caption=0,Command1.Caption=,停止,Else,Me.TimerInterval=0,Command1.Caption=,开始,End If,End,Sub,窗体打开事件,(Open),代码如下:,Private Sub Form_Open(Cancel As Integer),Label1.Caption=0,Me.TimerInterval=0,Command1.Caption=,开始,End,Sub,窗体计时器触发,(Timer),事件代码如下:,Private Sub Form_Timer(),Label1.Caption=Label1.Caption+1,End,Sub,8.5.3,分支结构,3.,多分支结构,格式:,If Then,ElseIf Then,ElseIf Then,Else,End If,功能:,若,为真,则执行,,之后转向执行,End if,后的语句;否则,再判断,,为真时,执行,,依次类推,当所有的条件都不满足时,执行,。,8.5.3,分支结构,例,:,设计,一个窗体“成绩评定”,设计窗口如图,8-33,所示。在文本框,(text1),中输入学生的成绩,当成绩,=90,分时,输出“优秀”;当成绩大于等于,80,且小于,90,时,输出“良好”,当成绩大于等于,60,且小于,80,时,输出“合格”,当成绩小于,60,时,输出“不合格”。单击“评定”按钮,输出评定结果,输出评定的结果用,msgbox(),消息框,输出,。,Command1(,评定,),的事件代码如下:,Dim result As Integer,result=Text1.Value,If result=90 Then,MsgBox,优秀,ElseIf result=80 Then,MsgBox,良好,ElseIf result=60 Then,MsgBox,合格,Else,MsgBox,不合格,End If,8.5.3,分支结构,4.Select Case,语句,格式:,Select Case,Case,Case,Case Else,End Select,功能:首先计算条件表达式的值,然后将表达式的值依次与各,Case,后列表中的值一一进行比较,若与其中某个值相同,则执行该列表后的相应语句块部分,然后执行,End Select,其后的语句;若出现与表列中的所有值均不相等的情况,则执行,Case Else,的语句块部分,然后退出,Select Case,结构,执行其后的语句,否则不执行任何结构内的语句,整个,Select Case,结构结束,再执行其后的语句。,8.5.3,分支结构,4.Select Case,语句,说明:,(1),表达式可以是数值表达式或字符串表达式。,(2),表达式列表可以有如下,3,种格式:,值,1,值,2,:此种格式在表达式列表中有一个或多个值与表达式的值进行比较,多个取值之间用逗号分隔。如果表达式的值与这些值中的一个相等,即可执行此表达式列表后相应的语句块。,值,1 To,值,2,:此种格式在表达式列表中提供了一个取值范围,可以将此范围内的所有取值与表达式的值进行比较。如果表达式的值与此范围内的某个值相等,则可执行此表达式列表后的相应语句块。,Is,关系运算符值,1,值,2,:此种格式将表达式的值与关系运算符后的值进行关系比较,检验是否满足该关系运算符。若满足,则执行此表达式列表后的相应语句块。,8.5.3,分支结构,例,:,设计,一个窗体“成绩评定”,设计窗口如图,8-33,所示。在文本框,(text1),中输入学生的成绩,当成绩,=90,分时,输出“优秀”;当成绩大于等于,80,且小于,90,时,输出“良好”,当成绩大于等于,60,且小于,80,时,输出“合格”,当成绩小于,60,时,输出“不合格”。单击“评定”按钮,输出评定结果,输出评定的结果用,msgbox(),消息框,输出,。,Command1(,评定,),的事件代码如下:,Private Sub Command1_Click(),Dim result As Integer,result=Text1.Value,Select Case result,Case Is=90,MsgBox,优秀,Case Is=80,MsgBox,良好,Case Is=60,MsgBox,合格,Case Else,MsgBox,不合格,End Select,End,Sub,8.5.4,循环结构,在,解决一些实际问题时,往往需要重复某些相同的操作,即对某一语句或语句序列执行多次,解决这类问题要用到循环结构。,VBA,提供了多种循环结构语句。,1.For,Next,循环语句,格式,:,For,循环变量,=,初值,To,终值,Step,步长,循环体,条件语句序列,Exit For,结束条件语句序列,Next,循环变量,功能,:,For,Next,循环语句能够重复执行程序代码区域特定次数。,8.5.4,循环结构,执行步骤:,(1),循环变量取初值;,(2),循环变量与终值比较,确定循环是否进行:,步长,0,时,若循环变量值,终值,循环结束,退出循环。,步长,=0,时,若循环变量值,终值,一次也不执行循环。,步长,=,终值,循环继续,执行步骤;若循环变量值,终值,循环结束,退出循环。,执行循环体。,循环变量值增加步长,(,循环变量,=,循环变量,+,步长,),,程序跳转至步骤,(2),。,8.5.4,循环结构,例,:,设计,一个窗体“求累加和”,,实现,给定初值和终值后,计算出它们之间数累加的和,运行结果如图,(1),设计视图内设计窗体控件,两个文本框分别为,text1,和,text2,,命令按钮为,command1,。,(2),命令按钮的,command1,事件代码如下:,Private Sub Command0_Click(),j=Text1.Value,x=Text2.Value,s=0,For i=j To x,s=s+i,Next i,MsgBox,从,&j&,到,&x&,累加和为,&s,End Sub,8.5.4,循环结构,例,:,创建一个窗体,在文本框中输入一个数,判断这个数是否为,素数,命令按钮,command1,的事件代码如下:,Private Sub Command1_Click(),x=Text1.Value,For i=2 To x-1,If x Mod i=0 Then,f=1,Exit For,End If,Next i,If f=1 Then,MsgBox x&,不是素数,Else,MsgBox x&,是素数,End If,End Sub,8.5.4,循环结构,2.Do,Loop,循环语句,(1)Do While,Loop,语句,格式:,Do While,条件表达式,循环体,Loop,功能:语句执行时,若条件表达式的值为真,则执行,Do,和,Loop,之间的语句组,直到条件表达式的值为假则结束循环。,8.5.4,循环结构,例,:,建立,窗体,,单击命令按钮,command1,,完成,1+2+3+,+,n,的累加计算。,命令按钮,Command1,的事件代码如下:,Private Sub Command1_Click(),i=0,s=0,Do While i 100,s=s+i,i=i+1,Loop,MsgBox,累加和为,&s&,循环变量的终值为,&i,End Sub,8.5.4,循环结构,2.Do,Loop,循环语句,(3)Do,Loop While,语句,格式,:,Do,循环体,Loop,While,条件,表达式,功能:语句执行时,首先执行一次循环体语句,执行到,Loop,时判断条件表达式的值,如果为真,继续执行,Do,和,Loop,之间的语句组,否则,结束循环。,8.5.4,循环结构,例,:,用,Do,LoopWhile,语句建立,窗体,,单击命令按钮,command1,,完成,1+2+3+,+,n,的累加计算。,命令按钮,command1,的事件代码如下:,Private Sub Command1_Click(),i=0,s=0,Do,s=s+i,i=i+1,Loop While i 100,MsgBox,累加和为,&s&,循环变量的终值为,&i,End Sub,8.5.4,循环结构,3.While,Wend,语句,For,Next,循环适合于解决循环次数事先能够确定的问题。对于只知道控制条件,但不能预先确定需要执行多少次循
展开阅读全文