1 / 65

第 7 章 模块与 VBA

第 7 章 模块与 VBA. 概述. 本章要涉及到编程。了解编程基础知识,掌握程序的三种结构在 VBA 中的实现,能够读懂程序并写(填)出程序片段 模块基本概念 创建模块 VBA 设计基础 VBA 流程控制 过程调用和参数传递 程序错误处理和调试. 7.1 模块基本概念. 7.1.1 模块的概念 模块是 Access 数据库中一个重要的对象,用 VBA 语言编写,以函数过程( Function )和子过程为单元的集合方式存储。利用模块可以创建自定义函数、子过程和事件过程等,以便实现复杂的功能。 在 ACCESS 中,模块分为标准模块和类模块两种类型。. 创建模块.

lorene
Download Presentation

第 7 章 模块与 VBA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章模块与VBA

  2. 概述 • 本章要涉及到编程。了解编程基础知识,掌握程序的三种结构在VBA中的实现,能够读懂程序并写(填)出程序片段 • 模块基本概念 • 创建模块 • VBA设计基础 • VBA流程控制 • 过程调用和参数传递 • 程序错误处理和调试

  3. 7.1模块基本概念 • 7.1.1 模块的概念 • 模块是Access数据库中一个重要的对象,用VBA语言编写,以函数过程(Function)和子过程为单元的集合方式存储。利用模块可以创建自定义函数、子过程和事件过程等,以便实现复杂的功能。 • 在ACCESS中,模块分为标准模块和类模块两种类型。

  4. 创建模块 • 模块以过程为单元组成,一个模块包含一个声明区域和若干个过程Sub、函数Function。 • 过程创建一般格式[public|private][static] 过程名(形参表)语句Exit subEnd sub • 调用过程Call 过程名(参数表)

  5. 7.1 【添加过程】对话框 • Function函数[public|private][static] 函数名(形参表)语句End Function • 例题7.1编写一个求圆面积的函数Area()对于该例题中出现的语句只要大体了解即可。

  6. 【例7.1】编写一个计算圆面积的函数过程Area()。【例7.1】编写一个计算圆面积的函数过程Area()。 Public Function Area(r as Single) as Single If r<=0 Then MsgBox "圆的半径必须大于零",vbCritical,"警告" Area=0 '半径为零,设置函数返回值为0 Exit Function '结束函数过程运行 End If Area=3.14*r*r End Function 函数过程的调用形式: 函数过程名([<实参>]) 函数过程不能使用CALL来调用执行,需要直接引用函数名并加括号来辨别,可以在查询、宏等中调用使用,函数过程的返回值可以直接赋给某个变量。 例如,假如在某个窗体中要计算半径为8的圆面积,并用变量S保存圆面积值,可调用上面创建的Area()函数过程,调用命令格式为:s=Area(8)。

  7. 7.2 VBA编程基础 • VBA是一种计算机语言。 • 对象在Access中指表、查询、窗体、报表、页、宏、模块、DoCmd等 • 认识VBE窗口

  8. 标准工具栏 对象组合框 事件组合框 工程窗口 代码窗口 代码编辑区 属性窗口 立即窗口 7.2.1 VBA编程环境

  9. VBA语句书写原则一行一句,如果特别长可以用_(下划线)隔开如果节省空间,可以用: (冒号)将多条语句写在同行VBE可以自动识别语法错误,有颜色提示。 • 注释,给程序员看,对机器无用‘(单引号后面就是注释内容)rem后面是注释内容

  10. 7.2.2数据类型 • Access中提供了若干数据类型,如下: • 整数Integer • 长整数Long • 单精度数Single • 双精度数Double • 货币Currency • 字符串String • 布尔型Boolean • 日期型Date • 变体类型Variant • 用户自定义类型

  11. 数据库对象 • Datebase • Connection • Form • Report • Control • QueryDef • TableDef • Command • RecorderSet

  12. 常量、变量、数组 • 常量:不能改变的量。 • 直接常量 • 符号常量Const定义的常量 • 内部常量,Access定义的常量 • 系统常量,True、False、Null、Yes、No、On、Off

  13. 变量 • 变量,可以改变的量。 • 变量命名包含字母、数字、下划线、汉字,且不以数字、下划线开头,不区分大小写,不能与系统关键字冲突。 • 声明变量:在VBA中可以隐式声明显式声明,Dim • 变量作用域局部变量、模块变量、全局变量 • 数据库对象变量的引用方法窗体名称!控件名称.属性名称注意叹号和点号的使用

  14. Function SafeSqr(num) • Val_Temp=Abs(num) • SafeSqr=Sqr(Val_Tem) • End Function • 例如: • intX1%=1243 '定义intX1为一个整型变量 • DouX2#=45665.456 '定义douX2为一个双精度变量 • StrX3$="Access" '定义strX3为一个字符串变量

  15. 声明变量的一般方法是用Dim...As[DataType]结构,其中As指定变量数据类型。声明变量的一般方法是用Dim...As[DataType]结构,其中As指定变量数据类型。 • Dim语句使用格式为:Dim 变量名As [数据类型] • 如果不使用“数据类型”可选项,默认定义的变量为Variant数据类型。可以使用Dim语句在一行中声明多个变量。 • 例如: • Dim strX As String '定义了1个字符型变量strX • Dim intX As Integer,strZ As String '定义了1个整型变量intX和1个字符型变量strZ • Dim x '定义了1个变体(Variant)类型变量x • Dim I,j,k As integer '只有k是integer型,I与j都是Variant型

  16. 表7. 1种变量的使用规则与作用域

  17. Access建立的数据库对象及其属性,均可被看成是VBA程序代码中的变量及其指定的值来加以引用,与普通变量不同的是要使用规定的引用格式。Access建立的数据库对象及其属性,均可被看成是VBA程序代码中的变量及其指定的值来加以引用,与普通变量不同的是要使用规定的引用格式。 例如,窗体和报表对象的引用格式为: Forms(或Reports)窗体(或报表)名称!控件名称[.属性名称] 关键字Forms或Reports分别指示窗体或报表对象类;感叹号(!)为分隔符,用于分隔开父子对象;“属性名称”为可选项,若省略,则默认为控件的基本属性Value。 注意:如果对象名称中含有空格或标点符号,引用时要用方括号把对象名称括起来。 例如,要在代码中引用窗体(Myform1)中名为Txtxh的文本框控件,可使用以下语句: Forms!Myform1!Txtxh="3020503323“ 若在本窗体的模块中引用,可以使用Me代替Forms!Myform1。语句变为: Me!Txtxh="3020503323" “Forms!Myform1!Txtxh”在程序语句中的作用相当于变量,但它指示的是某个Access对象。当需要多次引用对象时,可以先声明一个Control(控件)数据类型的对象变量,然后使用Set关键字建立对象变量指向的控件对象。语句使用格式如下: Dim Txtxhbl As Control '定义对象变量,数据类型为Control(控件)数据类型 Set Txtxhbl=Forms!Myform1!Txtxh '为对象变量指定窗体控件对象 以后要引用控件对象,可转为引用对象变量。 例如: Txtxhbl="3020503323" 等同于: Forms!Myform1!Txtxh="3020503323"

  18. 数组 • 数组是相同类型变量的集合 • 定义数组Dim 数组名(下界 to 上界) AS 类型默认下界为0零 • 数组引用通过数组明(下标)方法引用 • 二维数组Dim 数组名(a to b,m to n) AS 类型 列举一些关于数组定义、引用的例子 单独考数组很少,一般与循环部分结合!

  19. 数组变量由变量名和数组下标组成,在VBA中不允许隐式说明数组,可用Dim语句来声明数组。数组声明方式为:数组变量由变量名和数组下标组成,在VBA中不允许隐式说明数组,可用Dim语句来声明数组。数组声明方式为: • Dim 数组名([下标下界to] 下标上界) As 数据类型 • 下标下界的缺省值为0,数组元素为:数组名(0)至数组名(下标上界);如果设置下标下界非0,要使用to选项。 • 在使用数组时,可以在模块的通用声明部分使用Option Base来指定数组的默认下标下界是0或l: • Option Base 1 设置数组的默认下标下界为l • Option Base 0 语句的默认形式 • 数组有两种类型:固定大小的数组和动态数组。前者总保持同样的大小,而后者在程序中可根据需要动态地改变数组的大小。

  20. (1)固定大小的数组 • 例如: • Dim IntArray(l0) As Integer • 这条语句声明了一个有11个整型数组元素的数组,数组元素从IntArray(0)至IntArray(l0),每个数组元素为一个整型变量,这里指定数组元素下标上界来定义数组。 • VBA中允许指定数组下标范围时使用To,如下例所示: • Dim IntArray(-2 to 3) As Integer • 该语句定义一个有6个整型数组元素的数组,数组元素下标从-2到3。 • 如果要定义多维数组,声明方式为: • Dim 数组名(数组第1维下标上界,数组第2维下标上界…) As 数据类型 • 例如: • Dim IntArray(3,5) As Integer • 语句定义了一个二维数组,第一维有4个元素,第二维有6个元素。 • 类似的声明也可以用在二维以上的数组中。 • 例如: • Dim MultArray(3,1 to 5,0 to 5) As Long • 语句定义了一个三维数组,第一维有4个元素,第二维有5个元素,第三维有6个元素,其中数组元素的总数为三个维数的乘积:4×5×6=120。

  21. (2)动态数组 • 在VBA中,还允许用户定义动态数组。很多情况下,不能明确知道数组中应该有多少元素,可使用动态数组。动态数组中元素的个数是不定的,在程序运行中可以改变其大小。 • 动态数组的定义方法是:先使用Dim来声明数组,但不指定数组元素的个数,而在以后使用时再用ReDim来指定数组元素个数,称为数组重定义。在对数组重定义时,可以使用ReDim后加保留字Preserve来保留以前的值,否则使用ReDim后,数组元素的值会被重新初始化为默认值。 • 【例7.2】定义动态数组IntArray,设默认下界为1,并用循环赋值。 • Dim IntArray() As Integer '声明动态数组 • ReDim IntArray(5) '数组重定义,分配5个元素 • For I = 1 To 5 '使用循环给数组元素赋值 • IntArray(I) = I • Next I • Rem数组重定义,调整数组的大小,并抹去其中元素的值。 • ReDim IntArray(10) '重新设置为10个元素,IntArray(1)至IntArray(5)的值不保留 • For I = 11 To 20 '使用循环给数组元素重新赋值 • IntArray(I) = I • Next I

  22. Rem数组重定义,调整数组的大小,使用保留字Preserve来保留以前的值。Rem数组重定义,调整数组的大小,使用保留字Preserve来保留以前的值。 • ReDim Preserve IntArray(15) '重新设置为15个元素,IntArray(1)至IntArray(10)的值保留 • For I = 11 To 15 '使用循环给未赋值数组元素赋值 • IntArray(I) = I • Next I • Redim语句只能出现在过程中,可以改变数组的大小和上下界,但不能改变数组的维数。 • 执行不带Preserve关键字的Redim语句时,数组中存储的数据会全部丢失。VBA将重新设置其中元素的值。对于Variant变量类型的数组,设为Empty;对于Numeric类型的数组,设为0;对于String类型的数组则设为空字符串;对象数组则设为Nothing。 • 使用Preserve关键字,可以改变数组中最后一维的边界,但不能改变这一维中的数据。 • 例如: • Redim IntArray(10,10,10) • Redim Preserve IntArray(10,10,15) • 也就是说,在使用Preserve关键字时,只能通过改变数组的上界来重新设置数组的大小,改变数组的下界将会导致一个错误。如果改变后的数组比原来小,那么多出来的数据将会丢失。

  23. (3)数组的使用 • 数组声明后,数组中的每个元素都可以当作单个的变量来使用,其使用方法同相同类型的普通变量。数组元素的引用格式为:数组名(下标值)。 • 其中:如果该数组为一维数组,则下标值为一个范围为[数组下标下界,数组下标上界]的整数;如果该数组为多维数组,则下标值为多个(不大于数组维数)用逗号分开的整数序列,每个整数(范围为[数组该维下标下界,数组该维下标上界])表示对应的下标值。 • 例如,可以如下引用前面定义的数组,设默认下界为1。 • IntArray(2) '引用一维数组IntArray的第2个元素。 • IntArray(2,2) '引用二维数组IntArray的第2行第2个元素。 • 【例7.3】若要存储一年中每天的支出,可以声明一个具有365个元素的数组变量,而不是365个变量,数组中的每一个元素都包含一个值。下列的语句声明数组CurArray具有365个元素,设默认下界为1。 • Dim CurArray (1 to 365) As Currency '声明一个具有365个元素的一维数组 • Dim intI As Integer • For intI=1 to 365 • CurArray(intI) = 10 '每个数组元素都赋予一个初始值10 • Next

  24. 运算符、表达式 • 运算符 • 算术运算符+ - * / \ mod ^ • 字符串运算符+ &,推荐使用& • 关系运算符= > < <= >= like is between..and • 逻辑运算符and or not • 对象运算符! .

  25. 【例7.4】算术运算符应用示例。 • 2^8 '计算2的8次方 • 2^(1/2)或2^0.5 '计算2的平方根 • 7/2 '标准除法,结果为3.5 • 7\2 '整数除法,结果为3 • 10 Mod 4 '取模运算,结果为2 • 10 Mod 2 '结果为0 • 10 Mod -4 '结果为2 • -10 Mod -4 '结果为-2 • -8.8 Mod 5 '结果为-4 • 20 – True '结果为21,逻辑量True转化为数值-1 • 20 + False +6 '结果为26,逻辑量False转化为数值0

  26. 【例7.5】“&”运算符应用示例。 • Strx ="ABC" • Strx&"是大写英文字母" '出错 • Strx & "是大写英文字母" '结果为“ABC是大写英文字母” • "Access" & "数据库教程" '结果为“Access数据库教程” • "abcd" & 1234 '结果为“abcd1234” • "abcd" & "1234" '结果为“abcd1234” • "4321" & "1234" '结果为“43211234” • 4321 & 1234 '结果为“43211234” • "2+3" & "=" & (2+3) '结果为“2+3=5”

  27. 【例7.6】“+”运算符应用示例。 • "4321"+1234 '结果为5555 • "4321"+"1234" '结果为“43211234” • "abcd"+1234 '出错 • 4321+"1234" & 100 '结果为“5555100”

  28. 【例7.7】Is关系运算符应用示例。 • Dim s1,s2 As Control • Set s1=Me!text1 • Set s2=Me!text1 • strx=s1 Is s2 'strx值为“True” • 【例9.10】关系运算符应用示例。 • Dim S '定义变量S • S=(5>2) '结果为True • S=(2>=5) '结果为False • S=("abcd">"abc") '结果为True • S=("王力">"刘力") '结果为True • S=(#2005/10/10#>#2004/10/12#) '结果为True

  29. 【例7.8】逻辑运算符应用示例。 • Dim S '定义变量S • S=(5>2 And 3>=4) '结果为False • S=(5>2 Or 3>=4) '结果为True • S=("abcd">"abc" And 3>=4) '结果为False • S=Not(3>=4) '结果为True • S=(5>2 Xor 3>=4) '结果为True • S=(5>2 Xor 4>=3) '结果为False • S=(2>5 Eqv 3>=4) '结果为True • S=(5>2 Eqv 3>=4) '结果为False • S=(5>2 Imp 3>=4) '结果为False • S=(5>2 Imp 4>=3) '结果为True

  30. 表达式 • 表达式就是由常量、变量、运算符构成的字符串,表达式具有特定的唯一值。 • 表达式运算优先级

  31. (1)表达式的组成 • 表达式由字面值、常量、变量、运算符、函数、标识符、逻辑量和括号等按一定的规则组成,表达式通过运算得出结果,运算结果的类型由操作数的数据和运算符共同决定。 • 注意:在VBA中,逻辑量在表达式中进行算术运算时,True值被当成-1、False值被当成0处理。 • (2)表达式的书写规则 • 只能使用圆括号且必须成对出现,可以使用多个圆括号,但必须配对。 • 乘号不能省略。X乘以Y应写成X*Y,不能写成XY。 • 表达式从左至右书写,无大小写区分。 • (3)算术运算表达式的结果类型 • 在算术运算表达式中,参与运算的操作数可能具有不同的数据精度,VBA规定运算结果的数据类型采用精度高的数据类型。 • (4)运算优先级 • 如果一个表达式中含有多种不同类型的运算符,运算进行的先后顺序由运算符的优先级决定。VBA常用运算符的优先级划分如7.2所示。

  32. 表7.2 运算符的优先级 高 关于运算符的优先级作如下说明: ①不同类型运算符的优先级为:算术运算符>字符串运算符>关系运算符>逻辑运算符 ②圆括号优先级最高。 ③所有关系运算符的优先级相同。也就是说,按从左到右顺序处理。 ④算术运算符和逻辑运算符必须按照表7.2所列优先顺序处理。

  33. 算数函数

  34. 字符函数

  35. 日期、时间函数

  36. 类型转换 • 字符转成ASCII码ASC(字符串),只转换第一个 • ASCII转成字符 Chr(代码) • 数字转字符 Str(数值表达式) • 字符转数字Val(字符串)

  37. 流程控制语句 7.3 VBA程序控制结构7.31 顺序结构 • 声明语句:命名或定义变量、常量、函数等 • 赋值语句:将表达式值赋给变量变量名=表达式 • Goto语句 不推荐使用

  38. 声明语句 • 通过声明语句可以命名和定义过程、变量、数组或常量。当声明一个过程、变量或数组时,也同时定义了它们的作用范围,此范围取决于声明位置(子过程、模块或全局)和使用什么关键字(Dim、Public、Static或Global等)来声明它。 • 例如,有如下程序段: • Sub Myproc( ) • Dim SinS as Single,SinR as Single • Const P=3.14159 • End Sub • 上述语句声明定义了一个名为Myproc的子过程,Dim语句定义了2个名称分别为SinS和SinR的单精度数据变量,Const语句定义了1个名为P的符号常量。当这个子过程被调用或运行时,所有包含在Sub和End Sub之间的语句都会被执行。

  39. 赋值语句 • 赋值语句用于指定一个值或表达式给变量或常量。使用格式为: • [Let] 变量名= 值或表达式 • 其中:Let为可选项,在使用赋值语句时,一般省略。 • 例如: • Dim SinS as Single,SinR as Single • SinS=1234.567 • Let SinR=12.3 • 关于使用赋值语句的说明: • (1)当数值表达式与变量精度不同时,系统强制转换成变量的精度。 • 例如: • Dim IntN as Integer • IntN=10.6 'IntN为整型变量,10.6经四舍五入转换后赋值,IntN值为11 • (2)当表达式是数字字符串,变量为数值型,系统自动转换成数值类型再赋值,若表达式含有非数字字符或空串时,赋值出错。 • 例如: • IntN%="123" 'IntN值为123 • IntN%="1a2 3" '出错,类型不匹配 • (3)不能在一个赋值语句中,同时给多个变量赋值。 • 例如:以下语句语法没有错误,但结果不正确。 • x%=y%=z%=10 • (4)实现累加作用的赋值语句。 • 例如: • n=n+1 '取变量n中的值加1后再赋给n,与循环语句结合,可实现计数 • 说明:还有一个赋值语句是Set语句,它用来指定一个对象给已声明为对象类型的变量,Set关键字不能省略。

  40. 标号和GoTo语句 • GoTo语句用于在程序执行过程中实现无条件转移。 • 格式为:GoTo标号 • 程序执行过程中,遇到GoTo语句,会无条件地转到其后的“标号”位置,并从该位置继续执行程序。 • 标号定义时,名字必须从代码行的第一列开始书写,名字后加冒号“:”。 • 例如: • …… • Goto Label1 '跳转到标号为“Label1”的位置执行 • …… • Label1: '定义的“Label1”标号位置 • …… • 说明:GoTo语句在早期的Basic语言中曾广泛应用。在VBA中,程序的执行流程可用结构化语句控制,除在错误处理的“On Error GoTo...”结构中使用外,应避免使用GoTo语句。

  41. 顺序结构每条语句执行且执行一次。 • 选择(分支)结构根据条件真假,有些语句可能不执行,但执行部分只运行一次。 • 循环结构根据条件真假,有些语句可能执行多次,但也有可能一次也不执行!

  42. 7.3.2 分支结构 • 单分支、双分支、多分支 • 单分支if 条件 then 语句块 • 双分支if 条件 then 语句块1else 语句块2end if • 多分支,即单双分支的嵌套注意:else总与最近的if配对使用!!当嵌套层次太多时,可以考虑使用case语句

  43. (1)单分支结构 • 语句格式为: • If <条件表达式> Then <语句> • 或 • If <条件表达式> Then • <语句块> • End If • 功能:当条件表达式为真时,执行Then后面的语句块或语句,否则不做任何操作。 • 说明:语句块可以是一条或多条语句。在使用上边的单行简单格式时,Then后只能是一条语句,或者是多条语句用冒号分隔,但必须与If语句在一行上。 • 例如:比较两个数值变量x和y的值,用x保存大的值,y保存小的值。语句如下: • If x<y Then • t=x 't为中间变量,用于实现x与y值的交换 • x=y • y=t • End If • 或 • If x<y Then t=x: x=y: y=t

  44. (2)双分支结构 • 语句格式为: • If <条件表达式> Then <语句1> Else <语句2> • 或 • If <条件表达式> Then • <语句块1> • Else • <语句块2> • End If • 功能:当条件表达式为真时,执行Then后面的语句1或语句块1,否则执行Else后面的语句2或语句块2。 • 【例9.12】编写计算如下函数的程序语句。 • If x>=0 Then • y=Sqr(x) • Else • y=Abs(x) • End If • 或 • If x>=0 Then y=Sqr(x) Else y=Abs(x) • 本例亦可用单分支结构语句实现,读者可写出程序语句。 • 双分支结构语句只能根据条件表达式的真或假来处理两个分支中的一个。当有多种条件时,要使用多分支结构语句。

  45. (3)多分支结构 • 语句格式为: • If <条件表达式1> Then • <语句块1> • ElseIf <条件表达式2> Then • <语句块2> • …… • Else • <语句块n+1> • End If • 功能:依次测试条件表达式1、条件表达式2、……,当遇到条件表达式为真时,则执行该条件下的语句块。如均不为真,若有Else选项,则执行Else后的语句块,否则执行End If后面的语句。 • 说明:不管条件分支有几个,程序执行了一个分支后,其余分支不再执行。当有多个条件表达式同时为真时,只执行第一个与之匹配的语句块。因此,应注意多分支结构中条件表达式的次序及相交性。另外注意ElseIf中不能有空格。

  46. 【例7.9】用窗体实现如下操作:当输入某同学期末考试科目的总平均成绩时,显示该生对应的五级制总评结果。【例7.9】用窗体实现如下操作:当输入某同学期末考试科目的总平均成绩时,显示该生对应的五级制总评结果。 • 在窗体中添加以下控件: • 创建2个标签控件,其标题分别设为:总平均成绩和总评结果。 • 创建2个文本框控件,其名字分别设为:Zpcj和Zpjg。 • 创建1个命令按钮,其标题为“评定”,在其Click事件过程中,加入如下代码语句: • Private Sub command1_Click( ) • If Me!Zpcj>=90 Then • Me!Zpjg="优秀" • ElseIf Me!Zpcj>=80 Then • Me!Zpjg="良好" • ElseIf Me!Zpcj>=70 Then • Me!Zpjg="中等" • ElseIf Me!Zpcj>=60 Then • Me!Zpjg="及格" • Else • Me!Zpjg="不及格" • End If • End Sub • 运行结果:当在总平均成绩文本框中输入任何数值数据时,单击【评定】按钮,总评结果将显示在总评结果框中。

  47. (4)If语句的嵌套使用: • 指If或Else后面的语句块中又包含有If语句。语句格式为: • If <条件表达式1> Then • <语句块1> • If <条件表达式11> Then • <语句块11> • End If • End If • 【例9.14】比较3个数值变量x、y和z的值,通过交换,使得x>y>z。 • 程序语句如下: • If x<y Then • t=x: x=y: y=t '如果x<y,x与y交换,使得x>y • If y<z Then • t=y: y=z: z=t '如果y<z,y与z交换,使得y>z • If x<y Then • t=x: x=y: y=t '此时的x,y值已不是原先的值 • End If • End If • End If • 注意:嵌套If语句应注意书写格式,为提高程序的可读性,多采用锯齿型。注意If与End If的配对。多个If嵌套,End If与它最近的If配对。

  48. 多分支Select Case语句 • Select Case语句格式为: • Select Case 变量或表达式 • Case 表达式1 • <语句块1> • Case 表达式2 • <语句块2> • … • [Case Else • <语句块n+1>] • End Select • 功能:Select语句首先计算Select Case后<变量或表达式>的值,然后依次计算每个Case子句中表达式的值,如果<变量或表达式>的值满足某个Case值,则执行相应的语句块,如果当前Case值不满足,则进行下一个Case语句的判断。当所有Case语句都不满足时,执行Case Else子句。如果条件表达式满足多个Case语句,则只有第一个Case语句被执行。

  49. 说明: • “变量或表达式”可以是数值型或字符串表达式。Case表达式与“变量或表达式”的类型必须相同。 • Case表达式可以是下列几种格式: • ①单一数值或一行并列的数值,之间用逗号分开。 • ②用关键字To分隔开的两个数值或表达式之间的范围,前一个值必须比后一个值要小。字符串的比较是从它们的第一个字符的ASCII码值开始比较的,直到分出大小为止。 • ③用Is关系运算符表达式。 • 例如: • Case 1 to 20 • Case is>20 • Case 1 To 5,7,8,10,is>20 • Case "A" To "Z"

  50. 【例7.10】判定学生总评成绩的代码可改写如下:【例7.10】判定学生总评成绩的代码可改写如下: • Select Case Val(me!Zpcj) • Case is>=90 • me!Zpjg="优秀" • Case 80,81,82 to 89 • me!Zpjg="良好" • Case 70 to 79 • me!Zpjg="中等" • Case 60 to 69 • me!Zpjg="及格" • Case Else • me!Zpjg="不及格" • End Select • 又例如: • Dim strx as string *1 • Select Case strx • Case "A" to "Z", "a" to "z" • stry="英文字母" • Case "!","?",",",".",";" • stry="标点符号" • Case Is<68 • stry="字符的ASCII码值小于68" • Case Else • stry="其他字符" • End Select

More Related