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

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

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



               Case 2   
                    ' by amount   
                    CalcNewSalary = curSalary + amount   
          End Select   
     End Function   
函数CalcNewSalary在类模块里使用关键字Public一起定义,作为类CEmployee的一个方法。要计算 
一个新的薪水的话,类模块之外的VBA过程必须提供三个参数:choice,CurSalary和amount。参数 
choice明确计算类型,假设你想要按5个百分点或者5美元增加员工的薪水,选择1将按5个百分点增 
加薪水,而选择2将当前的薪水基础上增加5美元。参数CurSalary是员工的当前薪水数字,而amount 
决定了薪水改变量。  
技巧11…5 关于类方法  

12。创建类的示例  

在类里输入完所有必须的Property Get,Property Let,自过程和函数过程后,你可以创建一个类 
的信示例了,称为对象。在你能够创建对象之前,对象变量必须在一个标准模块里声明好,以存储 
对该对象的引用。如果该类模块的名称为CEmployee的话,该类的新示例就可以使用下述语句创建:  
Dim emp As New CEmployee   
变量emp代表队类CEmployee的一个对象的引用。当你使用关键字New声明对象变量的时候,VBA就会 
创建该对象并分配内存给它;然而,该对象并没有获得示例,直到你在你的程序代码里通过赋值给 
它的属性或者执行它的方法创建对该对象的引用。你同样可以通过声明一个对象变量为类定义的数 
                                          220 

… 页面 237…

据类型来创建该对象的一个示例。例如:  
Dim emp As CEmployee   
Set emp = New CEmployee   
如果你不使用关键字New在Dim语句里(如上所示),那么VBA就不会份哦内存给你的自定义对象,直 
到你的程序真正需要它。  

13。类模块里的事件过程  

事件基本上是一个对象可以识别的操作。自定义类只可识别两种事件:Initialize和Terminate。 
这两个事件分别在该类的示例创建和消灭的时候引发。  
Initialize事件在从类创建对象的时候产生(参见前面部分关于“创建类的示例”)。在类CEmployee 
例子里面,Initialize事件在你代码里第一次使用变量emp的时候也会引发。因为Initialize事件 
里的语句将是该对象第一个要执行的,在任何属性被赋值之前,也在任何方法被执行之前,所以 
Initialize事件是一个执行类创建的对象的初始化最好的地方。回忆一下,在类模块CEmployee里, 
ID是只读的,你可以使用Initialize事件给m_Id变量赋予一个单独的五位数。  
1。  在类模块CEmployee里输入下述过程Class_Initialize:  
     Private Sub Class_Initialize()   
          Randomize   
         m_Id = Int((99999 … 10000) * Rnd + 10000)   
     End Sub   
Class_Initialize过程给变量m_Id赋予一个独特的五位数,初始化对象CEmployee。使用下述公式, 
可以产生一个介于起始值10000和结束值99999之间的随机数:  
=Int((结束值–起始值)*Rnd +起始值)   
Class_Initialize过程也使用了Randomize语句来初始化随机数发生器。可以搜索在线帮助,获得 
更多关于使用Rnd和Int函数,以及Randomize语句的信息。  
Terminate事件发生在释放该对象的引用时。这是一个执行任何必要的清理任务的好地方。 
Class_Terminate过程使用下述语法:  
Private Sub Class_Terminate()  
      '你的清理代码'   
End Sub   
使用下述语法,将对象变量从对象上释放出来:  
Set objectVariable = Nothing   
当你设置对象变量为Nothing的时候,Terminate事件就发生了,届时,任何位于该事件里的代码就 
会被执行。  

14。创建用户界面  

如果你跳过了前面的章节的话,那么你可能得返回去,因为,执行你的自定义对象CEmployee需要 
你设计一个自定义窗体。  
1。  选中当前VBA工程,并且选择“插入”|“用户窗体”  
2。  按照图11…1所示准备好该窗体:  

                                           221 

… 页面 238…

                                                                                            
图11…1 本窗体示范了自定义对象CEmployee的使用  
3。  给窗体和它的控件设置下述属性:  
对象                           属性                       设置  
窗体                           Name                       Salaries  
                               Caption                    Employees and Salaries  
标签1                          Caption                    Last Name  
标签Last Name 下面的文字框     Name                       txtLastName  
标签2                          Caption                    First Name  
标签First Name 下面的文字框    Name                       txtFirstName  
标签3                          Caption                    Salary  
标签Salary 下面的文字框        Name                       txtSalary  
框架1                          Caption                    Salary Modification  
框架Salary Modification下面的  Name                       txtRaise  
文字框  
选项按钮1                      Name                       optPercent  
                               Caption                    Percent (%)  
选项按钮2                      Name                       optAmount  
                               Caption                    Amount ()  
框架2                          Caption                    Change the Salary for  
选项按钮3                      Name                       optHighlighted  
                               Caption                    Highlighted Employee  
选项按钮4                      Name                       optAll  
                               Caption                    All Employees  
列表框                         Name                       lboxPeople  
                               Height                     91。45  
                               Width                      180。75  
命令按钮1                      Name                       cmdSave  
                               Caption                    Save  
命令按钮2                      Name                       cmdClose  
                               Caption                    Close  
命令按钮3                      Name                       cmdUpdate  
                               Caption                    Update Salary  
命令按钮4                      Name                       cmdDelete  
                               Caption                    Delete Employee  
                                         222 

… 页面 239…

命令按钮5                      Name                       cmdEmployeeList  
                               Caption                    Update List  
  
4。  准备一个数据输入工作表,如图11…2所示:  

                                                                                       
图11…2 在窗体Employees and Salaries上输入的数据将会转移到该工作表  
5。  切换到VB编辑器窗口,双击窗体背景以激活窗体模块  
6。  在窗体模块代码窗口上部输入下述声明:  
     Option Explicit   
     Dim emp As New CEmployee   
     Dim CEmployees As New Collection   
     Dim index As Integer   
     Dim ws As Worksheet   
     Dim extract As String   
     Dim cell As Range   
     Dim lastRow As Integer   
     Dim empLoc As Integer   
     Dim startRow As Integer   
     Dim endRow As Integer   
     Dim choice As Integer   
     Dim amount As Long   
     第一条语句声明变量emp为类CEmployee的一个新示例,第二条语句声明了一个自定义集合, 
     集合CEmployees将会用来存储员工数据。这里声明的其它变量将会用于窗体上各种控件的VBA 
     过程里面。  
7。  输入下述UserForm_Initialize过程来激活或者禁止窗体上的控件:  
     Private Sub UserForm_Initialize()   
         txtLastName。SetFocus   
         cmdEmployeeList。Visible = False   
         lboxPeople。Enabled = False   
         Frame1。Enabled = False   
         txtRaise。Value = 〃〃   
         optPercent。Value = False   
         optAmount。Value = False   
         txtRaise。Enabled = False   
         optPercent。Enabled = False   
         optAmount。Enabled = False   
  
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!