友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
飞读中文网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

excel_vba_编程教程(完整版)-第49章

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




当你的过程需要在一个集合的所有对象或者一个数组的所有元素(数组将在第七章里涉及)之间循 
环时,应该使用For Each…Next循环。该循环不需要计数器变量,VB自己知道应该执行几次循环。 
我们拿工作表集合作个例子,要删除工作簿里面的工作表,你首先不得不要选择它,再选择“编辑” 
…“删除工作表”。如果要只留一个工作表在工作簿里面的话,你就不得不使用同样的命令,次数取 
决于工作表的总数。因为每个工作表都是工作表集合里的一个对象,所以使用For Each…Next循环 
来加速删除工作表。该循环的形式是:  
For Each 元素 In 组合   
  语句1  
  语句2  
  语句N  
Next '元素'  
在上面的语法中,元素一个数组或者集合的所有元素都将被赋予的变量,如果是数组的话,该变量 
必须为Variant数据类型;如果是集合的话,则必须是个对象数据类型。组合是集合的名称或者数 
组的名称。  
现在,我们来使用For Each…Next循环删除工作表。  
1。  在当前工程里插入新模块并且重命名为ForEachNextLoop  
2。  在模块ForEachNextLoop里输入下列过程:  
Sub RemoveSheets()  
  Dim mySheet As Worksheet  
  Application。DisplayAlerts = False  
  Workbooks。Add  
  Worksheets(〃Sheet2〃)。Select  
  For Each mySheet In Worksheets  
    ActiveWindow。SelectedSheets。Delete  
  Next mySheet   
End Sub   
3。  运行过程RemoveSheets。  
VB将会打开一个新工作簿并且删除除Sheet1之外的所有工作表。注意,变量mySheet代表工作表集 
合里的所有对象。除了按通常的方法将对象变量声明为Object类型,你还可以将它声明为更具体的 

                                          120 

… 页面 137…

对象类型,这样会更好。在这个具体的例子里,你可以使用下面的声明:  
Dim mySheet As Worksheet  
而不是:  
Dim mySheet As Object  
第一条指令Application。DisplayAlerts = False让Excel在过程运行的时候不要显示警告和信息。 
如果你忽略了它,Excel将会要你确认是否删除所选的工作表。接下来,过程打开一个新工作簿并 
且选择Sheet2。For Each…Next循环遍历每个工作表(从所选的Sheet2开始)并且删除它们。当过 
程结束的时候,该工作簿只剩一个工作表Sheet1了。  
这里是另外一个检查某个工作表是否存在于一工作簿中:  
Sub IsSuchSheet()   
  Dim mySheet As Worksheet   
  Dim counter As Integer   
  counter = 0  
  For Each mySheet In Worksheets   
     If mySheet。name = 〃Sheet2〃 Then   
       counter =counter + 1   
     End If   
  Next mySheet   
  If counter = 1 Then   
       MsgBox 〃This workbook contains Sheet2。〃   
  Else   
       MsgBox 〃Sheet2 was not found。〃   
  End if   
End Sub   

7。提前跳出循环  

有时候,你并不想等到循环自己结束,可能是用户输入了错误的数据,过程遇到了错误或者可能是 
任务已经完成并且没有必要作更多的循环。你可以提前跳出循环,而不必等到条件正常结束。VB 
有两种Exit语句:  
下面的过程示范如何使用Exit For语句提前跳出For Each…Next循环:  
1。  在当前模块里输入下列过程:  
Sub EarlyExit()   
  Dim myCell As Range  
  For Each myCell in Range(〃A1:H10〃)   
     If myCell。Value = 〃〃 Then   
       myCell。Value = 〃empty〃   
     Else   
       Exit For   
     End If   
  Next myCell   
End Sub   
EarlyExit过程检查特定区域A1:H10里每个单元格的内容,如果当前单元格为空,VB就会在当前单 
元格力输入文本“empty”。当VB遇到第一个非空单元格,它就会跳出循环。  
2。  打开一个新工作簿并且在单元格区域A1:H10的任意单元格里输入数据  
3。  运行过程EarlyExit  
技巧6…5 退出过程  
如果你想提前退出子过程,那么可以使用Exit Sub语句。如果该过程是一个函数的话,就使用Exit  
Function语句代替就行。  

                                          121 

… 页面 138…

8。循环嵌套  

到目前为止,你已经在本章里尝试了很多种循环了,每种过程示范每个循环结构的使用。然而,在 
编程中,一循环总是放在另外一循环中的。VB允许你将不同类型的循环(For和Do循环)“嵌套”在 
同一个过程里。当你编写循环嵌套时,请确保每个内部的循环在外部循环里面已经完成。另外,每 
个循环都必须有其自己独特的计数器变量。如果使用循环嵌套,你可以更有效地执行特定的任务。 
下面显示的过程ColorLoop示范如何嵌套一个For…Next循环在另一个For…Next循环里面:  
Sub ColorLoop()   
  Dim myRow As Integer   
  Dim myCol As Integer   
  Dim myColor As Integer   
  myColor = 0   
  For myRow = 1 To 8   
     For myCol = 1 To 7   
       Cells(myRow; myCol)。Select   
       myColor = myColor + 1   
       With Selection。Interior   
         lorIndex = myColor   
         。Pattern = xlSolid   
       End With   
     Next myCol   
  Next myRow   
End Sub   
上面的过程ColorLoop使用了两个For…Next循环来改变工作表中前面八行和七列里的每个单元格 
的颜色。当外部的循环在追踪行号的时候,内部的循环在做更多的事情,它首先确定当前的列号, 
基于当前的行号的列号选择适当的单元格,然后给所选的单元格设置颜色。  
内部的For…Next循环给工作表的第一行的七个单元格(A1; B1; C1; D1; E1; F1和G1)设置不同 
的颜色。当变量myCol大于7时,VB跳回外部循环并且变量myRow增加1,再回到内部循环去设置下一 
行单元格的颜色。当过程结束时,56个单元格(8*7)被设置了当前调色板上可用的所有颜色。第 
一个单元格,A1,被设置了黑色(颜色索引号为1),第二个单元格B1则被设置为白色了(颜色索引 
号为2)。每次单元格地址变化——Cells(myRow; myCol)。Select——变量myColor的内容也会改变 
——myColor = myColor + 1  

9。接下来…  

在本章里,你学习了如何在循环里重复一组代码。通过使用好几种类型的循环,你看到了每种循环 
稍稍不同地进行重复。你有了经验后,你将更容易地选择合适的控制结构来执行你的任务。  
在本书的后续章节中,将会有更多的使用循环的例子。例如,在下章里,你将看到如何使用数组合 
嵌套的循环来创建一个VBA过程,该过程将帮你选择彩票号码。在下章里,你将学习如何处理大量 
的数据,而不会迷失在变量的海洋里。  

                         第七章 利用 VBA 数组管理数据清单和表格  

作者:Julitta Korol      翻译:Tiger Chen Feb 1’ 2005  
在前面的章节里,你在很多VBA过程里使用变量来储存特定的对象信息,属性或者数值。对于你想 
要处理的单个数值,你可以声明变量,但是,对于一系列的数值呢?如果你不得不编写VBA过程来 
处理大量的数据,你就得声明足够的变量来处理所有的数据。你能想象将世界上所有国家的货币交 
换利率储存在你的程序的噩梦吗?要创建一个表格来储存这些必要的数据的话,你至少要给每个国 
家创建三个变量:国家名称,货币名称和交换比率。幸运的是,VB有方法来解决该问题。将相关的 
变量归为一类,你的VBA过程可以轻松处理大量的数据。在本章里,你将学习如何使用数组来操作 
数据清单和数据表。  

                                          122 

… 页面 139…

1。了解数组  

在VB里,数组一种特殊的变量,代表拥有相同数据类型(字符串,整型,货币,日期,等等)的一 
组相似的数值。两种最通常的数组是一维数组(清单)和二维数组(表格)。有时,一维数组被称 
为清单。一维数组或编号清单的例子有:购物清单,星期名称的清单或员工清单。清单里面的每个 
值都有一个索引。下面是一个含有六个成员的清单的图解:  
项目(1)     
项目(2)     
项目(3)     
项目(4)     
项目(5)     
项目(6)     
注意,列代表一维的当前为空的数组。如果你想用数据填充这个数组,只要使用一个变量名称,附 
带括符编号就行,而不需要使用六个不同的标签。在上面的图解里,“项目”一变量名称,括号里 
的数字明确数组里的每个成员。  
数组的所有成员都必须具有相同的数据类型,换句话说,一个数组不能同时储存字符串和整型数据。 
接下来的图解是一维数组的两个例子:第一个叫做cities的一维数组由文本组成(字符串数据类型 
——),第二个叫做lotto的一维数组则包含六个抽奖号码(整数数据类型——%)。  
  
    一维数组cities (字符串数据类型)              一维数组lotto% (整数数据类型)  
           Cities(1)  Baltimore                             Lotto(1)  25  
           Cities(2)  Atlanta                               Lotto(2)  4  
           Cities(3)  Boston          
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!