前面文章我们讲过了for循环,在for循环中通过To指定循环从多少到多少,但是还有很多时候我们并不知道我们的表格未来到底会有多少行多少列,总不能每一次都修改代码。今天我们再次讲多重循环和while循环。

多重循环:
其实就是循环的嵌套,没什么特殊的地方。但是要注意逻辑关系不要弄错了;变量的范围不要放错了,例如你定义一个变量是要求它每一次循环都恢复设定值还是跟随循环结束恢复等等。
While循环:
While循环我们只需要指定它执行的条件而不需要知道到底需要执行多少次才结束,基本结构是Do While...Loop。例如:
Do While i<7
需要执行的代码
Loop
1、比如我们循环执行代码直到这一列的末尾,则可以使用:“Cells(i,1)<>”来表示只循环有数据的单元格,遇到没有数据的则停止,不过这里又有个问题。我前面文章说过,空格键其实也算有字符存在的。这里却判断不出仅包含空格键的单元格。所以可以用“Trim(Cells(i,1))<> “””来判断更好。
2、又比如,我们针对一个表格并不确定表列名在哪一列,也可以用这种循环来寻找。
Do While Cells(1, i)<>"姓名"
这种意思就是循环每一列去查找姓名在哪一列。但是这里存在如果没有姓名的列最终会报错,这个留待后面来说。
需要注意的是:因为不指定循环次数只指定条件,所以要注意不要出现死循环。

循环体的一些特殊结构:
While……Wend:与Do While……Loop区别不大,少写了几个字母另外Do While可以用Exit随时跳出循环而它不行所以用的少。
Do … Loop While:在循环之前会先执行一次需要循环的代码(部分特殊时候方便)
Do Until … Loop 和 Do … Loop Until :意思是循环直到满足什么条件时终止循环。Loop放前面也是最少会执行一次代码的区别。
:
Exit和Goto:
很好理解Exit就是跳出本层循环(Exit for),而Goto就是跳转到指定本宏的指定位置(需要设置好标签)。
For …… To
If ……Then Exit For
Next i
-------------------------
For …… To
For……To
GoTo Lables
Next i
……
Lables:
……
由此可见GoTo拥有很强的灵活性,在一个宏里面可以任意跳转。但是也正是这个原因,所以我们要尽量少用,因为大量使用会导致代码的可读性下降,整个代码变得很乱。那我们为什么还要学习它呢?
On Error Goto:放在代码里面意味如果执行出现错误,则跳转到指定的代码位置,就如同前面While在列中寻找栏目一样,如果列中没有,那么循环会一直一列一列的循环下去,直到达到Excel规定的最大列数再报错。那么如果我们添加这个就会根据我们的代码去进行处理而不是单纯的报错。
值得注意的是异常处理代码必须放在整个程序的最后,或者说,在“Exit Sub”和End Sub”之间的代码应当全部用于异常处理。如果把正常功能代码写在这个区间,除非程序发生运行错误,否则这些功能不可能被执行。
当然还有更适合新手的On Error Resume Next 可以忽略所有错误,但是也导致我们不能及时了解程序的错误信息。
愿意和我一同学习的可以关注我,有不明白的可以评论留言,过程虽然枯燥。但是我相信学习完了,对工作肯定是有帮助的。