今天我们来讲解利用工作表的自定义事件,实现提示工作表单元格内容改变的方法。所利用的仍是mysheet类。提示工作表单元格内容改变,仍是要监听工作表,当内容发生改变时进行提示。相关类模块的代码我们在之前已经进行了详细地讲解,我们在这讲中只是对工作表模块代码进行讲解。先看看代码的内容: Private WithEvents MyS As mysheetPrivate 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 = NothingEnd 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 = NothingEnd 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实践经验,全部浓缩在下面的各个教程中: 【分享成果,随喜正能量】长风破浪会有时,直挂云帆济沧海。有时候,开始并不是那么美好,但只要努力,哪怕一点一滴的付出,便终会有所收获,因为,皇天不负有心人。。