Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 9559|回复: 5

[分享] vba类模块浅显学习之四,进一步理解如何控制类模块的属性

[复制链接]
发表于 2011-3-20 18:10 | 显示全部楼层 |阅读模式
本帖最后由 wbzxz 于 2011-3-20 18:47 编辑

通过前面三部分的学习,我了解到了,一个完整,又便于控制的类模块属性定义方法,由下面三部分组成:
(1)定义一个私有变量,做为转换变量临时储存数据;
(2)Property let 过程负责给属性赋值;
(3)Property get过程负责读取属性的值。



利用这种方法定义的属性,既可以赋值、也可以读取值,具有读/写功能。


其实定义类模块的属性是非常灵活的,可以定义为只读的,或者只写的,我把第三节的代码进行了修改,
请看下面的类模块代码(这个类模块的名称叫做“雇员”


  1. Option Explicit

  2. Public 姓名 As String
  3. Public 工资 As Double

  4. '以下是另外一种对属性值进行定义的方法

  5. Private 每周正常时间转换变量 As Double  '定义私有变量,用来存储通过Property Let语句
  6. Private 每周超额时间转换变量 As Double


  7. Property Let 每周工作时间(标准模块传递的时间变量 As Double) '使用Property Let过程,将标准模块的变量“时间临时变量”传递给私有变量“标准模块传递的时间变量”
  8.   
  9.   '下面通过if语句进行了控制,对从标准模块传递过来的变量进行了验证
  10.   If 标准模块传递的时间变量 < 168 Then
  11.     每周正常时间转换变量 = WorksheetFunction.Min(40, 标准模块传递的时间变量)
  12.     每周超额时间转换变量 = WorksheetFunction.Max(0, 标准模块传递的时间变量 - 40)
  13.   Else
  14.     Exit Property
  15.   End If
  16. End Property

  17. Property Get 每周正常工作时间() As Double  '使用Property Get过程,将私有变量传递给属性“每周正常工作时间”
  18.     每周正常工作时间 = 每周正常时间转换变量
  19. End Property

  20. Property Get 每周超额工作时间() As Double  '使用Property Get过程,将私有变量传递给属性“每周超额工作时间”
  21.     每周超额工作时间 = 每周超额时间转换变量
  22. End Property
复制代码
上面这个代码中,类模块 “雇员”的属性有几个呢,通过什么语句定义,具备读/写功能吗?


一共有五个属性:


1、姓名,通过 “Public 姓名 As String” 语句定义,该属性具有可读/写功能
2、工资,通过“Public 工资 As Double”语句定义,该属性具有可读/写功能
3、每周工作时间,通过“Property Let 每周工作时间(标准模块传递的时间变量 As Double)”语句定义,该属性只具有写功能,也就是只能进行赋值,而不能进行读取该属性的值;
4、每周正常工作时间,通过“Property Get 每周正常工作时间() As Double ”语句定义,该属性只具有读功能,也就是只能读取该属性的值,而无法给该属性赋值;
5、每周超额工作时间,通过“Property Get 每周超额工作时间() As Double”语句定义,该属性只具有读功能,也就是只能读取该属性的值,而无法给该属性赋值;


通过上面的分析,我们发现原来类模块的属性定义可以这么灵活,可以让属性只读(Property get语句),或者只写功能(Property let语句),或者同时具有读写功能(Property get 和 Property let语句),一切可以尽在我们的掌握中,呵呵。


呵呵,下面是标准模块的代码,供大家参考和调试


  1. Option Explicit

  2. Sub EmployeePay()

  3.   Dim 新雇员 As New 雇员 '创建“雇员”类模块对象的单个实例——新雇员
  4.   
  5.   '给“新雇员”的各个属性赋值
  6.   新雇员.姓名 = "张三"
  7.   新雇员.工资 = 15
  8.   新雇员.每周工作时间 = 55
  9.   
  10.   
  11.   '读取“新雇员”的各个属性的值
  12.   MsgBox "雇员姓名:" & 新雇员.姓名 & Chr(13) & _
  13.           "雇员每小时工资:" & 新雇员.工资 & Chr(13) & _
  14.           "雇员每周正常工作时间:" & 新雇员.每周正常工作时间 & Chr(13) & _
  15.           "雇员每周超额工作时间:" & 新雇员.每周超额工作时间
  16. End Sub

复制代码

前三节的链接如下:

vba类模块浅显学习之一,定义变量与作用域

vba类模块浅显学习之二,最简单的类模块

vba类模块浅显学习之三,控制类模块的属性


以上代码的源程序:
类模块基本示例4.rar (9.29 KB, 下载次数: 183)

评分

参与人数 1 +50 收起 理由
兰色幻想 + 50 你应该把前三个学习心得在这里建立链接,方.

查看全部评分

 楼主| 发表于 2011-3-20 18:42 | 显示全部楼层
回复

使用道具 举报

发表于 2011-4-8 22:53 | 显示全部楼层
回复

使用道具 举报

发表于 2011-4-16 19:55 | 显示全部楼层
谢谢楼主分享
讲解有条有理,容易理解
回复

使用道具 举报

发表于 2011-9-7 12:12 | 显示全部楼层
不错,谢谢分享。
建议:
        一、 修改标题:手把手教你学Excel VBA类模块(入门教材)。
        二、增加内容提要:本文是Excel VBA中类模块的入门资料,既有基础理论知识介绍,又有循序渐进上机调试的基本操作,是撩开Excel VBA类模块美丽面纱难得的好教材。
        三、从新发帖,把5部分内容放到一个贴里,共大家学习。
       建议修改理由:作者在标题上用了“[学习心得]、浅显”等字眼,给人以一种不成熟,还很肤浅的感觉,其实,本人仔细拜读,本文不仅是理论上,浅显易懂,同时,在操作上,容易上手,一学就会,反过来,也是对理论的一个验证,真的不错,再次谢谢分享。
回复

使用道具 举报

发表于 2017-10-3 14:22 | 显示全部楼层
学习了,感谢分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-26 16:11 , Processed in 0.190902 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表