excel学习库

excel表格_excel函数公式大全_execl从入门到精通

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

【分享成果,随喜正能量】夜卧早起三月春,缓形无努志逆生。万物皆有灵,众生皆平等,存一分善心,常常布施善行,养生护生,世间就多温暖一些。。

《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

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

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

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

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接