access第8章VBA程序设计ppt课件(全).pptx
第第8 8章章 模块与模块与VBAVBA编程编程本章内容8.1 模块概述模块概述8.2 VBA编程环境编程环境8.3 面向对象程序设计面向对象程序设计8.4 VBA编程语言基础编程语言基础8.5 VBA程序流程控制语句程序流程控制语句8.6 VBA过程调用与参数传递过程调用与参数传递8.7 VBA程序调试程序调试8.1 8.1 模模 块块 概概 述述模块是Access数据库中的一个数据库对象,它以VBA(VisualBasicforApplication)语言为基础编写。8.1.1 模块的类型类模块可以包含新对象的定义的模块。一个类的每个实例都新建一个对象。窗体模块和报表模块都是类模块。Access有两种类型的模块:类模块和标准模块。标准模块简称“模块”。大多数模块都是标准模块,其中包含的代码和特定的数据库对象并无关联,当数据库中对象被移动时,模块还在原数据库中不动。8.1.2 将宏转换为模块 转换转换窗体或报表中的宏窗体或报表中的宏将窗体或报表引用的任意宏转换为VBA代码,并向窗体或报表的类模块中添加该代码。该类模块将成为窗体或报表的组成部分,并且如果窗体或报表被移动或复制时,它也随之改变。例8-1将“打开学生表”窗体中的宏转换为模块。转换全局宏转换全局宏例8-2 将“打开学生表”全局宏转换成VBA代码。操作步骤如下:8.1.3 模块的结构模块模块声明部分声明部分可以在这部分定义变量、常量、自定义类型和外部过程。在模块中,声明部分与过程部分是分割开来的,声明部分中设定的常量和变量是全局性的,可以被模块中的所有过程调用。过程过程定义部分定义部分这是一种自动执行的过程,用来对用户或程序代码启动的事件或系统触发的事件做出响应。类模块中的过程大部分是事件过程,也可以包含仅供本模块调用的过程和函数。标准模块中的过程和函数均为通用过程,可以供本模块或其他模块中的语句调用。8.2 VBA8.2 VBA编程环境编程环境在Access中,VBA程序是使用VB编辑器(VisualBasicEditor,VBE)编写的。VBE是编辑、编译、运行、调试VBA代码的集成环境。8.2.1 打开VBE窗口启动VBE的方法:在数据库中,单击“数据库工具”选项卡“宏”选项组中的VisualBasic按钮。在数据库中,单击“创建”选项卡“宏与代码”选项组中的VisualBasic按钮。创建新的标准模块。单击“创建”选项卡“宏与代码”选项组中的“模块”按钮,就在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=falseVisible用于设置对象是否可见,如果值为False为不会显示Command1.visible=falseFontbold设置字体是否加粗,如果为True字体加粗Label1.fontbold=trueFontname设置字体名Text1.fontname=”隶书”Fontsize字体的大小值Label1.fontsize=20Forecolor标题的颜色Text1.forecolor=RGB(0,0,255)TabIndex在窗体中Tab键次序中的位置Left控件左上角距窗体左边界的距离Label1.left=20Top控件左上角距窗体上边界的距离Text1.top=10Width控件的宽度Label1.width=20Height控件的高度Label1.width=30Value文本框中的内容Text1.value=100text设置文本框中显示的文本(要求文本框先获得焦点)Text1.text=1008.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窗体上键盘按下键时发生事件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”。该子程序就是处理该事件的程序,称为事件过程,一般格式如下:PrivateSub对象名_事件名(参数表)(事件过程代码)EndSub8.3.4 事件过程2.案例案例创建如图所示的名为“计算球体体积”窗体,窗体上有文本框text1和text2,标签label1和label2,两个命令按钮command1(计算)和command2(退出),窗体实现在text1中输入一个数据,单击命令按钮command1时,在text2里显示以其为半径的球体体积。命令按钮command1(计算)的事件代码如下:PrivateSubCommand1_Click()r=Text1.Valuev=(4/3)*3.14*r3Text2.Value=vEndSub8.4 VBA8.4 VBA编程语言编程语言基础基础8.4.1 数据类型数据类型数据类型类型关键字类型符存储空间取值范围整型Integer%2-3276832767长整型Long&4-21474836482147483647单精度浮点型Single!4负数:-3.402823E38-1.401298E-45正数:1.401298E-453.402823E38双精度浮点型Double#8负数:-1.79769313486232E308-4.94065645841247E-324正数:4.94065645841247E-3241.79769313486232E3088.4 VBA8.4 VBA编程语言编程语言基础基础8.4.1 数据类型数据类型数据类型类型关键字类型符存储空间取值范围货币型Currency8-922337203685477.5808922337203685477.5807日期型Date无8100年1月1日9999年12月31日字符型String$暂不定0字符65400个字符字节型Byte无10255逻辑型Boolean无2True或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中可以强制要求在过程中使用变量前必须进行声明,方法如下:方法一:在模块通用声明部分中包含一个OptionExplicit语句,它要求在模块级别中强制对模块中所有使用的变量显式声明。方法二:在VBE窗口中,选择“工具”菜单“选项”命令,打开“选项”对话框。在“编辑器”选项卡下,选择“代码设置”栏中的“要求变量声明”复选框。8.4.4数组1.定义一维数组定义一维数组(1)格式1Dim(to)As例如:Dimy(1to5)AsInteger。该语句声明数组变量为y,该数组元素从y(1)y(5)共有5个元素。(2)格式2Dim()As例如:Dimx(5)AsInteger。声明数组变量为x,该数组元素从x(0)x(5)共有6个元素。8.4.4数组2.定义多维数组定义多维数组格式:Dim(,)As例如:Dimb(1to3,3to5)asInteger。定义二维数组,每个元素都为整型,行下标下界为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)。例如:DimC(3,1to3)asInteger定义二维数组,每个元素都为整型,行下标下界为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 VBA8.5 VBA程序流程控制语句程序流程控制语句基本语句基本语句顺序结构顺序结构分支结构分支结构循环结构12348.5.1 基本语句1.程序语句的书写规则程序语句的书写规则VBA程序是由语句组成的,程序语句有严格的书写规则。(1)通常一行书写一条语句,如果语句较长,一行写不下时,可以在末尾使用续行符“_”将语句写在下一行。(2)当将几条语句写在一行时,使用“:”分隔各语句。(3)一条命令以Enter键作为结束标志。(4)语句中的英文不区分大小写。(5)建议采用缩进格式书写程序,让程序中同级别的语句在同一列对齐。使用缩进格式书写的程序能清楚地显示程序的结构,不仅帮助用户阅读程序,还有利于程序的维护。8.5.1 基本语句2.注释语句注释语句注释语句对程序的维护有很大的好处。在VBA程序中,注释可以通过以下两种形式实现:(1)格式1:注释内容(可以在代码后面)如DimxasInteger定义整型变量x(2)格式2:Rem注释内容(必须独立一行)如:Rem定义整型变量DimxasInteger8.5.1 基本语句3.赋值语句赋值语句赋值语句是为变量指定一个值或表达式。通常以等号(=)连接。其使用格式为:变量名值或表达式如:DimxasInteger定义整型变量xx=100给变量x赋值1008.5.1 基本语句4.输入输出语句输入输出语句(1)InputBox()函数InputBox()函数的作用是显示一个输入对话框,对话框中有一些提示信息及文本框,等待用户输入信息或按下按钮。在按钮事件发生后返回文本框中输入内容的值,返回值的类型为文本类型。格式:InputBox(提示,标题,缺省值,x坐标位置,y坐标位置)参数说明:“提示”:唯一不能省略的选项,是字符串表达式,在对话框中作为提示信息显示。“标题”:字符串表达式,在对话框的标题栏显示。可省略。“缺省”:当无输入新值时,则该缺省值作为输入的内容。“x坐标位置”和“y坐标位置”:确定对话框在屏幕上的位置。注意:若用户单击“取消”,该函数返回长度为零的字符串()8.5.1 基本语句4.输入输出语句输入输出语句(2)MsgBox()函数MsgBox()过程的作用是使用其消息框输出信息。MsgBox函数格式:MsgBox(提示,按钮,标题)MsgBox过程格式:MsgBox提示,按钮,标题参数说明:“提示”:唯一不能省略的选项,用于在对话框上输出结果或提示性文本。“按钮”:用来指定对话框中按钮的个数和形式,默认值为0,其值与按钮数目和图标样式的对应关系如表所示。“标题”:参数用于指定该对话框的标题,若省略则用“MicrosoftAccess”作为标题。注意:MsgBox函数与MsgBox过程的格式区别,前者有一对圆括号,后者没有圆括号。8.5.1 基本语句MsgBox()函数中按钮与图标的参数值分组常数值buttons参数的各组的设置值描述按钮类型与数目vbOKOnly0只显示“确定”按钮vbOKCancel1显示“确定”及“取消”按钮vbAbortRetryIgnore2显示“终止”、“重试”及“忽略”按钮vbYesNoCancel3显示“是”、“否”及“取消”按钮vbYesNo4显示“是”及“否”按钮vbRetryCancel5显示“重试”及“取消”按钮图标样式vbCritical16显示CriticalMessage图标vbQuestion32显示WarningQuery图标vbExclamation48显示WarningMessage图标vbInformation64显示InformationMessage图标按钮默认值vbDefaultButton10第一个按钮是默认值vbDefaultButton2256第二个按钮是默认值vbDefaultButton3512第三个按钮是默认值vbDefaultButton4768第四个按钮是默认值8.5.1 基本语句案例:用Inputbox()和Msgbox()设计名为“欢迎登录”窗体。窗体的设计视图如下图所示,单击“登录”按钮,运行窗体界面所示。欢迎登录窗体设计视图在command1(输入用户信息)按钮输入事件代码如下:PrivateSubCommand1_Click()xm=InputBox(请输入姓名)MsgBox欢迎&xm&使用本系统EndSub运行窗体界面8.5.2 顺序结构顺序结构是最简单的一种结构,计算机按照语句的排列顺序依次执行每一条语句。数据结构的语句主要是赋值语句和输入输出语句。例:在数据库中,建立一个能够计算圆面积的模块。在代码窗口输入程序代码如下。Sub模块1()DimrAsSingle定义半径DimsquareAsSingle定义存放面积的字符ConstPI=3.1416设置常数PIr=InputBox(请输入半径:)为r赋值square=PI*r*r面积计算公式MsgBox半径为&r&圆面积是:&square以对话框形式显示结果EndSub8.5.3 分支结构1.单分支结构单分支结构单分支结构有两种格式。格式:(1)单行结构的格式If条件表达式Then语句块(2)块结构的格式If条件表达式Then语句块EndIf功能:若条件值为True,则执行Then后面的语句组,否则执行本语句的下一个语句。其执行过程如图所示。8.5.3 分支结构例:设计“判断正数”窗体,判断一个数是否是正数。设计窗体界面如图所示。文本框为text1,两个命令按钮分别为command1和command2。command1(“判断”)按钮的事件代码如下:PrivateSubCommand1_Click()DimaAsSinglea=Text1.ValueIfa0ThenMsgBoxa&是正数EndSub8.5.3 分支结构2.双分支结构双分支结构格式格式:IfThenElseEndIf功能:功能:若为真时,执行,之后转向执行EndIf后的语句;若条件表达式为假时,则执行Else语句后的。8.5.3 分支结构例:编写一个窗体“计算运费”,用于计算顺丰快递的运费。顺丰快递的收费规定是:重量小于等于1公斤时,收费22元。超过1公斤时,超出部分按每公斤8元收费。要求根据输入的任何重量,计算出相应的运费。窗体的界面如图所示。两个文本框分别为text1和text2,命令按钮分别为command1(计算)和command2(退出)。command1(“计算”)按钮的事件代码如下:PrivateSubCommand1_Click()DimzlAsSingleDimyfAsSinglezl=Text1.ValueIfz11Thenyf=22Elseyf=(zl-1)*8+22EndIfText2.Value=yfEndSub8.5.3 分支结构例:使用窗体的计时器触发事件Timer,在窗体的标签上实现自动计秒功能(从0开始)。在窗体打开时开始计秒,单击其上按钮,则停止计秒,再单击按钮,继续计秒。按钮(command1)单击事件代码如下:PrivateSubCommand1_Click()IfMe.TimerInterval=0ThenMe.TimerInterval=1000Label1.Caption=0Command1.Caption=停止ElseMe.TimerInterval=0Command1.Caption=开始EndIfEndSub窗体打开事件(Open)代码如下:PrivateSubForm_Open(CancelAsInteger)Label1.Caption=0Me.TimerInterval=0Command1.Caption=开始EndSub窗体计时器触发(Timer)事件代码如下:PrivateSubForm_Timer()Label1.Caption=Label1.Caption+1EndSub8.5.3 分支结构3.多分支结构多分支结构格式:IfThenElseIfThenElseIfThenElseEndIf功能:若为真,则执行,之后转向执行Endif后的语句;否则,再判断,为真时,执行,依次类推,当所有的条件都不满足时,执行。8.5.3 分支结构例:设计一个窗体“成绩评定”,设计窗口如图8-33所示。在文本框(text1)中输入学生的成绩,当成绩=90分时,输出“优秀”;当成绩大于等于80且小于90时,输出“良好”,当成绩大于等于60且小于80时,输出“合格”,当成绩小于60时,输出“不合格”。单击“评定”按钮,输出评定结果,输出评定的结果用msgbox()消息框输出。Command1(评定)的事件代码如下:DimresultAsIntegerresult=Text1.ValueIfresult=90ThenMsgBox优秀ElseIfresult=80ThenMsgBox良好ElseIfresult=60ThenMsgBox合格ElseMsgBox不合格EndIf8.5.3 分支结构4.Select Case语句语句格式:SelectCaseCaseCaseCaseElseEndSelect功能:首先计算条件表达式的值,然后将表达式的值依次与各Case后列表中的值一一进行比较,若与其中某个值相同,则执行该列表后的相应语句块部分,然后执行EndSelect其后的语句;若出现与表列中的所有值均不相等的情况,则执行CaseElse的语句块部分,然后退出SelectCase结构,执行其后的语句,否则不执行任何结构内的语句,整个SelectCase结构结束,再执行其后的语句。8.5.3 分支结构4.Select Case语句语句说明:(1)表达式可以是数值表达式或字符串表达式。(2)表达式列表可以有如下3种格式:值1,值2:此种格式在表达式列表中有一个或多个值与表达式的值进行比较,多个取值之间用逗号分隔。如果表达式的值与这些值中的一个相等,即可执行此表达式列表后相应的语句块。值1To值2:此种格式在表达式列表中提供了一个取值范围,可以将此范围内的所有取值与表达式的值进行比较。如果表达式的值与此范围内的某个值相等,则可执行此表达式列表后的相应语句块。Is关系运算符值1,值2:此种格式将表达式的值与关系运算符后的值进行关系比较,检验是否满足该关系运算符。若满足,则执行此表达式列表后的相应语句块。8.5.3 分支结构例:设计一个窗体“成绩评定”,设计窗口如图8-33所示。在文本框(text1)中输入学生的成绩,当成绩=90分时,输出“优秀”;当成绩大于等于80且小于90时,输出“良好”,当成绩大于等于60且小于80时,输出“合格”,当成绩小于60时,输出“不合格”。单击“评定”按钮,输出评定结果,输出评定的结果用msgbox()消息框输出。Command1(评定)的事件代码如下:PrivateSubCommand1_Click()DimresultAsIntegerresult=Text1.ValueSelectCaseresultCaseIs=90MsgBox优秀CaseIs=80MsgBox良好CaseIs=60MsgBox合格CaseElseMsgBox不合格EndSelectEndSub8.5.4循环结构在解决一些实际问题时,往往需要重复某些相同的操作,即对某一语句或语句序列执行多次,解决这类问题要用到循环结构。VBA提供了多种循环结构语句。1.ForNext循环语句循环语句格式:For循环变量=初值To终值Step步长循环体条件语句序列ExitFor结束条件语句序列Next循环变量功能:ForNext循环语句能够重复执行程序代码区域特定次数。8.5.4循环结构执行步骤:(1)循环变量取初值;(2)循环变量与终值比较,确定循环是否进行:u步长0时,若循环变量值终值,循环结束,退出循环。u步长=0时,若循环变量值终值,一次也不执行循环。u步长=终值,循环继续,执行步骤;若循环变量值终值,循环结束,退出循环。u执行循环体。u循环变量值增加步长(循环变量=循环变量+步长),程序跳转至步骤(2)。8.5.4循环结构例:设计一个窗体“求累加和”,实现给定初值和终值后,计算出它们之间数累加的和,运行结果如图(1)设计视图内设计窗体控件,两个文本框分别为text1和text2,命令按钮为command1。(2)命令按钮的command1事件代码如下:PrivateSubCommand0_Click()j=Text1.Valuex=Text2.Values=0Fori=jToxs=s+iNextiMsgBox从&j&到&x&累加和为&sEndSub8.5.4循环结构例:创建一个窗体,在文本框中输入一个数,判断这个数是否为素数命令按钮command1的事件代码如下:PrivateSubCommand1_Click()x=Text1.ValueFori=2Tox-1IfxModi=0Thenf=1ExitForEndIfNextiIff=1ThenMsgBoxx&不是素数ElseMsgBoxx&是素数EndIfEndSub8.5.4循环结构2.DoLoop循环语句循环语句(1)DoWhileLoop语句格式:Do While 条件表达式条件表达式 循环体循环体Loop功能:语句执行时,若条件表达式的值为真,则执行Do和Loop之间的语句组,直到条件表达式的值为假则结束循环。8.5.4循环结构例:建立窗体,单击命令按钮command1,完成1+2+3+n的累加计算。命令按钮Command1的事件代码如下:PrivateSubCommand1_Click()i=0s=0DoWhilei100s=s+ii=i+1LoopMsgBox累加和为&s&循环变量的终值为&iEndSub8.5.4循环结构2.DoLoop循环语句循环语句(3)DoLoopWhile语句格式:Do 循环体循环体Loop While 条件条件表达式表达式功能:语句执行时,首先执行一次循环体语句,执行到Loop时判断条件表达式的值,如果为真,继续执行Do和Loop之间的语句组,否则,结束循环。8.5.4循环结构例:用DoLoopWhile语句建立窗体,单击命令按钮command1,完成1+2+3+n的累加计算。命令按钮command1的事件代码如下:PrivateSubCommand1_Click()i=0s=0Dos=s+ii=i+1LoopWhilei100MsgBox累加和为&s&循环变量的终值为&iEndSub8.5.4循环结构3.WhileWend语句语句ForNext循环适合于解决循环次数事先能够确定的问题。对于只知道控制条件,但不能预先确定需要执行多少次循环体的情况,我们可以使用While循环。格式:功能:计算条件表达式的值并判断,如果为假,则退出循环,执行下面的语句。如果为真,继续执行循环体语句,然后再判断条件表达式的值,重复执行该过程。While 条件条件 循环体循环体 Wend8.5.4循环结构例:建立窗体,单击命令按钮command1,完成1+2+3+n的累加计算命令按钮Command1的事件代码如下:PrivateSubCommand0_Click()i=0s=0Whileia(j)Thent=a(i):a(i)=a(j):a(j)=tEndIfNextjNextiFori=1To10Text2=Text2&a(i)&NextiEndSub