我在这里学编程 索引篇 共55页[1 2 3 4 5 6 7 >»<... 最后一页]

关于选择循环语句

Do 循环语句

当条件为 True 时,或直到条件变为 True 时,重复执行一个语句块中的命令。

语法:
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]

Loop

或:
Do
[statements]
[Exit Do]
[statements]

Loop [{While | Until} condition]

condition 可选参数。数值表达式或字符串表达式,其值为 True 或 False。如<a target="_top" href="../index.html">

statements 一条或多条命令,它们将被重复当或直到 condition 为 True。

说明:
在Do…Loop 中可以在任何位置放置任意个数的 Exit Do 语句,随时跳出Do匧oop 循环。Exit Do 通常用于条件判断之后,例如If匱hen,在这种情况下,Exit Do 语句将控制权转移到紧接在 Loop 命令之后的语句。

如果 Exit Do 使用在嵌套的Do…Loop 语句中,则 Exit Do 会将控制权转移到 Exit Do 所在位置的外层循环。

例:本示例示范如何使用 Do...Loop 语句。内层的 Do...Loop 语句循环到第 10 次时将标志值设置为 False,并用 Exit Do 语句强制退出内层循环。外层循环则在检查到标志值为 False 时,马上退出。

Dim Check, Counter
Check = True: Counter = 0 ' 设置变量初始值。
Do ' 外层循环。
Do While Counter < 20 ' 内层循环。
Counter = Counter + 1 ' 计数器加一。
If Counter = 10 Then ' 如果条件成立。
Check = False ' 将标志值设成 False。
Exit Do ' 退出内层循环。
End If
Loop
Loop Until Check = False ' 退出外层循环。

For

以指定次数来重复执行一组语句。
语法:
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]

Next [counter]

counter 必要参数。用做循环计数器的数值变量。这个变量不能是布尔或数组元素。

start 必要参数。counter 的初值。

End 必要参数,counter 的终值。

Step 可选参数。counter 的步长。如果没有指定,则 step 的缺省值为 1。

Statements 可选参数。放在 For 和 Next 之间的一条或多条语句,它们将被执行指定的次数。

说明:
step 参数可以是正数或负数。step 参数值决定循环的执行情况,如下所示:

值 循环执行,如果
正数或 0 counter <= end
负数 counter >= end

当所有循环中的语句都执行后,step 的值会加到 counter 中。此时,循环中的语句可能会再次执行(基于循环开始执行时同样的测试),也可能是退出循环并从 Next 语句之后的语句继续执行。

提示 在循环中改变 counter 的值,将会使程序代码的阅读和调试变得更加困难。

循环中可以在任何位置放置任意个 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 K
Next J
Next I

注意 如果省略 Next 语句中的 counter,就像 counter 存在时一样执行。但如果 Next 语句在它相对应的 For 语句之前出现,则会产生错误。

例:本示例使用 For...Next 语句创建一个字符串,其内容为由 0 到 9 的十个数字所组成的字符串,每个字符串之间用空格隔开。外层循环使用一个变量当作循环计数器,每循环一次,变量值减一。

Dim Words, Chars, MyString
For Words = 10 To 1 Step -1 ' 建立 10 次循环。
For Chars = 0 To 9 ' 建立 10 次循环。
MyString = MyString & Chars ' 将数字添加到字符串中。
Next Chars ' Increment counter
MyString = MyString & " " ' 添加一个空格。
Next Words

If

根据表达式的值有条件地执行一组语句。
语法:
If condition Then [statements][Else elsestatements]

或者,可以使用块形式的语法:
If condition Then
[statements]

[ElseIf condition-n Then
[elseifstatements] ...

[Else
[elsestatements]]

End If

If...Then...Else 语句的语法具有以下几个部分:
condition 必要参数。一个或多个具有下面两种类型的表达式:
数值表达式或字符串表达式,其运算结果为 True 或 False。如果
condition 为 Null,则 condition 会视为 False。
TypeOf objectname Is objecttype 形式的表达式。其中的bjectname 是任何对象的引用,而 objecttype 则是任何有效的对象类型。如果 objectname 是 objecttype 所指定的一种对象类型,则表达式为 True,否则为False。

statements 在块形式中是可选参数;但是在单行形式中,且没有 Else 子句时,则为必要参数。一条或多条以冒号分开的语句,它们在

condition 为 True 时执行。

condition-n 可选参数。与 condition 同。

elseifstatements 可选参数。一条或多条语句,它们在相关的 condition-n 为 True 时执行。
elsestatements 可选参数。一条或多条语句,它们在前面的 condition 或 condition-n 都不为 True 时执行。

说明:
可以使用单行形式(第一种语法)来做短小简单的测试。但是,块形式(第二种语法)则提供了更强的结构化与适应性,并且通常也是比较容易阅读、维护及调试的。

注意 在单行形式中,按照 If...Then 判断的结果也可以执行多条语句。所有语句必须在同一行上并且以冒号分开,如下面语句所示:

If A > 10 Then A = A + 1 : B = B + A : C = C + B

在块形式中,If 语句必须是第一行语句。其中的 Else、 ElseIf,和 End If 部分可以只在之前加上行号或行标签。If 块必须以一个 End If 语句结束。

要决定某个语句是否为一个 If 块,可检查 Then 关键字之后是什么。如果在 Then 同一行之后,还有其它非注释的内容,则此语句就是单行形式的 If 语句。

Else 和 ElseIf 子句都是可选的。在 If 块中,可以放置任意多个 ElseIf 子句,但是都必须在 Else 子句之前。If 块也可以是嵌套的。

当程序运行到一个 If 块(第二种语法)时,condition 将被测试。如果 condition为 True,则在 Then 之后的语句会被执行。如果 condition 为 False,则每个 ElseIf 部分的条件式(如果有的话)会依次计算并加以测试。如果找到某个为 True 的条件时,则其紧接在相关的 Then 之后的语句会被执行。如果没有一个 ElseIf 条件式为 True(或是根本就没有 ElseIf 子句),则程序会执行 Else 部分的语句。而在执行完 Then 或 Else 之后的语句后,会从 End If 之后的语句继续执行。

提示 根据单一表达式来执行多种可能的动作时,Select Case 更为有用。不过,TypeOf objectname Is objecttype 子句不能在 Select Case 语句中使用。

注意 TypeOf 不能与诸如 Long、Integer 以及其他不是 Object 的固定数据类型一起使用。

例:本示例示范 If...Then...Else 语句的两种格式:“区块格式”及“单行格式”,也示范了 If TypeOf...Then...Else 的用法。

Dim Number, Digits, MyString
Number = 53 ' 设置变量初始值。
If Number < 10 Then
Digits = 1
ElseIf Number < 100 Then
' 若判断结果为 True,则完成下一行语句。
Digits = 2
Else
Digits = 3
End If

' 使用“单行格式”语法来设置变量值。
If Digits = 1 Then MyString = "One" Else MyString = "More than one"

利用 If TypeOf 可以判断传入过程的控件是否为一文本框。

Sub ControlProcessor(MyControl As Control)
If TypeOf MyControl Is CommandButton Then
Debug.Print "You passed in a " & TypeName(MyControl)
ElseIf TypeOf MyControl Is CheckBox Then
Debug.Print "You passed in a " & TypeName(MyControl)
ElseIf TypeOf MyControl Is TextBox Then
Debug.Print "You passed in a " & TypeName(MyControl)
End If
End Sub

Select

根据表达式的值,来决定执行几组语句中的其中之一。
语法:
Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
[elsestatements]]
End Select

testexpression 必要参数。任何数值表达式或字符串表达式。

expressionlist-n 如果有 Case 出现,则为必要参数。其形式为
expression,expression To expression,Is comparisonoperator
expression的一个或多个组成的分界列表。To 关键字可用来指定一个数值范围。如果使用 To 关键字,则较小的数值要出现在 To 之前。使用 Is 关键字时,则可以配合比较运算符(除 Is 和 Like 之外)来指定一个数值范围。如果没有提供,则 Is 关键字会被自动插入。

statements-n 可选参数。一条或多条语句,当 testexpression 匹配expressionlist-n中的任何部分时执行。

elsestatements 可选参数。一条或多条语句,当 testexpression 不匹配 Case 子句的任何部分时执行。

说明:
如果 testexpression 匹配某个 Case expressionlist 表达式, 则在 Case 子句之后,直到下一个 Case 子句的 statements 会被执行;如果是最后一个子句,则会执行到 End Select。然后控制权会转移到 End Select 之后的语句。如果 testexpression 匹配一个以上的 Case 子句中的 expressionlist 表达式,则只有第一个匹配后面的语句会被执行。

Case Else 子句用于指明 elsestatements,当 testexpression 和所有的 Case 子句中的 expressionlist 都不匹配时,则会执行这些语句。虽然不是必要的,但是在 Select Case 区块中,最好还是加上 Case Else 语句来处理不可预见的 testexpression 值。如果没有 Case expressionlist 匹配 testexpression,而且也没有 Case Else 语句,则程序会从 End Select 之后的语句继续执行。

可以在每个 Case 子句中使用多重表达式或使用范围,例如,下面的语句是正确的:

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

注意 Is 比较运算符和使用在 Select Case 语句中的 Is 关键字并不相同。

也可以针对字符串指定范围和多重表达式。在下面的例子中,Case 所匹配的字符串为:等于 everything、按英文字母顺序落入从 nuts 到 soup 之间的字符串、以及 TestItem 所代表的当前值。

Case "everything", "nuts" To "soup", TestItem

Select Case 语句也可以是嵌套的。但每个嵌套的 Select Case 语句必须要有相应的 End Select 语句。

例:本示例使用 Select Case 语句来判断变量的值。示例中第二个 Case 子句包含了变量值,故只有此区块内的语句会被完成到。

Dim Number
Number = 8 ' 设置变量初值。
Select Case Number ' 判断 Number 的值。
Case 1 To 5 ' Number 的值在 1 到 5 之间,包含1 和 5 。
Debug.Print "Between 1 and 5"
' 下一个 Case 子句是本示例中唯一判断值为 True 的子句。
Case 6, 7, 8 ' Number 的值在 6 到 8 之间。
Debug.Print "Between 6 and 8"
Case 9 到 10 ' Number 的值为 9 或 10。
Debug.Print "Greater than 8"
Case Else ' 其他数值。
Debug.Print "Not between 1 and 10"
End Select

While

只要指定的条件为 True,则会重复执行一系列的语句。
语法:
While condition
[statements]
Wend

condition 必要参数。数值表达式或字符串表达式,其计算结果为 True 或 False。如果 condition 为 Null,则 condition 会视为 False。

statements 可选参数。一条或多条语句,当条件为 True 时执行。

说明:
如果 condition 为 True,则所有的 statements 都会执行,一直执行到 Wend 语句。然后再回到 While 语句,并再一次检查 condition,如果 condition 还是为 True,则重复执行。如果不为 True,则程序会从 Wend 语句之后的语句继续执行。

While...Wend 循环也可以是多层的嵌套结构。每个 Wend 匹配最近的 While 语句。

提示 Do...Loop 语句提供了一种结构化与适应性更强的方法来执行循环。

例:本示例使用 While...Wend 语句来增加计数变量的值。如果条件判断值为 True,则循环内的语句将一直执行下去。

Dim Counter
Counter = 0 ' 设置变量初值。
While Counter < 20 ' 测试计数器的值。
Counter = Counter + 1 ' 将计数器的值加一。
Wend ' 当 Counter > 19 时则循环终止。
Debug.Print Counter ' 在“立即”窗口中显示数字 20。



 

我在这里学编程 索引篇 共55页[1 2 3 4 5 6 7 >»<... 最后一页]