Excel精英培训网

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

[分享] vba类模块浅显学习之九,类模块接管对象事件

[复制链接]
发表于 2011-4-17 21:43 | 显示全部楼层 |阅读模式
本帖最后由 wbzxz 于 2011-4-18 08:34 编辑

嘿嘿,这一节的标题是我自己瞎诌的,没有人这样说,但是我又不知道该如何描述,就起了这样一个标题。如何写好这篇心得,我苦思冥想了很久,因为我确实没有理解透彻的,但是学习总不能止步不前,我理解多少,就分享多少吧,希望以后能有机会来完善他。

本节学习之前的预备例子

进行本节分享之前,我们对前面的知识稍微进行一下深入,举一个对象变量做为属性的例子:

例子描述:我们在类模块中定义两个公有变量作为属性,与前面的例子不同的是,这次定义的变量是两个对象变量(前面的例子是字符串或整型变);由于对象变量的特殊性,所以这两个属性可以具有Range类型的特征,可以赋值,具有多种方法,虽然我们初次使用不太习惯,但是仔细想想,是合理的:

类模块中的代码:
  1. '定义了两个Range类的对象变量rng1和rng2,做为"类1"的两个属性
  2. Public rng1 As Range
  3. Public rng2 As Range
复制代码
我们采用了最简单的属性定义的方法。

标准模块代码:
  1. Sub test()
  2.   Dim myClass As 类1 '定义类1的对象变量myClass
  3.   Set myClass = New 类1 '新建对象(类1的实例),然后将对对象的引用赋值给对象变量myClass
  4.   
  5.   '下面这个赋值过程需要理解清楚,rng1,rng2作为myClass的两个属性,实际上就是两个变量(myClass本身就是变量)
  6.   'rng1与rng2被声明为Range类型,所以他们就是对象变量
  7.   '所以,我们就像平常使用对象变量一样使用myClass.rng1和myClass.rng2,使用range的属性和方法,甚至事件
  8.   Set myClass.rng1 = Sheet1.Range("A1") '把对Sheet1.Range("A1")对象的引用赋值给myClass的属性rng1
  9.   Set myClass.rng2 = Sheet1.Range("A2") '把对Sheet1.Range("A2")对象的引用赋值给myClass的属性rng2
  10.   
  11.   '下面我们可以看出来,给myClass.rng1赋值,就是相当于给Sheet1.Range(""A1"")赋值
  12.   myClass.rng1 = 1
  13.   MsgBox "myClass.rng1的值是:" & myClass.rng1
  14.   MsgBox "Sheet1.Range(""A1"")的值是:" & Sheet1.Range("A1")
  15.   
  16.   '下面我们可以看出,给Sheet1.Range("A2")赋值,就是相当于给myClass.rng2赋值
  17.   Sheet1.Range("A2") = 2
  18.   MsgBox "myClass.rng2的值是:" & myClass.rng2
  19.   MsgBox "Sheet1.Range(""A2"")的值是:" & Sheet1.Range("A2")
  20.   
  21.   '下面的语句我们可以看出来myClass.rng1和myClass.rng2可以使用Range类的方法
  22.   myClass.rng1.Clear
  23.   MsgBox "利用myClass.rng1.clear方法清除A1单元格内容"
  24.   
  25.   myClass.rng2.Clear
  26.   MsgBox "利用myClass.rng2.clear方法清除A2单元格内容"
  27.   
  28. End Sub
复制代码
通过上面的代码,我们可以看出,当我们用对象变量作为类的属性的时候,这个类的属性就具有了所引用对象的特征,可以使用该对象的属性和方法。
类模块基本示例9.rar (10.62 KB, 下载次数: 98)

评分

参与人数 1 +10 收起 理由
放浪形骸 + 10 超级赞啊

查看全部评分

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

使用道具 举报

发表于 2014-12-10 16:55 | 显示全部楼层
有个疑问:
我试了一下,声明类模块的对象变量如果放在过程中,执行就没反应。
一定要放在模块前面才行,为何?
求解惑。
回复

使用道具 举报

匿名  发表于 2015-1-2 10:16
超级赞一个。
我在网上看了很多类模块方面的资料,看得我稀里糊涂。楼主九个系列的讲座让我受益匪浅。再次感谢楼主。顺祝新年快乐!
回复

使用道具

发表于 2015-7-4 13:24 | 显示全部楼层
楼主真不错啊! 很感谢楼主的无私分享
另外vba类模块浅显学习之八,类模块自定义事件好像被删除了
回复

使用道具 举报

发表于 2015-7-12 08:23 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

发表于 2021-5-14 16:24 | 显示全部楼层
第八个帖子删了?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 00:31 , Processed in 0.282294 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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