Do While循环是Visual Basic中的一种循环语句,它可以在满足指定条件时重复执行一系列语句。Do While循环的基本语法如下:
Do [Statements] Loop While [condition]
其中,[Statements] 是要重复执行的语句,[condition] 是一个布尔表达式,当其值为 True 时,循环体会重复执行。Do While 循环在执行时会先判断 [condition] 的值是否为 True;如果为 True 则执行循环体内的语句;如果为 False 则跳出循环。
Do While 循环有一些特殊情况需要注意:
VB有两种Do循环语句,只要或者直到某个条件为真,它们就会重复一系列的语句。只要条件为真,Do…While循环就允许你重复某个操作。这个循环的语法如下:
Do While 条件
语句1
语句2
语句N
Loop
当VB遇到这个循环时,它首先条件的真假,如果条件为假,循环内部的语句就不会被执行,VB将继续执行关键字Loop后面的第一条语句。如果条件为真,循环里面的语句则会被一条一条地执行,直到遇到Loop语句。Loop语句告诉VB重复这个过程,只要Do While语句里的条件为真的话。
现在,我们来看看如何在Excel里面好好利用Do…While循环语句。在前面的章节里,你学习了如何根据一个单元格的内容来作决定。让我们再进一步,看看如何在一系列单元格上作同样的决定。该决定是给一列中的非空单元格设置粗体格式。
1.打开一个空工作簿,并且命名为Chap06.xls
2.切换到VB编辑屏幕,并且将新工程改名为Repetition (Chap06.xls)
3.在工程Repetition里插入一新模块,并重命名为DoLoops
4. 输入如下过程:
Sub ApplyBold()
Do While ActiveCell.Value <>""
ActiveCell.Font.Bold = True
ActiveCell.Offset(1, 0).Select
Loop
End Sub
5. 在单元格A1:A7里输入任意数据(文本或数字)
6. 选择单元格A1
7. 选择“工具”-“宏”-“运行宏”。在宏对话框里,双击过程ApplyBold(或者选中该过程然后点击运行)
当运行过程ApplyBold时,VB首先评估Do While语句里的条件——ActiveCell.Value<>””,该条件意思是:只要当前单元格的值不是一个空字符串(””),就执行下列语句。因为你已经在单元格A1里输入了数据并且激活了该单元格(见第六步),第一个测试返回真,所以VB执行语句ActiveCell.Font.Bold = True,它的意思是给当前单元格设置粗体格式。接下来,VB选择了下一行的单元格(参见第二章里的Offset属性)。因为该语句之后就是关键字Loop,VB返回到Do While语句,并且再次检查条件。如果新选中的单元格(当前激活的单元格)不为空,那么VB就会重复循环内部的语句。该过程会继续,直到检查到单元格A8的内容为空,测试条件的结果为假,因此,VB就跳过循环内部的语句。并且在关键字Loop后面没有其它的语句了,所以该过程就结束了。
我们来看看另外一个Do…While循环的例子。是不是很想知道如何在Excel的状态栏里显示今天的日期和时间?这里有个例子,如何让它显示十秒钟:
Sub TenSeconds()
Dim stopme
stopme = Now + TimeValue("00:00:10")
Do While Now < stopme
Application.DisplayStatusBar = True
Application.StatusBar = Now
Loop
Application.StatusBar = False
End Sub
在上面的程序里,只要函数Now返回的时间小于变量stopme的值,Do…While循环里的语句就会被执行。变量stopme储存值为当前时间加上十秒(参见在线帮助里的另外一个使用内置函数TimeValue的例子)。
语句Application.DisplayStatusBar告诉VB打开状态栏的显示,下条语句则是将当前日期和时间放在状态栏上。当显示时间时(只显示10秒)用户无法使用系统(光标变成了沙漏)。十秒钟后(也就是,当条件Now < stopme为真),VB跳出循环并且执行关键字Loop后面的语句,该语句将状态栏返回到默认信息“就绪”。
技巧:什么是循环?
循环是一种导致一部分程序代码重复执行的编程结构。VBA提供了多种结构在你的过程里执行循环:
Do…While, Do…Until, For…Next, For…Each, and While…Wend
Do…While循环还有另外一种语法,你可以在循环的底部测试条件,例如:
Do
语句1
语句2
语句N
Loop While 条件
当你在循环的底部测试条件时,意味着循环里面的语句至少运行了一次。看一下这个例子:
Sub SignIn()
Dim secretCode As String
Do secretCode = InputBox("Enter your secret code:")
If secretCode = "sp1045" Then Exit Do
Loop While secretCode <> "sp1045"
End Sub
注意,在条件被测试之时,VB至少已经执行了一次循环里的语句。除了将条件放在循环之后外,过程SignIn示范如何使用条件跳出循环。当Exit Do语句执行时,循环便立即停止。
技巧:避免无限循环
如果你没有正确地设计你的循环,你将导致一无限循环——永无休止的循环。你将无法使用Esc键来停止该循环。在下面的过程里,因为用户忘了放置测试条件而导致了永无休止的循环:
Sub SayHello()
Do
MsgBox "Hello."
Loop
End Sub
进阶话题1.函数闭包1.1 实例代码function createCountdownTimer(second)local ms = second * 1000--ms为countDown的Upvaluelocal...
枚举类最基本的用法是实现一个类型安全的枚举。枚举常量用逗号分隔,每个枚举常量都是一个对象。enum class Color{RED,BLACK,BLUE...
Go 语言支持以下系统:LinuxFreeBSDMac OS X(也称为 Darwin)Window安装包下载地址为:https://golang.google.cn/dl/。各个系统...
介绍创建一个遮罩层,用于强调特定的页面元素,并阻止用户进行其他操作。实例演示引入通过以下方式来全局注册组件,更多注册方式...
常用于主动操作后的反馈提示。与 Notification 的区别是后者更多用于系统级通知的被动提醒。基础用法从顶部出现,3 秒后自动消失...
Collapse 折叠面板通过折叠面板收纳内容区域基础用法可同时展开多个面板,面板之间不影响templateel-collapse v-model="activeNa...
创建第一个 Bootstrap 4 页面当你成功安装好 Bootstrap4 后,就可以开始创建 Bootstrap4 的第一个页面了。添加HTML5doctypeBoots...