《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA中类的解读及应用第八讲:用户自定义类事件【分享成果,随喜正能量】智者能容。越是睿智的人,越是胸怀宽广,大度能容。因为他洞明世事、练达人情,看得深、想得开、放得下,也因为他发现:“处世让一步为高,退步即进步的根本;待人宽一分是福,利人实利己的根基。”。
第八讲用户自定义类事件
大家好,到上一讲,我们学习了有关类的定义部分,涉及到的概念较多,需要大家仔细地理解。我们今日这讲,讲用户自定义事件。
我们建立了类,通过对象把类进行了实例化,把灵魂具体到了肉身,下面我们就要让这个实例的对象参与各种事件了,由于类是我们自己进行的定义,那么实例对象要参与的事件也是能自己定义的。
1用户如何自定义事件
定义用户自定义的事件的语法:
[Public] Event procedurename [(arglist)]
上述参数中:
1) Public 可选的。指定该 Event 在整个工程中都是可见的。缺省情况下 Events 类型是 Public。应注意,事件只能在所声明的模块中产生。
2) procedurename 必需的。事件的名称;建议大家遵循标准的变量命名约定,但我们也可以自己加入自己的部分习惯。
3) arglist 参数的语法及语法的各个部分如下:[ByVal | ByRef] varname[( )] [As type]
其中:
① ByVal 可选的。表示该参数是按值传递的;
② ByRef 可选的。表示该参数是按地址传递的。ByRef 是缺省设置。
③ varname 必需的。代表要传递给过程的参数变量的名称;遵循标准的变量命名约定。
④ type 可选的。指传递给过程的参数的数据类型;可以是 Byte、布尔、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(只支持变长)、Object、Variant、用户定义类型或对象类型。
u说明:
1) 事件被声明之后,就可以使用RaiseEvent 语句来产生该事件。
2) 声明事件只能在类模块中声明,如果在标准模块中出现 Event 声明,就会产生语法错误。这也好理解,事件是对产生对象进行的声明,对象是由类产生的。
3) 不能声明带返回值的事件。在下面的代码段中,给出了声明事件和产生事件的典型事件:
如下语句:在类模块的模块级中声明一个事件,及触发一个事件:
Public Event UpdateTime(ByVal mynow As Double)
RaiseEvent UpdateTime(Timer - myStart)
l注意 可以象声明过程的参数一样来声明事件的参数,但有以下不同:事件不能有带命名参数、Optional参数、或者 ParamArray 参数。事件没有返回值。
产生事件的类是事件源,实现该事件的类则是事件吸收。一个事件源可以有多个针对其所产生的事件的类。事件可以被每个选定出为对象的实例吸收事件的类所触发。
[待续]
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中: