《VBA程序流程控制语句》由会员分享,可在线阅读,更多相关《VBA程序流程控制语句(32页珍藏版)》请在金锄头文库上搜索。
1、本节内容及要求:本节内容及要求: 1.1.熟练掌握行熟练掌握行ifif语句、块语句、块ifif结构、结构、Select CaseSelect Case情况选择情况选择结构有使用,掌握选择的嵌套结构;结构有使用,掌握选择的嵌套结构; 2.2.熟练掌握实现循环结构的熟练掌握实现循环结构的For/NextFor/Next循环结构及循环结构及Exit Exit ForFor语句、语句、Do/LoopDo/Loop循环结构的使用,掌握多重循环。循环结构的使用,掌握多重循环。本章重点:本章重点: 选择结构及循环结构的实现及其应用选择结构及循环结构的实现及其应用本章难点:本章难点: 选择的嵌套及多重循环结构
2、选择的嵌套及多重循环结构VBAVBA程序流程控制语句程序流程控制语句1执行语句分为执行语句分为3种结构:种结构:顺序结构:顺序结构:顺序结构是最基本的程序结构,按程序中语句编写的先后顺序逐条执行。条件结构:条件结构:根据条件选择运行的结果。循环结构:循环结构:对程序中的某段代码重复执行时,可以使用循环结构。2分支语句分支语句GotoGoto 语句语句 形式形式: : Go To Go To 标号标号| |行号行号 作用是无条件地转移到标号或行号指定的那行语句作用是无条件地转移到标号或行号指定的那行语句. . 标号是一个字符序列标号是一个字符序列, ,行号是一个数字序列。行号是一个数字序列。例如
3、:例如: LpLp: : gotogoto lplp 3条件测试语句条件测试语句1.1.IfIfThenThen语句语句( (单分支结构单分支结构) ) If If Then Then 语句块语句块 End IfEnd If 或或 If If Then Then 例例: :已知两个数已知两个数x x和和y y,比较它们的大小,比较它们的大小, 使得使得x x大于大于y.y. If xy ThenIf xy Then t=x : x=y: y=t t=x : x=y: y=t End If End If 或或 If xy Then t=x: x=y: y=tIf xy Then t=x: x=y
4、: y=tN条件语句序列End IfY4条件测试语句条件测试语句2. If2. IfThenThenElseElse语句语句( (双分支结构双分支结构) ) If If Then Then 1 Else Else 2 End If End If If If Then Then Else Else 2 双分支选择结构执行过程双分支选择结构执行过程 条件N语句序列1End If后面的语句Y语句序列25条件测试语句条件测试语句例如:输出例如:输出x,yx,y两个中值较大的一个值。两个中值较大的一个值。IF X Y ThenIF X Y Then Print X Print XElseElse Pri
5、nt Y Print YEnd IfEnd If也可以写成如下的单行形式:也可以写成如下的单行形式: IIF (X Y ,Print X , Print Y)IIF (X Y ,Print X , Print Y)6条件测试语句条件测试语句IfIfThenThenElseIfElseIf语句语句( (多分支结多分支结构构) ) 形式形式: : If If Then1 Then 1 ElseIfElseIf Then2Then 2 Else Else 语句块语句块 n+1n+1 End If End If7条件测试语句条件测试语句 例:输入一学生成绩,评定其等级。方法是:例:输入一学生成绩,评定
6、其等级。方法是:9010090100分为分为“优秀优秀”,80898089分为分为“良好良好”,70797079分为分为“中等中等”,60696069分为分为“及格及格”,6060分以为分以为“不合格不合格”使用使用IFIF语句实现的程序段如下:语句实现的程序段如下:If x=90 thenIf x=90 then Print Print 优秀优秀 ElseIfElseIf x=80 Then x=80 Then Print Print 良好良好 ElseIfElseIf x=70 Then x=70 Then Print Print 中等中等 ElseIfElseIf x=60 Then x
7、=60 Then Print Print 及格及格 Else Else Print Print 不及格不及格 End IfEnd If8条件测试语句条件测试语句4 . Select Case4 . Select Case语句(情况语句)语句(情况语句)形式:形式:Select Case Select Case 变量或表达式变量或表达式Case Case 表达式列表表达式列表1 1语句块语句块1 1Case Case 表达式列表表达式列表2 2语句块语句块2 2Case ElseCase Else语句块语句块n+1n+1End SelectEnd Select数值型或字符串表达式数值型或字符串表
8、达式9条件测试语句条件测试语句例如:将例例如:将例 使用使用select caseselect case.语句来实现的程序段如下:语句来实现的程序段如下:Select Case x Select Case x Case 90 to 100 Case 90 to 100 Print Print 优秀优秀 Case 80 to 89 Case 80 to 89 Print Print 良好良好 Case 70 to 79 Case 70 to 79 Print Print 中等中等 Case 60 to 69 Case 60 to 69 Print Print 及格及格 Case Else Cas
9、e Else Print Print 不及格不及格 End SelectEnd Select10条件测试语句条件测试语句5. 5. 选择结构的嵌套选择结构的嵌套下面是两种正确的嵌套形式:下面是两种正确的嵌套形式:(1 1) IF IF Then 1 Then . IF IF Then2 Then Else Else . End If End If . . Else Else . . IF IF Then3 Then . Else Else . End If End If . End IF End IF(2 2)IF IF Then 1 Then . Select Case Select Cas
10、e Case Case IF IF Then2 Then Else Else . End If End If Case Case. . . End Select End Select . .End IFEnd IF11(1)IIf函数函数形式:Iif(表达式,当条件为True时的值,当条件为False时的值例:求X、Y中大的数,并放入变量Tmax中:Tmax=Iif(XY,X,Y)(2)Choose函数函数形式:Choose(整数表达式,选项列表)如果整数表达式的值是1,则选择列表中的第1项,依次类推;如果小于1或大于列表项数时,则返回NULL。例:根据nub为1-4的值,换算成不同的运算符:
11、OP=Choose(nub,“”,“”,“”,“”)12条件测试语句条件测试语句 注意:只要在一个分支内嵌套,不出现交叉,满足结注意:只要在一个分支内嵌套,不出现交叉,满足结构规则,其嵌套的形式将有很多种,嵌套层次也可以任意构规则,其嵌套的形式将有很多种,嵌套层次也可以任意多。对于多层多。对于多层IFIF嵌套结构中,要特别注意嵌套结构中,要特别注意IFIF与与ElseElse的配对的配对关系,一个关系,一个ElseElse必须与必须与IFIF配结,配对的原则是:在写含有配结,配对的原则是:在写含有多层嵌套的程序时,建议使用缩进对齐方式,这样容易阅多层嵌套的程序时,建议使用缩进对齐方式,这样容易
12、阅读和维护。读和维护。13循环语句循环语句循环结构循环结构 1. For1. For循环语句循环语句 ( (一般用于循环次数已一般用于循环次数已知知) )形式:形式: For For 循环变量初值循环变量初值 to to 终值终值 Step Step 步长步长 语句块语句块Exit ForExit For 语句块语句块 Next Next 循环变量循环变量 0 0 初值初值 终值终值 =1 =1 时时, ,可可省略省略0 终值终值=0 =0 死循环死循环 步长步长14循环语句循环语句循环次数循环次数例例: For I=2 To 13 Step 3 : For I=2 To 13 Step 3
13、Print I , Print I , Next I Next I Print Print “I=I=“, I , I 循环执行次数循环执行次数 : 4 4输出输出I I的值分别为的值分别为: : 2 5 8 11 2 5 8 11 出了循环输出为出了循环输出为: I=14: I=1415循环语句循环语句例例 编程计算:编程计算:S=1+2+3+S=1+2+3+100+100Dim S%, I%Dim S%, I%S=0 S=0 累加前变量累加前变量S S为为0 0For I=1 to 100 For I=1 to 100 S=S+I S=S+INext INext IPrint S=,S P
14、rint S=,S 当N=100N=N+1打印SS=0,N=1S=S+N16【例例】求阶乘求阶乘n n!循环语句循环语句17 编写程序代码。编写程序代码。Private Sub Command1_Click()Private Sub Command1_Click() Dim n As Integer,i As Integer Dim n As Integer,i As Integer Dim result As Long Dim result As Long result=1 result=1 n=CInt(text1.text) n=CInt(text1.text) If n=0 Then
15、If n=0 Then Label2.Caption= Label2.Caption=请输入正整数!请输入正整数! Exit Sub Exit Sub 结束过程结束过程 End ifEnd if For i=1 To n For i=1 To n result=result*i result=result*i Next i Next i Label2.Caption= Label2.Caption=Str(nStr(n)+!=+)+!=+Str(resultStr(result) )End SubEnd Sub循环语句循环语句18循环语句循环语句DoDoLoopLoop循环语句循环语句 形式形
16、式1 1:(当型循环):(当型循环) Do While|Until Do While|Until 语句块语句块 Exit DoExit Do 语句块语句块 LoopLoop19循环语句循环语句形式形式2 2:( (直到循环)直到循环)Do Do 语句块语句块 Exit DoExit Do 语句块语句块Loop While|Until Loop While|Until 20循环语句循环语句条 件语句块语句块TFExit Do条 件语句块语句块TFExit Do Do UntilDo UntilLoopLoop执行过程执行过程 DoDoLoop Loop UntilUntil执行过程执行过程 21
17、循环语句循环语句说明:说明: (1 1)当当使使用用WhileWhile 构构成成循循环环时时,当当条条件件为为“真真”,则反复执行循环体,当条件为,则反复执行循环体,当条件为“假假”,则退出循环。,则退出循环。 (2 2)当当使使用用Until Until 构构成成循循环环时时,当当条条件件为为“假假”,则则反反复复执执行行循循环环体体,直直到到条条件件成成立立,即即为为“真真”时时,则则退退出出循环循环。 (3 3)在在循循环环体体内内一一般般应应有有一一个个专专门门用用来来改改变变条条件件表表达达式式中中变变量量的的语语句句,以以使使随随着着循循环环的的执执行行,条条件件趋趋于于不不成成
18、立立(或或成成立立),最后达到退出循环。,最后达到退出循环。 (4 4)语句)语句Exit DoExit Do的作用是退出它所在的循环结构,它的作用是退出它所在的循环结构,它只能用在只能用在DO/LoopDO/Loop结构中,并且常常是同选择结构一起出现在结构中,并且常常是同选择结构一起出现在循环结构中,用来实现当满足某一条件时提前退出循环循环结构中,用来实现当满足某一条件时提前退出循环。 22【例例】用用DoDoLoopLoop循环结构实现求和循环结构实现求和sum=1+2+3+sum=1+2+3+100+100。 编写代码如下:编写代码如下:23 解法一:采用当型循环解法一:采用当型循环D
19、o WhileDo WhileLoopLoopPrivate Sub Command1_Click()Private Sub Command1_Click() Dim i As Integer,sum As Integer Dim i As Integer,sum As Integer i=1 i=1 计数器初值置为计数器初值置为1 1 sum=0 sum=0 累加器初值置为累加器初值置为0 0 Do While i=100 Do While i100 Do Until i100 sum=sum+i sum=sum+i i=i+1 i=i+1 Loop Loop Label2.Caption=
20、 Label2.Caption=Str(sumStr(sum) )End SubEnd Sub25循环结构(续3)【例】利用Do循环求1+2+100和。DimsumAsInteger,iAsIntegersum=0i=1DoUntili100Sum=Sum+ii=i+1LoopDebug.Printsum26循环语句循环语句WhileWhileWendWend语句语句使用格式如下:使用格式如下:While While WendWend 说说明明:该该语语句句的的功功能能与与Do Do While While .Loop.Loop实实现现的循环完全相同。的循环完全相同。27循环语句循环语句例(补
21、充)例(补充) 求两个整数的最大公约数、最小公倍数求两个整数的最大公约数、最小公倍数Dim n%,m%,nm%,r%Dim n%,m%,nm%,r%m=m=Val(InputBox(mVal(InputBox(m=)=)n=n=Val(InputBox(nVal(InputBox(n=)=)nm=n*mnm=n*mIf mn Then t=m: m=n: n=tIf mn Then t=m: m=n: n=t r=m mod n r=m mod n Do While (r 0) Do While (r 0) m=n m=n n=r n=r r= m mod n r= m mod n Loop
22、LoopPrint Print 最大公约数最大公约数=, n =, n Print Print 最小公倍数最小公倍数=, nm/n =, nm/n 算法流程图算法流程图28循环语句循环语句循环的嵌套循环的嵌套多重循环结构多重循环结构 如果在一个循环内完整地包含另一个循环结构,如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。而定,嵌套一层称为二重循环,嵌套二层称为三重循环。 上上面面介介绍绍的的几几种种循循环环控控制制结结构构可可以以相相互互嵌嵌套套,下
23、下面面是几种常见的二重嵌套形式:是几种常见的二重嵌套形式:29循环语句循环语句(1 1)For I=For I=. . . For J= For J=. . . . Next J Next J . Next I Next I(2 2)For I=For I=. . . Do Do While/Until While/Until . . . . Loop Loop . Next I Next I(3 3)Do WhileDo While. . . For J= For J=. . . . Next J Next J . LoopLoop(4 4)Do While/UntilDo While/Un
24、til. . . Do Do While/Until While/Until . . . . Loop Loop . Loop Loop30循环语句循环语句例如例如:打印九九乘法表打印九九乘法表. . For i = 1 To 9For i = 1 To 9 For j = 1 To 9 For j = 1 To 9 se = i & se = i & & j & = & i * j & j & = & i * j Picture1.Print Tab(j - 1) * 9 + 1); se; Picture1.Print Tab(j - 1) * 9 + 1); se; Next j Next j Picture1.Print Picture1.Print Next i Next i31【例例】求求1 13030间的全部素数。间的全部素数。分析:素数是只能被分析:素数是只能被1 1和它本身整除的正整数。例如,和它本身整除的正整数。例如,1717是一个素是一个素数,它只能被数,它只能被1 1和和1717整除。素数又成为质数。整除。素数又成为质数。 32