按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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