vba定义类_在类中定义和触发⾃⼰的事件(上)
⼤家好,我们今天继续讲解类的相关知识。在上⼀讲中我们讲了使⽤WithEvents定义响应事件的对象,那么有了对象⾃然要跟进到事件了,这讲就给⼤家讲解两个新技能——在类中定义和触发⾃⼰的事件(Event)。这两个技能,再加上上讲介绍的WithEvents,这三项技能⼀旦合体,就会变形成⼀⽀神奇的笔,凡是⽤这只笔创建的类对象,就⽴刻有了⾃主意识。这套VBA中类的解读及应⽤中,侧重点是理论的学习,要求⼤家在有⼀定的VBA基础上再开始的学习(这是我的第五部教程,建议⼤家在掌握前⼏套教程的内容后再学习这套教程),我也⼒争⽤尽可能简单的例⼦给⼤家加以辅助的讲解。在这套教程中⼤家会体会到很多⽣命或者佛教的点滴,很多事物都是相通的,VBA代码不是枯燥的。
初中报考
好了,我们继续讲解,在类中如何能⾃定义⼀个⾃⼰的事件呢?就是利⽤Event,Event是VBA的⼜⼀个关键字,专门⽤来定义事件。
我们在pigsy类的头部写如下代码:
Public Event BIR()
这样就定义了⼀个我们需要的BIR事件。是不是出奇的简单?Public表⽰此事件是公有的,事件是⽤来往外转播的,私有事件没有任何意义。所以,这⾥必须是Public,你可以试试将它改成Private,编译就会
报错。Bir就是我们的事件名,后⾯有⼀对括号,我们可以在括号⾥⾯添加参数,当往外传播事件时,连同参数⼀起传递出去。我们先弄简单⼀点,不写任何参数。
这个事件是什么意义呢?我们姑且设定为⽣⽇事件,当pigsy类的魂赋给某个对象⾁⾝成为⼀个⽣命后,⾃然会有⾃⼰的⽣⽇,我们就⽤这个BIR事件来提⽰⽣⽇。
所谓事件,我在之前利⽤了⼤量的篇幅讲解了事件,我们知道,事件要有触发,要有对象的响应,触发是很好理解的,要求对象能监听到⽣⽇这⼀天;那么响应呢?我们需要⼀个对象响应⽣⽇这个事件,我们同样在pigsy类的头部写如下代码:
Private WithEvents myTEXT As MSForms.TextBox
这⾥我定义了⼀个myTEXT对象作为监听⽣⽇的对象。在窗体的头部添加⼀段代码:
Private WithEvents objPigsy As pigsy
这样我们就实现了事件从监听到触发到事件发⽣的整个过程。下⾯我们要给⼤家讲解具体的内容了,先看类模块部分代码:
Private myName As String '宿主myName
Private myDOB As Date '宿主myDOB
Private myGender As String '宿主myGender
Public Situation As String '属性:场合
Public Event BIR()
Private WithEvents myTEXT As MSForms.TextBox
关于黄河的诗
Public Enum pGender
Female
male
End Enum
Private Sub myTEXT_Change()
Debug.Print "现在时间是:" & UrForm1.TextBox1炒小河虾
举手礼
If Format(myDOB, "SS") = Format(UrForm1.TextBox1, "SS") Then
RaiEvent BIR
End If春水汇
End Sub
代码截图:
代码解析:
在上述的类代码中,当myTEXT发⽣改变时,要判断当前的时间是否为myDOB,(由于测试的原因,我在这⾥利⽤了秒做为⽣⽇的时间,这样可以在每分钟内完成⼀轮测试),当检测到是出⽣的时间后就执⾏RaiEvent BIR语句,RaiEvent字⾯意思是"发起事件"。BIR就是我们定义的⾃定义的事件。执⾏这个事件有的语句是:
RaiEvent BIR
不合适当然,为了能让myTGEXT正常的⼯作,我们要在类的初始化过程中关联上必要的对象:
Private Sub Class_Initialize()
灯塔Debug.Print "⼆师兄睁开了眼睛,欣欣然望着这个美好的世界!"; Situation = "⼀般"
Set myTEXT = UrForm1.TextBox1
End Subabab式成语
其他的内容就不再过多地讲解了。
备注:第41讲和42讲内容参考测试程序⽂件VBA-CLASS(上41-42).xlsm
今⽇内容回向:
1 如何⾃定义类对象事件?
2 如何触发和响应类⾃定义事件?
在取代OFFICE新的办公软件没有到来之前,谁能在数据处理⽅⾯做到极致,谁就是王者。其中登峰⾄极的技能⾮VBA莫属!众鸟⾼飞尽,孤云独去闲。相看两不厌,只有敬亭⼭。
学习VBA是个过程,这个过程是⾃⼰忍受孤独的过程。
"⽔善利万物⽽不争",你看她绵绵密密,微处则⽆声,巨则汹涌。学习亦如此,把握现在,为达千⾥,
需要默默耕耘,知道什么是⾃⼰所需要的,不要蜷缩在⼀⼩块⾃认为天堂的世界⾥,待到暮年时去⾃欺欺⼈。要在当下,⽤⼀颗充满⽣机的⼼灵,努⼒提⾼⾃⼰,这才是进取。越是有意义的事情,困难会越多。愿⼒决定始终,智慧决定成败。不管遇到什么,都是风景。看淡纷争,看轻得失。⼀杯茶,满也好,少也好,不要去计较;浓也好,淡也好,其中都有值得品的味道。去感悟真实的时间,静下⼼,多学习,积累福报。⽽不是天天混⽇⼦,也不是天天熬⽇⼦。⼀切众⽣的⼼都在变化,像时间⼀样,永远不会停留,把握现在就是福报。
VBA是利⽤Office实现⾃⼰⼩型办公⾃动化的有效⼿段,我记得20年前⾃⼰初学VBA时,那时的资料甚少,只能看源码⾃⼰琢磨,真的很难。20年过去了,为了不让学习VBA的朋友重复我之前的经历,我根据⾃⼰多年VBA实际利⽤经验,推出了五部VBA专门教程,回向给需要学习的朋友:
第⼀套:VBA代码解决⽅案 是VBA中各个知识点的讲解,覆盖绝⼤多数的VBA知识点,初学必备;
第⼆套:VBA数据库解决⽅案 数据库是数据处理的专业利器,教程中详细介绍了利⽤ADO连接ACCDB和EXCEL的⽅法和实例操作。
第三套:VBA数组与字典解决⽅案 数组和字典是VBA的精华,字典是VBA代码⽔平提⾼的有效⼿段,值得深⼊的学习。
第四套:VBA代码解决⽅案之视频 是专门⾯向初学者的视频讲解,可以快速⼊门,更快的掌握这门技能。
第五套:VBA中类的解读和利⽤ 这是⼀部⾼级教程,讲解类的虚⽆与⾁⾝的度化,可以对促进⾃⼰理论的提⾼。
学习的过程也是修⼼的过程,修⼀个平静的⼼。在代码的世界中,⼼平静了,⼼情好了,⾝体⾃然⽽然就好。⼼静则正,内⼼⾥没有那么多邪知邪见,也就没有那么多妄想。在平静中积累⾃⼰的财富。我的上述教程是我多的经验的传递,⼤家可以根据1,3,2,5或者是4,3,2,5的顺序逐渐深⼊的逐渐学习。
最后将⼀阙词送给致⼒于VBA学习的朋友:
浮云掠过,暗语⽆声,
唯有清风,惊了梦中啼莺。
望星,疏移北⽃,
奈将往事雁同⾏。
阡陌⼈,昏灯明暗,忍顾长亭。
多少VBA⼈,
暗夜中,悄声寻梦,盼却天明。
怎⽆凭!
分享成果,随喜正能量