VBS脚本编程(4)——流程控制语句

分支结构——If .. Then .. Else ..

根据表达式的值有条件地执行一组语句。
If condition Then statements [Else elsestatements ]
或者,使用块形式的语法:
If condition Then
[statements]
[ElseIf condition-n
Then [elseifstatements]] . . .
[Else [elsestatements]]
End If
 
参数
condition
一个或多个下面两种类型的表达式:
数值或字符串表达式,其运算结果是 TrueFalse。如果 condition 是 Null,则 condition 被视为 False
形如 TypeOf objectname Is objecttype 的表达式。objectname 是任何对象的引用,而 objecttype 则是任何有效的对象类型。如果 objectname 是 objecttype 所指定的一种对象类型,则表达式为 True;否则为 False。
Statements
如果 conditionTrue 时,执行的一条或多条(以冒号分开)语句。
condition-n
同 condition。
elseifstatements
如果相关的 condition-nTrue时,执行的一条或多条语句。
elsestatements
如果前面没有 conditioncondition-n 表达式为 True 时,执行的一条或多条语句。
 
说明
对于短小简单的测试,可以使用单行形式(第一种语法)。但块形式(第二种语法)提供了比单行形式更强的结构化与适应性,比较容易阅读、维护及调试。
 
注意   在单行语法中,可以执行多条语句作为 If...Then 判断的结果,但所有语句必须在同一行上并且以冒号分开,如下列语句所示:
If A > 10 Then A = A + 1 : B = B + A : C = C + B
当程序运行到 If 块(第二种语法)时,将测试 condition。如果 conditionTrue,则执行 Then 之后的语句。如 conditionFalse,则每个 ElseIf 部分的条件式(如果有的话)会依次计算并加以测试。当找到某个为 True 的条件时,则其相关的 Then 之后的语句会被执行。如没有一个 ElseIf 语句是 True(或没有 ElseIf 子句),则将执行 Else 之后的语句。执行 ThenElse 之后的语句以后,将继续执行 End If 之后的语句。
ElseElseIf 子句都是可选项的。在 If 块中可以放置任意多个 ElseIf 子句,但是都必须在 Else 子句之前。If 块语句可以被嵌套,即被包含在另一个 If 块语句之中。
要判断某个语句是否是一个 If 块,可检查 Then 关键字之后是什么。如果在 Then 的同一行之后还有其他非注释的内容,则此语句就是单行形式的 If 语句。
If 块语句必须是某一行的第一条语句,并且必须以 End If 语句结束。
 
例、查询成绩对应的等级
Dim scort,var
var = InputBox("请输入成绩") 
scort = CInt(var)
If scort >= 90 Then
		MsgBox ("优秀")
	ElseIf scort >= 80 Then
		MsgBox ("良好")
	ElseIf scort >= 70 Then
		MsgBox ("中等")
	ElseIf scort >=60 Then
		MsgBox ("及格")
	Else MsgBox ("不及格")
	End If
 

分支结构——Select Case

根据表达式的值执行几组语句之一。也叫做Switch语句。
Select Case testexpression
[Case expressionlist-n
[statements-n]] . . .
[Case Else expressionlist-n
[elsestatements-n]]
End Select
 
参数
testexpression
任意数值或字符串表达式。
expressionlist-n
Case 出现则必选项。一个或多个表达式的分界列表。
statements-n
当 testexpression 与 expressionlist-n 中的任意部分匹配时,执行的一条或多条语句。
elsestatements-n
testexpressionCase 子句的任何部分不匹配时,执行的一条或多条语句。
 
说明
如果 testexpression 与任何 Case expressionlist 表达式匹配,则执行此 Case 子句和下一个 Case 子句之间的语句,对于最后的子句,则会执行该子句到 End Select 之间的语句,然后控制权会转到 End Select 之后的语句。如 testexpression 与多个 Case 子句中的 expressionlist 表达式匹配,则只有第一个匹配后的语句被执行。
Case Else 用于指示若在 testexpression 和任何其他 Case 选项的 expressionlist 之间未找到匹配,则执行 elsestatements。虽然不是必要的,但最好是将 Case Else 语句置于 Select Case 块中以处理不可预见的 testexpression 值。如果没有 Case expressionlist 与 testexpression 匹配且无 Case Else 语句,则继续执行 End Select 之后的语句。
Select Case 语句可以是嵌套的,每一层嵌套的 Select Case 语句必须有与之匹配的 End Select 语句。
 
例、查询成绩对应的等级
Dim scort,var
var = InputBox("请输入成绩") 
scort = CInt(var)
Select Case True
	Case scort >= 90
    	MsgBox ("优秀")
	Case scort >= 80
    	MsgBox ("良好")
	Case scort >= 70
    	MsgBox ("中等")
	Case scort >= 60
    	MsgBox ("及格")
	Case Else 
    	MsgBox ("不及格")
	End Select
 

循环结构——For .. Next

以指定次数重复执行一组语句。
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next
 
参数
counter
用做循环计数器的数值变量。这个变量不能是数组元素或用户自定义类型的元素。
start
counter 的初值。
end
counter 的终值。
step
counter 的步长。如果没有指定,则 step 的默认值为 1。
statements
ForNext 之间的一条或多条语句,将被执行指定次数。
 
说明
step 参数可以是正数或负数。step 参数值决定循环的执行情况,如下所示:
如果 ... 则循环执行
正数或 0
counter <= end
负数
counter >= end
当循环启动并且所有循环中的语句都执行后,step 值被加到 counter 中。这时,或者循环中的语句再次执行(基于循环开始执行时同样的测试),或者退出循环并从 Next 语句之后的语句继续执行。
 
注意   在循环体内改变 counter 的值,将会使程序代码的阅读和调试变得更加困难。
Exit For 只能用于 For Each...NextFor...Next 结构中,提供另一种退出循环的方法。可在语句中的任意位置放置任意个 Exit For 语句。Exit For 经常和条件判断语句一起使用(例如 If...Then),并立即将控制权转移到 Next 之后的语句。
可以将一个 For...Next 循环放置在另一个 For...Next 循环中,组成嵌套循环。每个循环中的 counter 要使用不同的变量名。下面的结构是正确的:
For I = 1 To 10
      For J = 1 To 10
            For K = 1 To 10
            . . .
            Next
      Next
Next
 
例、生成十个由1到10的随机数
Dim Array(9),i
Randomize
For i = 0 to 9 Step 1
	Array(i) = Int(Rnd*10)+1
	Next 
MsgBox (join(Array))
 

循环结构——For Each .. Next 

对数组或集合中的每个元素重复执行一组语句。
For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
 
参数
element
用来枚举集合或数组中所有元素的变量。对于集合,element 可能是 Variant 变量、通用 Object 变量或任意指定的 Automation 对象变量。对于数组,element 只能是 Variant 变量。
group
对象集合或数组的名称。
statements
对于 group 中的每一项执行的一条或多条语句。
 
说明
如果 group 中有至少一个元素,就会进入 For Each 块执行。一旦进入循环,便首先对 group 中第一个元素执行循环中的所有语句。只要 group 中还有其他的元素,就会对每个元素执行循环中的语句。当 group 中的没有其他元素时退出循环,然后从 Next 语句之后的语句继续执行。
Exit For 只能用于 For Each...NextFor...Next 控制结构中,提供另一种退出循环的方法。可在循环的任意位置放置任意个 Exit For 语句。Exit For 经常和条件判断语句一起使用(例如 If...Then),并立即将控制权转移到 Next 之后的语句。
可以将一个 For Each...Next 循环放置在另一个之中,组成嵌套式 For Each...Next 循环。但是每个循环的 element 必须是唯一的。
 
注意   如果省略 Next 语句中的 element,则程序仍会象已包含它一样继续执行。如果 Next 语句在其相应的 For 语句之前出现,则会产生错误。
 

循环结构——While .. Wend

当指定的条件为 True 时,执行一系列的语句。
While condition
[statements]
Wend
 
参数
condition
数值或字符串表达式,其计算结果为 TrueFalse。如果 condition 为 Null,则 condition 被当作 False
statements
在条件为 True 时执行的一条或多条语句。
 
说明
如果 conditionTrue,则 statements 中所有 Wend 语句之前的语句都将被执行,然后控制权将返回到 While 语句,并且重新检查 condition。如果 condition 仍为 True,则重复执行上面的过程。如果不为 True,则从 Wend 语句之后的语句继续执行程序。
While...Wend 循环可以是多层嵌套结构。每个 Wend 与最近的 While 语句对应。
注意   Do...Loop 语句提供一种结构化与适应性更强的方法以执行循环。
 
例、
Dim Counter
Counter = 0   ' 初始化变量。
While Counter < 20   ' 测试计数器的值。
   Counter = Counter + 1   ' 增加计数器。
   Alert Counter
Wend   ' 计数器大于 19 时终止循环。
 
 

循环结构——Do .. Loop

当条件为 True 时或条件变为 True 之前重复执行某语句块。
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
 
也可以使用下面的语法:
Do [statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
 
参数
condition
数值或字符串表达式,其值为 TrueFalse。如果 condition 为 Null,则 condition 被当作 False
statements
conditionTrue 时被重复执行的一条或多条命令。
 
说明
Exit Do 仅可以用在 Do...Loop 控制语句中,提供另一种退出 Do...Loop 的方法。可以在 Do...Loop 语句中的任何位置放置任意个 Exit DoExit Do 通常与条件判断语句(如 If...Then )一起使用,将控制传递给紧随在 Loop 语句后面的语句。
当用于嵌套 Do...Loop 中的时候,Exit Do 将控制传递给其所在循环的上一层嵌套循环。
 
例、十进制数转二进制数
Dim StrBin,IntDec,n
IntDec = InputBox("请输入正整数","十进制转二进制")
Do While IntDec > 0
	n = IntDec Mod 2
	StrBin = Cstr(n) & StrBin
	IntDec = IntDec \ 2
	Loop
MsgBox (StrBin)
 
posted @ 2021-06-23 17:34  Ulysses~  阅读(249)  评论(0编辑  收藏  举报