靠谱电子书 > 经管其他电子书 > excel_vba_编程教程(完整版) >

第37部分

excel_vba_编程教程(完整版)-第37部分

小说: excel_vba_编程教程(完整版) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



何循环你的代码。  

1。Do Loops: Do…While 和 Do…Until  

VB有两种Do循环语句,只要或者直到某个条件为真,它们就会重复一系列的语句。只要条件为真, 
Do…While循环就允许你重复某个操作。这个循环的语法如下:  
Do While 条件  
  语句1   
  语句2  
  语句N   
Loop   
当VB遇到这个循环时,它首先条件的真假,如果条件为假,循环内部的语句就不会被执行,VB将继 
续执行关键字Loop后面的第一条语句。如果条件为真,循环里面的语句则会被一条一条地执行,直 
到遇到Loop语句。Loop语句告诉VB重复这个过程,只要Do While语句里的条件为真的话。  
现在,我们来看看如何在Excel里面好好利用Do…While循环语句。在第四章里,你学习了如何根据 
一个单元格的内容来作决定。让我们再进一步,看看如何在一系列单元格上作同样的决定。该决定 
是给一列中的非空单元格设置粗体格式。  

                                           114 

… 页面 131…

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后面的语句,该语句将状态栏 
返回到默认信息“就绪”。  
技巧6…1 什么是循环?  
循环是一种导致一部分程序代码重复执行的编程结构。VBA提供了多种结构在你的过程里执行循环: 
Do…While; Do…Until; For…Next; For…Each; and While…Wend  
Do…While循环还有另外一种语法,你可以在循环的底部测试条件,例如:  
Do   
  语句1   
  语句2  
  语句N   
Loop While 条件  
当你在循环的底部测试条件时,意味着循环里面的语句至少运行了一次。看一下这个例子:  

                                             115 

… 页面 132…

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语句执行时,循环便立即停止。  
技巧6…2 避免无限循环  
如果你没有正确地设计你的循环,你将导致一无限循环——永无休止的循环。你将无法使用Esc键 
来停止该循环。在下面的过程里,因为用户忘了放置测试条件而导致了永无休止的循环:  
Sub SayHello()   
 Do   
       MsgBox 〃Hello。〃   
 Loop   
End Sub  
你必须按下Ctrl+Break键(译者:现在,有些电脑使用别的组合键来中断程序。例如我的手提电脑 
就是Fn+Break)才能终止该无限循环,当VB显示信息“代码执行被中断”时,点击结束以退出过程。  
另外一种方便的循环Do…Until,也可以让你重复一条或多条语句,直到条件为真。换句话说, 
Do…Until语句是只要当某个条件为假的时候重复一块代码。这是它的语法:  
Do Until 条件  
    语句1  
    语句2  
    语句N  
Loop   
使用上面的语法,你可以将前面的过程ApplyBold重新写成下面的方式:  
Sub ApplyBold2()   
  Do Until IsEmpty(ActiveCell)   
     ActiveCell。Font。Bold = True   
     ActiveCell。Offset(1; 0)。Select   
  Loop   
End Sub   
该过程的第一条语句意思是执行下列语句,直到遇到第一个空单元格。结果上,如果当前单元格不 
为空,VB就执行循环内部的那两条语句。只要条件IsEmpty(ActiveCell)测试为假,这个过程就反 
复继续着。因为过程ApplyBold2在循环的前面就测试条件,如果第一个单元格就为空的话,循环内 
部的语句就不会运行。在下一段,你将有机会试验它。  
和Do…While循环类似,Do…Until循环也有第二种语法让你在循环的底部测试条件:  
Do   
    语句1  
    语句2  
    语句N  
Loop Until 条件  
如果你想要程序至少执行一次,那么就将条件放置于Loop语句一行,无论条件的值是什么。  
我们来试验一下下面的例子,该例子将工作簿里的空工作表删除。  
1。  在你前面创建的DoLoop模块里输入下面的过程DeleteBlankSheets:  
Sub DeleteBlankSheets()   
  Dim myRange As Range   
  Dim shcount As Integer   
   shcount = Worksheetsunt   
  Do   

                                           116 

… 页面 133…

     Worksheets(shcount)。Select   
     Set myRange = ActiveSheet。UsedRange   
     If myRange。Address = 〃A1〃 And _   
       Range(〃A1〃)。Value = 〃〃 Then   
         Application。DisplayAlerts = False   
         Worksheets(shcount)。Delete   
         Application。DisplayAlerts = True   
     End If   
     shcount = shcount … 1   
  Loop Until shcount = 1   
End Sub   
2。  手动在当前工作簿里面插入一些工作表。在一个工作表里输入一些数据与单元格A1;另一个工 
    作表的单元格B2和C10里输入一些数据;第三个工作表里不要输入任何数据。  
3。  运行过程DeleteBlankSheets。当你运行该过程时,无论何时,只要两个条件都为真——属性 
    UsedRange返回单元格A1并且A1为空,VB就会删除所选的工作表。属性UsedRange应用于对象 
    Worksheet,包含工作表中的每个非空单元格以及他们之间的空单元格。例如,如果你在单元 
    格B2和C10里输入里东西(译者:包括格式),使用了的区域为B2:C10。如果你后面又在A1 
    里输入了数据,那么UsedRange将会是A1:C10。已使用区域是一个从左上角最远的地方到 
    右下角最远的地方包围起来的区域。因为工作簿至少要保留一个工作表,所以代码执行到变量 
    shcount等于1时就停止了。语句shcount = shcount…1确保变量shcount在循环里面的代码每执 
    行一次就减少1。变量shcount的值在过程的开始处用下列语句:Worksheetsunt初始化了。 
    注意,当删除工作表的时候,Excel通常会显示一个确认对话框,如果你不想看到这个确认提 
    示框的话,就是要下列语句:  
    Application。DisplayAlerts = False   
    当你完成任务时,使用下列语句,再打开系统信息。  
    Application。DisplayAlerts = True   
技巧6…3 计数器  
计数器是个数字变量,用来追踪已进行的项目次数。上面的过程DeleteBlankSheets声明了变量 
shcount来追踪检查的工作表个数。计数器变量必须在程序的开始就被初始化(赋值),这可以确保 
你总能在开始使用之前知道计数器的确切值。计数器可以按照确定的值增加或减少。参见本章后面 
的使用计数器的For…Next循环。  

2。观察过程执行  

当你使用循环结构运行过程时,有时很难看到该过程会按预期地执行。有时,你很想观察程序慢慢 
地运行,这样你就能够检查该程序的逻辑。我们来看看VB如何让你一行接一行地执行程序。  
1。  在单元格区域A1:A5里面输入任何数据  
2。  选择单元格A1  
3。  在Excel窗口,选择“工具”…“宏”…“运行宏”  
4。  在宏对话框里,选择ApplyBold2并点击“单步执行”按钮。VB编辑屏幕将出现,过程的名称被 
    黄色加亮(参加图6…1)。注意代码窗口左边的黄色箭头。  

                                          117 

… 页面 134…

图6…1 观察程序一行接一行地执行  
5。  使VB窗口缩小一些,可以点击VB标题栏的“还原”按钮缩小窗口  
6。  按下F8,黄色加亮区将跳到DoUntil IsEmpty(ActiveCell)行  
7。  继续按F8,同时观察代码和工作表窗口  

3。While…Wend 循环  

While…Wend循环功能上和Do…While循环一样,它是从Microsoft Basic的早期版本遗留下来的并 
且VBA保留它也是为了支持兼容性。该循环以关键字While开始以关键字Wend结束。这是它的语法:  
While 条件  
  语句1  
  语句2  
  语句N  
Wend   
条件在循环的上面就被测试,只要提供的条件为真,这些语句就会被执行。一旦条件为假,VB就将 
退出该循环。我们来看一个使用While…Wend循环结构的过程:  
1。  在当前工程里插入一新模块,重命名为WhileLoop  
2。  输入下述过程:  
Sub ChangeRHeight()   
  While ActiveCell 〃〃   
     ActiveCell。RowHeight = 28   
     ActiveCell。Offset(1; 0)。Select   
  Wend   
End Sub   
3。  在单元格区域B1:B4里输入一些数据  
4。  选择单元格B1并且运行过程ChangeRHeight。当当前单元格不为空时,上面的过程 
    ChangeRHeight将设置行高位28。  

                                          118 

… 页面 135…

4。For…Next 循环  

当你知道你需要重复运行多少次某段语句时,可以使用For…Next语句。它的语法如下:  
For 计数器 = 开始 To 结束 '步长'  
  语句1  
  语句2  
  语句N  
Next '计数器'  
括号里面的代码是可选的。计数器是个储存反复次数的数字型变量,开始是你期望的起始计数点, 
结束则表明循环应该执行多少次。  
例如,你想要重复执行循环里的语句5次,使用下述For语句:  
For counter = 1 To 5   
     

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的