Dim rowAsIntegerDim col AsIntegerrow= cell.Rowcol = cell.Column +1Do While Cells(row, col).Value<> ""SelectCase Cells(row, col).ValueCase "东北" cell.Interior.Color = RGB(166, 166, 166)Case "西北" ...EndSelectrow=row+1Loop
通过 Find 找到的 cell 在 姓名 列,cell.Column + 1 则是 区域列,Cells(row, col) 则是 区域 列的第一个数据单元格(值为“华东”)。我们这里用到的循环语句是 Do While … Loop 结构。这个结构的一般形式是:
Do While condition[ statements ][ Exit Do ][ statements ]Loop
这个循环的执行流程是:只要 condition 为 True,则执行其中的 statements。注意:其中的 statements 都位于 [ ] 中,说明 Do While … Loop 可以没有要执行的语句,最极端的死循环语句为:
DoWhile TrueLoop
这个循环语句什么也不干,只是一味地循环——死循环!回到我们的例子。表达式 Cells(row, col).Value <> “” 的意思是:检查单元格的值是否为空,如果不为空,就一直循环。在循环体中,我们使用昨天学过的 Select Case 语句来检查单元格的具体值,根据单元格的值设置它的背景色。下面的赋值语句用来控制循环步进,一次一行,直到空白行,此时 单元格的值为空,Cells(row, col).Value <> “” 条件变为 False,退出循环。完整的代码如下图所示:图2 完整的示例代码Do While 循环有一个中途退出机制,那就是 Exit Do 语句。我们可以设置一个条件,在循环过程中检测这个条件,如果条件满足,则执行 Exit Do 语句退出 Do While 循环。利用这个退出机制重写上面的 Do While 循环,如下:
...v = Cells(row, col).ValueDo While True If v = "" Then Exit DoSelectCase vCase "东北" Cells(row, col).Interior.Color = RGB(162, 162, 162) ...EndSelectrow=row+1 v = Cells(row, col).ValueLoop
这段代码中,If v = “” Then Exit Do 就成了结束循环的出口。与确定初始值和终止值的区间循环的 For 语句不同,Do While 语句是根据条件测试结果来进行循环的。如果条件测试一开始就不为 True,则 Do While 循环也就不会执行。但如果条件测试一直为 True,那么 Do While 就会一直循环下去。所以,在循环体中一定要有改变条件测试结果的语句,才能确保 Do While 循环能够终止。如上面代码中的 row = row + 1,这是确保 Do While 循环终止的语句。这段示例代码还是有潜在风险的:如果单元格中一直有值怎么办?相关阅读Excel VBA 编程基础 — 语句(八)- 循环语句