Excel精英培训网

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

[分享] vba类模块浅显学习之七,类模块自身事件

[复制链接]
发表于 2011-4-12 22:58 | 显示全部楼层 |阅读模式
本帖最后由 wbzxz 于 2011-4-15 08:07 编辑

距离上一次写类模块的心得已经有三周时间啦,之所以过了这么久的时间,一是时间有限,还有主要的原因就是类模块的事件这一部分让我纠结了很久,翻阅了不少资料,现在才感觉略微有一点点清晰,战战兢兢的继续写下去,一方面与大家分享,另一方面也希望在写心得的过程中,能让自己的思路更清晰些。

今天我要分享的是“类模块自身事件”,之所以用这个题目,是因为类模块能够自定义事件(这也是把我搞晕很久的原因),为了与类模块的自定义事件区分开,我把今天的内容称之为“类模块自身事件”。

类模块自身事件很简单,也很好理解。
之所以说它简单,因为他只有两个事件:Class_Initialize和Class_Terminate
之所以说它好理解,是因为调用事件过程和Sheet1,Sheet2,Sheet3,Thisworkbook这些模块一样,都可以通过代码窗口的下拉框中找到,如图所示

image001.png



Class_Initialize事件:在创建对象(类的实例)时触发,可用于设置对象属性的默认值。
Class_Terminate事件:在销毁对象时触发,可用于对象销毁前的整理工作。

因为没有对Class_Terminate事件理解的透彻,也不敢举关于Class_Terminate的例子,这里仅仅举一个关于Class_Initialize的例子。

在下面的例子中,我们通过Initialize事件,在类模块中为“姓名,每小时工资,每周工作时间”三个属性赋了初值,代码如下:

  1. Public 每小时工资 As Double
  2. Public 每周工作时间 As Double

  3. Private 中间姓名变量 As String

  4. Public Function 每周工资() As Double
  5.   每周工资 = 每小时工资 * 每周工作时间
  6. End Function

  7. Property Get 姓名() As String
  8.   姓名 = 中间姓名变量
  9. End Property

  10. Property Let 姓名(参数变量 As String)
  11.   中间姓名变量 = 参数变量
  12. End Property

  13. '在初识化事件中,给各属性赋初值,作为属性的默认值
  14. Private Sub Class_Initialize()
  15.   姓名 = "张三"
  16.   每小时工资 = 15
  17.   每周工作时间 = 40
  18. End Sub
复制代码

在标准模块中,即使没有给“姓名,每小时工资,每周工作时间”三个变量赋值,仍然可以得到相应的结果,代码如下:

  1. Sub EmployeePay()

  2.   Dim 新雇员 As New 雇员 '创建“雇员”类模块对象的单个实例——新雇员

  3.   '读取“新雇员”的各个属性的值
  4.   MsgBox "雇员姓名:" & 新雇员.姓名 & Chr(13) & _
  5.           "雇员每小时工资:" & 新雇员.每小时工资 & Chr(13) & _
  6.           "雇员每周工资:" & 新雇员.每周工资 & Chr(13)
  7. End Sub
复制代码

大家通过上面的代码可以看到,利用Initialize事件,为对象的属性赋予了初始值,这样在标准模块中没有赋值的情况下,也是不容易出现错误的。


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

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

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

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

vba类模块浅显学习之五,类模块的属性定义小结

vba类模块浅显学习之六,类模块创建方法





评分

参与人数 1 +50 收起 理由
兰色幻想 + 50 好~~~

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-4-13 08:11 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2011-4-13 08:13 | 显示全部楼层
嘿嘿,谢谢兰版支持,有您领航,我就跑不偏啦,嘿嘿。
回复

使用道具 举报

发表于 2011-4-15 07:50 | 显示全部楼层
谢谢分享  
回复

使用道具 举报

发表于 2011-4-16 21:24 | 显示全部楼层
本帖最后由 yiyiyicz 于 2011-4-16 21:28 编辑

楼主的谨慎,让我等跟着学的,很放心
另外,在类模块里给对象赋值,在实际当中的意义好像不大。如果是规律性的常量,在类模块中设定,这可以理解

如果作为模板(工厂),实际情况千差万别,是不是应该由模块或者是sub end这样的调用程序来赋值,或者交互问答来,比较符合实际
当然,我理解这是为了问题
回复

使用道具 举报

 楼主| 发表于 2011-4-16 21:31 | 显示全部楼层
这是给类模块的属性赋初始值,可以防止在使用的时候,忘记给属性赋值造成的错误,呵呵。
回复

使用道具 举报

发表于 2018-8-15 20:52 | 显示全部楼层
貌似不见了第八章?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 14:02 , Processed in 0.332247 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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