VBA流程控制语句一、条件(选择)语句1、If <条件为真> Then <语句>如果<条件为真>则执行<语句>命令。
例1:在窗体中建立一个命令按钮和两个文本框Test0、Test1,在文本框T est0中输入一个数,单击命令按钮时在文本框Test1中显示相应的文字。
Comma nd0事件代码如下:Private Sub Command0_Click()a = Val(Text0) '输入的文本转换为数字If a > 0 Then Text1.Value = "您输入的是正数"If a < 0 Then Text1.Value = "您输入的是负数"End Sub2、If <条件为真> Then <语句1> Else <语句2>如果<条件为真>则执行<语句1>中的命令,否则执行<语句2>中的命令。
例2:Command0事件代码如下:Private Sub Command0_Click()a = Val(Text0)If a > 0 Then Text1.Value = "您输入的是正数" else Text1.Value = "您输入的是0或负数"End Sub3、If <条件为真> Then<语句序列1>Else<语句序列2>End if如果<条件为真>则执行<语句序列1>中的命令(可能不止一行),否则执行<语句序列2>中的命令。
例3:Command0事件代码如下:Private Sub Command0_Click()a = Val(Text0)If a > 0 ThenText1.Value = "您输入的是正数"Text1.ForeColor = 255 '设置文本框的文字颜色ElseText1.Value = "您输入的是0或负数"End IfEnd Sub4、If <条件1为真> Then<语句序列1>ElseIf <条件2为真> Then<语句序列2>ElseIf <条件3为真> Then<语句序列3>……Else<语句序列>End if如果<条件1为真>则执行<语句序列1>中的命令,之后跳出此结构去执行E nd if的下一条语句;否则继续判断<条件2为真>,如果<条件2为真>则执行<语句序列2>中的命令,之后跳出此结构去执行End if的下一条语句;否则继续判断<条件3为真>,依此类推。
例4:Command0事件代码如下:Private Sub Command0_Click()a = Val(Text0)If a > 0 ThenText1.Value = "您输入的是正数"ElseIf a = 0 ThenText1.Value = "您输入的是0或者不以数字开头的文本"ElseText1.Value = "您输入的是负数"End IfEnd Sub5、Select Case <表达式>Case <情况1><语句序列1>Case <情况2><语句序列2>……Case <情况n><语句序列n>Case Else<语句序列>End Select计算<表达式>的值,如果其等于<情况1>,则执行<语句序列1>,然后跳出select case (过程),否则,判断<情况2>,如果<表达式>的值等于<情况2>,则执行<语句序列2>,依此类推;如果<表达式>的值都不等于<情况1>……至<情况n>,则执行Case Else后的<语句序列>。
<情况1>……<情况n>可以为下列4种形式之一:1)包含一个值,如:Case 12)包含多个值,多个值用逗号 (,) 分开,如:Case 2,3,43) 某个范围的值,如:Case 3 To 74) Is和比较运算符的组合,如:Case Is <= 15例5:Command0事件代码如下:Private Sub Command0_Click()a = Val(Text0)Select Case aCase 0Text1.Value = "您输入的是0"Case 1, 3, 5, 7, 9Text1.Value = "您输入的是1-10的奇数"Case 2, 4, 6, 8, 10Text1.Value = "您输入的是1-10的偶数"Case 10 To 100Text1.Value = "您输入的是10-100的数"Case Is > 100Text1.Value = "您输入的是大于100的数"End SelectEnd Subif ...then... 和select case 的区别:if a>100 then text1="大于100"if a>10 then text2=">10"if a...............语句从上到下按顺序每一句都要判断,符合条件的都执行。
而:select case acase >100text1="大于100"case >10text2="大于10"end select语句也从上到下按顺序执行,不过当某一句case符合条件时,就执行他的语句,而后面的case情况不再执行,直接跳出 select case (过程)。
6、Iif(<条件>,<值1>,<值2>)iif函数:如果<条件>为真,则函数的值为<值1>,否则函数的值为<值2>。
例6:Iif([期考]>60,”及格”,”不及格”)iif函数可以进行最多7层嵌套。
如:Iif(<条件1>,<值1>,< Iif(<条件2>, <值3>,<值4>))例7:Iif([期考]>85,”优秀”, Iif([期考]>60,”及格”,”不及格”))7、Switch (<条件1>,<值1>[<条件1>,<值2>]……)Switch函数: 自左至右,<条件1>为真,函数等于<值1>,<条件2>为真,函数等于<值2>,依此类推。
例8:Switch([期考]>85,”优秀”,[期考]>60,”及格”, [期考]<60, ”不及格”)注意:Switch([期考]<60,”不及格”,[期考]>60,”及格”, [期考]>85, ”优秀”) 与上例结果不同。
8、Choose(<表达式>,<值1>,[值2],[值3],……[值n])Choose函数:当<表达式>的值等于1至N,函数的值等于<值1>到[值n];当<表达式>的值小于1或者大于N时,函数的值等于空值(null)。
例9:y=Choose(x,5,m+1,n)表示:当x=1时,y=5;x=2时,y=m+1;x =3时,y=n;x<1或 x>3时,y等于空值(null)。
二、循环语句1、For <变量>=<初值> To <终值> [Step <步长>]<语句序列>[<条件为真> Exit for]Next <变量>在默认情况下,Step被设为“1”,可以省略,Step也可以设为负值。
例10:下面的代码是一个最简单的累加器,把1到10累加在一起,然后赋值给“a”Sub ss()a = 0For i = 1 To 10a = a + iNext iDebug.Print I ‘Debug.Print I表示在立即窗口中显示I的值,试想,I=?End Sub也可以写成:Sub ss()a = 0For I=10 To 1 Step –1a = a + iNext iDebug.Print I ‘试想,I=?End Sub例11:下面是带Exit for的情况,如果a大于等于5,则跳出循环体。
Sub ss()a = 0For i = 1 To 10a = a + iIf a >= 5 Then Exit ForNext iDebug.Print I ‘试想,I=?End Sub2、Do While <条件1为真><语句序列>[<条件2为真> Exit do ]Loop<条件1为真>时重复执行<语句序列>,直至条件1为假,除非<条件2为真>,跳出循环。
例12:下列子过程中,循环重复了几次?Sub W()Dim c, mc = 0m = 20Do While m > 10m = m - 1c = c + 1LoopDebug.Print "循环重复了" & c & "次"Debug.Print "m的值等于" & mEnd Sub3、Do<语句序列>[<条件2为真> Exit do ]Loop While <条件1为真>先无条件执行DO后边的 <语句序列>,碰到Loop While <条件1为真> 时检查<条件1为真>时重复执行<语句序列>,直至条件1为假,除非<条件2为真>,跳出循环。
此语句与上面第2条语句的区别是此语句至少执行一次。
例13:比较下列两个子过程的运行结果。