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

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

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



         Dim ws As Worksheet   
         Application。DisplayAlerts = False   
         For Each ws In Worksheets   
               If InStr(ws。Name; 〃wages〃) Then   
                     ws。Delete   
               End If   
         Next   
    End Sub   
当你编写你自己的VBA过程时,你可能会碰到这样一种情况,那就是,没有方便的内置集合来处理 
你的任务。解决办法就是创建自定义集合。从第七章,你就已经知道如何通过动态或静态数组来实 
用多个数据。因为,集合有允许你添加、移动和计算其成员的内置属性和方法,所以使用集合比使 
用数组容易得多。  

2。声明自定义集合  

要创建一个用户定义的集合的话,你应该先声明一个Collection类型的对象变量,该变量在Dim语 
句里和关键字New一起声明,如下所示:  
Dim 集合名称 As New Collection   

3。给自定义集合添加对象  

在声明Collection对象后,你就可以使用Add方法往集合里插入新成员了。用来组成该集合的对象 
不必需要是同样的数据类型。Add方法如下所示:  
object。Add item; key; before; after   
你只需要明确对象和成员,object是集合名称,它是使用在Collection对象声明中的相同名称;item 
是你要添加到集合里的对象。尽管其它的参数是可选的,但是它们也很有用。集合里的成员自动从 
1开始分配号码,了解这个很重要。然而,它们也可以给分配一个独特的键。除了通过索引号(1, 
2,3等等)访问某个特定的成员之外,你也可以在集合添加对象的时候给该对象分配一个键。例如, 
如果你创建一个自定义工作表集合,那么你应该使用工作表名称作为键;要鉴别学生或者员工集合 
里的单个人员的话,你就可以使用社会保险号码(SSN)作为他们的键。  
如果你想要确定对象在集合里面的位置时,那么你就应该使用before或者after参数(不要同时使 
用它们)。参数before在此之前添加新对象的对象,而参数after是一个对象,在它之后添加新的对 
象。  
接下来过程Getments声明了一个叫做colNotes的自定义集合,该过程提示输入作者姓名,然后 
在活动工作簿里遍历所有的工作表,以找到该作者的批注。只有某个特定作者输入的批注会加入自 
定义集合。过程给第一个批注分配一个键,然后将剩余的批注添加到集合里,每次都将它们置于最 
后添加的批注之前(注意before参数的使用)。如果集合至少有一个批注,那么过程会在一个信息 
框显示由参数key确定的批注内容。注意,参数key如何用来引用集合里的成员。然后,过程将集合 
里的所有批注打印到立即窗口。文本函数(Mid和Len)用来仅获取批注内容,而排除作者姓名。接 
着,返回工作簿里的批注数目和自定义集合里的批注数目到Count属性。在试验过程Getments 
之前,我们先得按照以下步骤创建一个工作簿:  
                                            215 

… 页面 232…

1。 打开一个新工作簿并保存为Chap11。xls  
2。 在工作表Sheet1的任意单元格上单击右键,并从快捷菜单上选择插入批注,随意输入一些文本。 
    在批注框之外的任意地方点击一下,退出批注编辑模式。使用相同的技巧在工作表Sheet2再插 
    入两个批注,给每个批注输入不同的文本。在当前工作簿里插入新工作表(Sheet4),并插入一 
    个批注。现在你应该在三个工作表里一共有四个批注。  
3。 选择“工具”|“选项”并且点击“常规”页,用户名文本框里面应该显示的是你的名字,删除 
    你自己的名字,并输入Joan Simth,并点击确定。现在,在工作表Sheet2和Sheet4的任意地方 
    各输入一个批注。这些批注应该会自动地印上Joan Smith的名字。当你输入完批注后,回到选 
    项对话框,并将常规页上的用户名改回你自己的名字。  
4。 切换到VB编辑器,并将VBA工程重命名为ObjColClass  
5。 在当前工程里添加一新模块,并重命名为MyCollection  
6。 输入过程Getments,显示如下:  
    Sub Getments()   
         Dim sht As Worksheet   
         Dim colNotes As New Collection   
         Dim myNote As ment   
         Dim I As Integer   
         Dim t As Integer   
         Dim fullName As String   
         fullName = InputBox(〃Enter author's full name:〃)   
         For Each sht In ThisWorkbook。Worksheets   
               sht。Select   
               I = ActiveSheetmentsunt   
              For Each myNote In ActiveSheetments   
                    If myNote。Author = fullName Then   
                         MsgBox myNote。Text   
                          If colNotesunt = 0 Then   
                               colNotes。Add Item:=myNote; key:=〃first〃   
                         Else   
                               colNotes。Add Item:=myNote; Before:=1   
                         End If   
                    End If   
              Next   
               t = t + I   
         Next   
         If colNotesunt  0 Then MsgBox colNotes(〃first〃)。Text   
         MsgBox 〃Total ments in workbook: 〃 & t & Chr(13) & _   
               〃Total ments in collection:〃 & colNotesunt   
         Debug。Print 〃ments by 〃 & fullName   
         For Each myNote In colNotes   
              Debug。Print Mid(myNote。Text; Len(myNote。Author) + 2; _  
                    Len(myNote。Text))   
         Next   
   End Sub   
7。 运行过程Getments并且查看结果  

4。从自定义集合移出对象  

从自定义集合里移出成员和添加成员一样简单。使用Remove方法可以移出对象,如下所示:  
object。Remove item  
object是自定义集合的名称,含有你要移出的对象;item是你要从集合移出的对象。  

                                          216 

… 页面 233…

我们来修改你在前面部分准备的过程Getments,示范从集合里移出成员。在该过程结尾,我们 
将当前集合colNotes里成员的内容一个一个地显示出来,并且询问用户,使用应该将该成员从该集 
合移出。  
1。 将下面的声明加入到过程Getments的声明部分:  
    Dim response   
    Dim myId As Integer   
    第一条语句声明了一个叫做response的变量,你将使用该变量来储存Msgbox函数的结果。第二 
    条浴巾声明变量myld来储存集合对象的索引号。  
2。 定位过程Getments的下述语句:  
    For Each myNote In colNotes   
    在上面的语句之后,添加下述语句:  
    myId = 1   
3。 定位到过程Getments的下述语句:  
    Debug。Print Mid(myNote。Text; Len(myNote。Author) + 2; _   
      Len(myNote。Text))   
    在该语句后,输入下面的代码块:  
      response = MsgBox(〃Remove this ment?〃 & Chr(13) _   
      & Chr(13) & myNote。Text; vbYesNo + vbQuestion)   
      If response = 6 Then   
           colNotes。Remove Index:=myId   
      Else   
           myId = myId + 1   
      End If   
4。 在该过程输入下述语句:  
      Debug。Print 〃The following ments remain in the collection:〃   
      For Each myNote in colNotes   
           Debug。Print Mid(myNote。Text; Len(myNote。Author) + 2; _   
           Len(myNote。Text))   
      Next   
5。 运行过程Getments,并且将显示在信息框里批注之一删除。  
修改后的过程Getments2可以在附带的CD里找到。该过程将指定的批注从自定义集合里清除,但 
是不会从工作表里删除批注。  
技巧11…1 给集合重新编号  
当移出对象后,集合回自动重新编号,因此,你可以使用1作为Index参数,来删除自定义集合里的 
所有对象,如下所示:  
Do While myCollectionunt 》0  
    myCollection。Remove Index:=1  
Loop  
插入:模块还是类模块?  
在VB编辑器的插入菜单里有两个模块命令:模块和类模块。这些在本章的开头有定义。到目前为止, 
你已经使用过标准模块来创建Sub和Function过程。你将第一次在本章使用类模块来创建自定义对 
象并且定义它的属性和方法。  

5。创建自定义对象  

创建一个新的,非标准的VBA对象,需要在你的工程里插入类模块并且在模块里添加代码。然而, 
在做此之前,你需要对类是什么要有一个基本的了解。  
如果你回头看一下本章的开头,那么你就会知道类从某种意义上说是对象模板。一个经常使用的类 
比就是将类比作一个曲奇剪切机。就像曲奇剪切机决定某个曲奇做成什么样一样,类的定义决定某 
个对象应该是什么样以及如何做。在实际使用一个对象类之前,你必须先创建一个类的新示例。对 
象示例就是这些曲奇。每个示例都有其类定义的特点(属性和方法),正如你可以使用相同的区旗
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!