暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

VBA类之自定义事件的触发及响应

VBA语言専攻 2022-11-27
345
【分享成果,随喜正能量】夜卧早起三月春,缓形无努志逆生。万物皆有灵,众生皆平等,存一分善心,常常布施善行,养生护生,世间就多温暖一些。。
《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA类之自定义事件的触发及响应

第五十五讲  在EXCEL工作表中响应自定义事件(5)

(接上讲)

9  工作表中自定义事件的实例讲解,提示单元格内容改变

今天我们来讲解利用工作表的自定义事件,实现提示工作表单元格内容改变的方法。所利用的仍是mysheet类。
提示工作表单元格内容改变,仍是要监听工作表,当内容发生改变时进行提示。相关类模块的代码我们在之前已经进行了详细地讲解,我们在这讲中只是对工作表模块代码进行讲解。先看看代码的内容:

Private WithEvents MyS As mysheet
Private Sub MyS_mySelectRanA(X As Integer, Y As Integer)
MsgBox "单元格:" & X & "行," & Y & "列,发生了改变"
End Sub

Private Sub Worksheet_Activate()
 Set MyS = New mysheet
 Set MyS.mySht = Sheets("53")
End Sub

Private Sub Worksheet_Deactivate()
Set MyS = Nothing
End Sub

代码的截图:

10  实现提示单元格内容改变的代码解读及实现效果

代码的讲解:
  1)上述代码实现了当Sheets("53")的工作表的单元格内容发生改变时提示是哪个单元格发生了改变。
如上图,当F9单元格录入值后,点击回车,这个时候会提示第9行第6列的单元格发生了改变。
2)  Private WithEvents MyS As mysheet
在代码的头部仍是有这样的声明语句,这个语句的作用在前讲已经详细地讲解过,有两个作用,一是类对象的声明,一是让对象可以关联到对象的事件。
3)  Private Sub Worksheet_Activate()
      Set MyS = New mysheet
      Set MyS.mySht = Sheets("53")
End Sub
在这几句代码中,当工作表Activate的同时,把类赋给了肉身MyS ,同时让这个对象关联到工作表,以便这个对象可以很好地执行监听。
4)  Private Sub Worksheet_Deactivate()
Set MyS = Nothing
End Sub
类的肉身在工作表Deactivate时候就失去了生命。
5)  Private Sub MyS_mySelectRanA(X As Integer, Y As Integer)
MsgBox "单元格:" & X & "行," & Y & "列,发生了改变"
End Sub
这段代码是mySelectRanA事件的过程,这个事件过程提示了一个单元格改变的对话框,其中表示单元格位置的X,Y是输入的参数,这两个参数在这个事件触发的时候传递进来。那么这个事件是如何被触发的呢?
我们打开类模块的代码看下面的触发过程:
这类模块的代码中,当监听到工作表发生改变的时候,会触发到mySelectRanA事件,这个事件会同时传递进去两个参数myHS, myLS。这两个参数也就是X,Y的值,意义是表示发生改变的这个单元格的行和列的数值。
参数myHS, myLS是当选择时获得,myHS = Target.Row  myLS = Target.Column,这样就形成了一个完整的触发事件,这里还要注意一点:触发事件的标识是RaiseEvent。
最后我们再来回顾一下代码的执行过程:当工作表activate时,类赋给对象,对象和工作表进行关联;当单元格发生改变时,在类中首先监听到,然后触发自定义事件,在自定义的事件中给出了我们需要的提示。

今日内容回向:
  1  触发带参数的自定义事件是如何进行的?
2  如何理解事件的监听过程?

备注:本讲代码参考程序文件:VBA-CLASS(51-56).xlsm


我20多年的VBA实践经验,全部浓缩在下面的各个教程中


【分享成果,随喜正能量】长风破浪会有时,直挂云帆济沧海。有时候,开始并不是那么美好,但只要努力,哪怕一点一滴的付出,便终会有所收获,因为,皇天不负有心人。。

文章转载自VBA语言専攻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论