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

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

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



象示例就是这些曲奇。每个示例都有其类定义的特点(属性和方法),正如你可以使用相同的区旗 

                                          217 

… 页面 234…

剪切机制作许多曲奇一样,你可以创建多个类的示例。你可以独立改变相同类中的任意示例中的类 
的每个示例的属性。  
类模块允许你定义你自己的自定义类,连同自定义属性和方法。回忆一下,属性是定义对象某个特 
点的品质,例如外形、位置、颜色、标题等等。方法是对象可以执行的操作。通过在类模块里面编 
写属性过程,你可以给你的自定义对象创建属性。对象的方法也可以在类模块里面通过编写子过程 
或者函数过程来创建。在类模块里创建完你的对象后,你可以象使用其它的内置对象一样使用它。 
你也可以将对象类导出VBA工程给其它能使用VBA的应用程序使用。  

6。创建类  

本章的剩余部分将示范创建和使用一个叫做CEmployee的自定义对象的过程。该对象将代表一个员 
工,该CEmployee对象将具有属性例如:Id,FirstName,LastName和Salary。它也有一个方法,可 
以修改当前薪水。  
1。 在工程浏览器窗口选择ObjColClass (Chap11。xls),并选择“插入”|“类模块”  
2。 选择工程浏览器里的类模块,并使用属性窗口将其重命名为CEmployee。  
技巧11…2 给类模块命名  
每次创建新类模块的时候,请给个它一个有意义的名称。将类模块命名为你想要在你的VBA过程使 
用的名称。你给你的类选择的名称应该易于理解并且明确对象类要代表的东西。作为一个规则,对 
象类名称一般前面有一个大写字母“C”。  

7。变量声明  

在添加和重命名类模块后,下一步就是声明变量,用来存储你要存储在该对象里数据。你想要存储 
与对象的每个数据都得分配一个变量。类的变量被称为数据成员,并且使用关键字Private声明。 
该关键字确保这些变量只在该类模块里面可用。使用关键字Private代替常用的Dim语句,隐藏该数 
据成员并且避免应用程序的其它部分引用它。只有定义这些变量的类模块中的过程才可以修改这些 
变量的值。  
因为这些变量的名称也充作属性名称,所以要给你的对象数据成员使用有意义的名称。传统上使用 
m_作为变量名称的前缀,以表明它们是类的数据成员。  
1。  在类模块CEmployee的顶端输入下述声明:  
    Option Explicit   
    'declarations   
    Private m_LastName As String   
    Private m_FirstName As String   
    Private m_Salary As Currency   
    Private m_Id As String   
    注意,每个数据成员变量的名称都以前缀“m_”  

8。定义类的属性  

使用关键字Private声明变量保证变量不能从该对象以外直接访问,意思是说,该类模块以外的VBA 
过程不能设置或者读取存储与这些变量里的数据。要让你VBA应用程序的其它部分也能够设置或者 
读取员工数据的话,你就必须在CEmployee类模块里面添加特殊的属性过程。这里有三种属性过程:  
属性过程在一个对象属性需要设置或者读取的时候被执行。Property Get过程可以和Property Let 
过程拥有一样的名称。你应该给对象的每个可能被VBA应用程序其它部分访问的属性创建属性过程。  
三种属性语句中最容易理解的是Property Get过程,我们通过仔细看一下Property Get LastName 
过程来检查一下属性过程的语法。  
属性过程包含下属部分:  
    Property Get LastName ( ) As String   
    LastName是属性名称,As String决定该属性返回值的数据类型  

                                          218 

… 页面 235…

    LastName = m_LastName   
     LastName是属性名称,而m_LastName是数据成员变量,它存储着你想要获取或者设置的属性 
     值。m_LastName变量应该在类模块的顶端使用关键字Private定义好了。  
     如果获取的数据是一个计算的结果,那么你可以包含适当的VBA语句:  
     Property Get Royalty()   
          Royalty = (Sales * Percent)…Advance   
     End Property   
技巧11…3 从属性过程立即退出  
正如关键字Exit Sub和Exit Function允许你提前退出子过程或者函数过程一样,Exit Property 
关键字同样也给了立即退出属性过程的方法。程序执行将会依照Property Get,Property Let或者 
Property Set过程语句继续下去(译者,原文不可理解,可能有误)  

9。创建 Property Get 过程  

CEmployee类对象有四个属性需要给当前VBA工程里的其它模块的VBA程序使用,使用对象CEmployee 
时,你肯定想要获得员工的ID,姓和名以及当前薪水的信息。  
1。  在类模块CEmployee里输入下述Property Get过程,紧接着声明部分输入:  
     Property Get Id( ) As String   
           Id = m_Id   
     End Property   
     Property Get LastName( ) As String   
          LastName = m_LastName   
     End Property   
     Property Get FirstName( ) As String   
          FirstName = m_FirstName   
     End Property   
     Property Get Salary( ) As Currency   
          Salary = m_Salary   
     End Property   
每种员工必须的信息要求一个单独的Property Get过程,上面的每个Property Get过程返回当前属 
性的值。注意,Property Get过程和函数过程非常类似。就像函数过程,Property Get过程包含一 
个赋值语句。回忆一下第四章的内容,要从函数过程返回值的话,你就必须将该值赋予该函数名称。  

10。创建 Property Let 过程  

除了使用Property Get过程来获取存储在数据成员(私有变量)里的数据之外,你必须准备相应的 
Property Let过程,以允许其它过程在必要的时候可以更改这些变量的值。然而,如果存储在私有 
变量的某个数据就是只读的话,那么你就不必准备Property Let过程了。假设你不希望用户更改员 
工ID,你只要不给它写Property Let过程,就可以使它为只读的了。因此类模块CEmployee将只有 
三个属性(LastName,First… Name和Salary),每个属性需要一个单独的Property Let过程。  
1。  在类模块CEmployee里输入下述Property Let过程:  
     Property Let LastName(L As String)   
          m_LastName = L   
     End Property   
     Property Let FirstName(F As String)   
          m_FirstName = F   
     End Property   
     Property Let Salary(ByVal dollar As Currency)   
          m_Salary = dollar   
     End Property   
Property Let过程至少需要一个参数来明确你想要赋予该属性的数值,该参数可以按值传递(参见 
                                           219 

… 页面 236…

Property Let Salary过程里的关键字ByVal)或者按引用传递(ByRef是默认的)。如果你需要重新 
熟悉一下这些关键字的意思的话,那么参加第四章里的“按值或者按引用传递参数”部分。传递给 
Property Let过程的参数数据类型必须和同名称的Property Get 或者Set过程返回值的数据类型一 
致。注意,Property Let过程拥有前面部分准备的Property Get过程相同的名称。忽略了ID属性的 
Property Let过程,你将创建一个只读的ID属性,只能读取,不能设置。  
技巧11…4 定义属性过程的范围  
你可以将关键字Public,Private或Static放在属性过程名称的前面来确定它的范围。例如:  
要创建一个可以从所有模块的过程里访问的Property Get过程的话,那么依照下属语句格式:  
Public Property Get FirstName( ) As String  
要让Property Get过程只能从声明它的模块中其它过程访问的话,那么使用下述语句格式:  
Private Property Get FirstName( ) As String  
在过程调用中,要保护Property Get过程的当地变量的话,那么可以使用下述语句格式:  
Static Property Get FirstName( ) As String  
如果没有明确使用Public或者Private,熟悉过程默认上就会使公共的,同样,如果没有使用关键 
字Static, 那么当地变量在过程的调用中就不会被保护。  

11。创建类方法  

除了属性之外,对象通常还一个或者多个方法。方法是该对象可以执行的操作。方法允许你操作存 
储与类对象里的数据。方法可以使用自过程或者函数过程创建。要让方法在类模块之外可用的话, 
那么需要在自过程或函数过程定义前带关键字Public。你在本章创建的对象CEmployee有一个方法, 
让你计算新薪水。假设员工的薪水可以按照一个确定的百分比或值来增加或者减少。  
1。  在类模块里输入下述函数过程CalcNewSalary:  
     Public Function CalcNewSalary(choice As Integer; _   
          curSalary As Currency; amount As Long) As Currency   
          Select Case choice   
               Case 1   
                   ' by percent   
                   CalcNewSalary =curSalary +((curSalary + amount)/100)   
               Case 2   
                    ' by amount
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!