excel_vba_编程教程(完整版)-第65部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
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
Frame2。Enabled = False
optHighlighted。Enabled = False
optAll。Enabled = False
223
… 页面 240…
cmdUpdate。Enabled = False
cmdDelete。Enabled = False
End Sub
当窗体启动时,UserForm_Initialize过程内部的语句只会激活需要的控件(见图11…3)。
图11…3 当窗体第一次启动时,UserForm_Initialize过程禁用某些控件
8。 输入下述过程cmdSave_Click将输入在窗体的数据转移到工作表:
Private Sub cmdSave_Click()
If txtLastName。Value = 〃〃 Or txtFirstName。Value = 〃〃 Or _
txtSalary。Value = 〃〃 Then
MsgBox 〃Enter Last Name; First Name and Salary。〃
txtLastName。SetFocus
Exit Sub
End If
If Not IsNumeric(txtSalary) Then
MsgBox 〃You must enter a value for the Salary。〃
txtSalary。SetFocus
Exit Sub
End If
If txtSalary 《 0 Then
MsgBox 〃Salary cannot be a negative number。〃
Exit Sub
End If
Worksheets(〃Salaries〃)。Select
index = ActiveSheet。UsedRange。Rowsunt + 1
lboxPeople。Enabled = True
'set and enter data into the CEmployees collection
With emp
Cells(index; 1)。Formula = emp。Id
。LastName = txtLastName
Cells(index; 2)。Formula = emp。LastName
。FirstName = txtFirstName
Cells(index; 3)。Formula = emp。FirstName
。Salary = CCur(txtSalary)
If 。Salary = 0 Then Exit Sub
Cells(index; 4)。Formula = emp。Salary
CEmployees。Add emp
End With
224
… 页面 241…
‘delete data from text boxes
txtLastName = 〃〃
txtFirstName = 〃〃
txtSalary = 〃〃
‘enable hidden controls
cmdEmployeeList。Value = True
cmdEmployeeList。Visible = True
cmdUpdate。Enabled = True
cmdDelete。Enabled = True
Frame1。Enabled = True
txtRaise。Enabled = True
optPercent。Enabled = True
optAmount。Enabled = True
Frame2。Enabled = True
optHighlighted。Enabled = True
optAll。Enabled = True
txtLastName。SetFocus
End Sub
cmdSave_Click过程以验证用户的姓、名和薪水文字框开始,如果用户输入了正确的数据,VBA
将当前工作表里的第一空白行赋予变量Index。下一条语句激活窗体的列表框控件。
当程序到达With emp结构时,类CEmployee的一个新示例便产生了。属性LastName,FirstName
和Salary的设置基于相应文字框里输入的数据,而ID属性则是由Class_Initialize事件过程
里的随机数语句产生的数字设置的。VBA每次看到对对象emp的引用时,它就会调用位于类模
块里的适当Property Let过程。
本章的最后部分示范如何一步一步地跟踪过程的运行,准确地查看什么时候运行属性过程。
设置完对象的属性值后,VBA将员工数据转移到工作表里。With emp结构里面的最后一条语句
将用户定义的对象emp添加到一个叫做CEmployee的自定义集合。
接着,VB将窗体文字框里的输入清除并且激活开始在UserForm_Initialize过程里关闭的命令
按钮。注意,本代码块的第一条指令:cmdEmployeeList。Value = True,该语句导致自动执
行cmdEmployeeList_Click过程,该过程附加于按钮Update List(顺便说一下,这是唯一用
户从未见到的控件)。该过程的代码如下所示。
9。 输入cmdEmployeeList_Click过程,如下所示:
Private Sub cmdEmployeeList_Click()
lboxPeople。Clear
For Each emp In CEmployees
lboxPeople。AddItem emp。Id & 〃; 〃 & _
emp。LastName & 〃; 〃 & emp。FirstName & 〃; 〃 & _
Format(emp。Salary; 〃0。00〃)
Next emp
End Sub
cmdEmployeeList_Click过程附加在命令按钮Update List之上,