《excel_vba_编程教程(完整版)》

下载本书

添加书签

excel_vba_编程教程(完整版)- 第73节


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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的引用时,它就会调用位于类模 
    
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架