阅读(2318) (0)

VB的For…Next循环语句

2016-11-22 18:46:19 更新
当你知道你需要重复运行多少次某段语句时,可以使用For…Next语句。它的语法如下:
For 计数器 = 开始 To 结束 [步长]
语句1
语句2
语句N
Next [计数器]

括号里面的代码是可选的。计数器是个储存反复次数的数字型变量,开始是你期望的起始计数点,结束则表明循环应该执行多少次。


例如,你想要重复执行循环里的语句5次,使用下述For语句:

For counter = 1 To 5
你的语句
Next

当VB遇到关键字Next时,它将回到循环的开始处,并且再次执行循环里面的代码,直到计数器到达结束值。一旦计数器的值大于关键字To后面的数值,VB就会跳出循环。因为计数器变量在每次执行循环后会自动地变化,它早晚会超出结束的值。每次VB执行循环里的语句后,变量计数器的值会默认地增加1,你可以使用Step语句来改变这个默认设置。例如,要使计数器每次增加3,就可以使用以下语句:

For counter = 1 To 5 Step 3
你的代码
Next counter

当VB遇到上面的语句,它会执行循环里的语句两次。在第一次的循环里,counter等于1,第二次则等于4(3+1)。在执行两次循环后,counter就等于7(4+3),这导致VB退出该循环。


注意,步长(Step)是可选的。可选语句总是显示则方括号里面(参加本段开头部分的语法)。步长不需要明确,除非它不等于1。你可以在Step后面放个负值作为步长,那么VB每次遇到关键字Next后都会将计数器减小。


关键字Next后面的变量名称(counter)也是可选的,然而,好的编程习惯是要强制在关键字Next后面加上计数器。


如何将For…Next循环使用在Excel里面呢?假使你只想要在你的销售报告里面包括某几个特定月份的产品销售,当你从Access导入数据时,你同样也会将那些销售额为0的数据行一起导入。你如何快速取出数据为0的行呢?尽管,有很多种方法可以解决这个问题,但是,我们来看看如何使用For…Next循环来处理这个问题吧。


1.  在VB窗口,在当前工程里插入一个模块并且命名为ForNextLoop
2.  在ForNextLoop模块里输入下列过程:
Sub DeleteZeroRows()
Dim totalR As Integer
Dim r As Integer
Range("A1").CurrentRegion.Select
totalR = Selection.Rows.Count
Range("B2").Select
For r = 1 To totalR-1
If ActiveCell = 0 Then
Selection.EntireRow.Delete
totalR = totalR – 1
Else
ActiveCell.Offset(1, 0).Select
End If
Next r
End Sub

3.  切换到Excel界面,并且准备下述表格:


For…Next循环


4.  运行过程DeleteZeroRows。
我们来一行接一行地检查一下过程DeleteZeroRows。开始两语句计算当前区域的总行数,并且将该值储存于变量totalR,接下来,VB选择单元格B2然后遇到关键字For。因为电子表格的第一行包含了列标题,所以要从总行数里减掉1(totalR-1)。


VB将需要执行循环里面的指令6次。嵌套在循环里面的条件语句(If…Then…Else)告诉VB根据当前活动单元格的值作出决定。如果该值为0,VB就删除当前行,并且将总行数减掉1。否则,条件为假,因此,VB将选择下一行的单元格。


VB每完成一次循环,它就跳到关键字For来比较r的值和totalR-1的值。当过程结束后,销售表里就不会包含没有销售的产品了。


技巧: 成对语句
For和Next必须是成对的,如果有一个漏掉了,VB就将产生一个错误信息“For没有Next”