大家好,我们今天继续讲解类的相关知识。在上一讲中我们讲了使用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 "现在时间是:" & UserForm1.TextBox1

If Format(myDOB, "SS") = Format(UserForm1.TextBox1, "SS") Then

RaiseEvent BIR

End If

End Sub

代码截图:

代码解析:

在上述的类代码中,当myTEXT发生改变时,要判断当前的时间是否为myDOB,(由于测试的原因,我在这里利用了秒做为生日的时间,这样可以在每分钟内完成一轮测试),当检测到是出生的时间后就执行RaiseEvent BIR语句,RaiseEvent字面意思是"发起事件"。BIR就是我们定义的自定义的事件。执行这个事件有的语句是:

RaiseEvent BIR

当然,为了能让myTGEXT正常的工作,我们要在类的初始化过程中关联上必要的对象:

Private Sub Class_Initialize()

Debug.Print "二师兄睁开了眼睛,欣欣然望着这个美好的世界!"; Situation = "一般"

Set myTEXT = UserForm1.TextBox1

End Sub

其他的内容就不再过多地讲解了。

备注:第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人,

暗夜中,悄声寻梦,盼却天明。

怎无凭!

分享成果,随喜正能量

vba 定义类_在类中定义和触发自己的事件(上)相关推荐

  1. python中类的定义方法_在Python中定义类变量的正确方法

    这两种方法都不一定正确或不正确,它们只是两种不同的类元素:方法__init__之外的元素是静态元素:它们属于类. __init__方法中的元素是对象(self)的元素:它们不属于类. 使用一些代码可以 ...

  2. jsp 定义java类_在JSP中定义一个类

    请不要打我脸!我知道面对好的设计这是行得通的,但是我只是写一个测试页来演示一些东西.我们的webapp模块(正确)不能直接访问我们的域类.我不想在JSP之外创建整个类,因为该页面仅用于演示目的,出于相 ...

  3. scala 主构造函数_在Scala中,如何在类的主构造函数中定义局部参数?

    在Scala中,如何在不是数据成员的类的主构造函数中定义局部参数,例如,仅用于初始化基类中的数据成员? 例如,在下面的代码中,如何在B类的主构造函数中正确定义参数b,以便它只生成临时本地参数而不是数据 ...

  4. Spring Boot错误–创建在类路径资源DataSourceAutoConfiguration中定义的名称为“ dataSource”的bean时出错...

    大家好,如果您使用的是Spring Boot,并且遇到诸如"无法为数据库类型NONE确定嵌入式数据库驱动程序类"或"在类路径资源ataSourceAutoConfigur ...

  5. 创建一个商品类Product类,在该类中定义3个属性id,name,price和重写toString()方法

    ·创建一个商品类Product类,在该类中定义3个属性id,name,price和重写toString()方法,分别实现setter()和getter()方法,创建一个测试类,调用Product类的构 ...

  6. java定义接口的关键字_Java中定义接口的关键字是什么?

    Java中定义接口的关键字是"interface"."interface"是面向对象编程语言中接口操作的关键字,功能是把所需成员组合起来,用来装封一定功能的集合 ...

  7. vba 定义类_工作表中如何响应自定义事件

    大家好,在上两讲中讲了类模块的调试行为,对于我们写代码人员来讲,要充分地理解每个知识点的概念,才能在实际工作中灵活运用,在我的第一套教程<VBA代码解决方案>中,我推出的是一种积木编程的思 ...

  8. python中定义类的关键字_在Python中,定义一个类使用什么关键字?

    [多选题]技术应用的限制包括 [多选题]关于类和对象,下面说法正确的有? [判断题]温度越高,料液的粘度越小,扩散系数越大,可提高膜通量. [单选题]某企业有10台运货车,已知每台车每运行100小时平 ...

  9. python中表示类的公有成员_在Python中定义类时,如果某个成员名称前有2个下划线则表示是私有成员。...

    在Python中定义类时,如果某个成员名称前有2个下划线则表示是私有成员. 更多相关问题 [填空题] 汽车板金的一般修理工艺是:校正.敲平.().().焊接及点焊. [填空题] 汽车照明系统主要由() ...

最新文章

  1. 贾君鹏你妈妈喊你回家吃饭
  2. NgRx store.dispatch方法的单步调试
  3. win10宽带连接断网自动重连
  4. 6/12 Sprint2 看板和燃尽图
  5. Jmeter集合ant进行操作
  6. 设计模式之适配器模式(Adapter Pattern)
  7. usb3.0驱动linux,dwc3 linux usb3.0 driver架构
  8. Python变量的下划线
  9. 解决KindEditor上传图片 不显示上传按钮问题
  10. Android开启桌面模式,Android Q自带桌面模式:支持大宽屏幕
  11. oracle临时表怎么删除吗,删除Oracle临时表
  12. C++输出谢尔宾斯基三角形
  13. 【机器学习】【特征选择】4.嵌入法Embedded
  14. 迅雷x下载的东西都变成php格式化,关于文件下载后变成PHP格式的解决办法
  15. 计算机的空间复用技术应用,MIMO技术的介绍
  16. 专业语音芯片MT8516 华为AM08蓝牙音箱
  17. python价格预测模型_Python 机器学习教程: 预测Airbnb 价格(2)
  18. 收藏的JAVA面试题大全
  19. 英特尔投资部宣布增投10家新创公司,他们都有哪些能耐?---ESM
  20. Matlab和C#混合编程

热门文章

  1. 数学建模 河北杯 无人机侦听与反制问题问题2.2:在未知周期的情况下的解决思路
  2. SQL 删除表数据,id从1开始
  3. XTUOJ 1248 TC or CF 搜索
  4. 怎样给三星笔记本电脑重装系统
  5. 【IoT】CC254x 中 data、idata、xdata 和 pdata 区别以及堆 Heap 内存布局
  6. 软件架构师的角色定位和培养
  7. 智算中心操作系统 | 数智化升级的新定海神针
  8. 精心整理的最全python入门思维导图(第一部分)
  9. (可下载)《中国城市数字经济发展报告》发布,北上深成第1梯队
  10. 前端vue正则表达式-隐私脱敏处理