Excel VBA工作表多个控件共用同一事件,VBA事件类模块实用案例

975 次浏览

微信公众号 【EXCEL880】 QQ群【341401932】

课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com

有这样一种典型场景,在工作表中你有100个按钮 这100个按钮要执行的是相同的任务,
这些任务的之间的区别就是参数是按钮的名字 平时一两个的话 写一个公共宏
在每个按钮事件里直接写上对应的名字参数也能实现 但是太多了以后就有麻烦
那有没有什么办法 让vba识别当前按钮是哪一个 并自动传递这个当前按钮的名字到公共宏的参数中呢
当时是有的  经过辛苦的百度 然后再加上F1即实际试验 和理解 初步理解了 事件类的运行机制
特此分享如下
本例中 多个按钮控件 要达到点击任何一个按钮 弹出对话框显示按钮名称和它的点击次数 
效果如下
Excel VBA工作表多个控件共用同一事件,VBA事件类模块实用案例插图 

这个案例里 没有对控件写任何事件代码 而是使用了一个 COBJ自定义类
类代码如下

  1. Option Explicit
  2. Public WithEvents obj As CommandButton
  3. Private icount&
  4. Private Sub obj_Click()
  5.     icount = icount + 1
  6.     MsgBox obj.Caption & ” 你点了我第” & icount & “次”
  7. End Sub

复制代码

然后写了一个绑定控件的公共过程

  1. Option Explicit
  2. Dim co As New Collection
  3. Public Sub OBJ_INI(sht As Worksheet)  ‘初始化控件,绑定到同一事件
  4.     Dim obj As Object
  5.     Dim myc As CObj
  6.     Set co = Nothing
  7.     For Each obj In sht.OLEObjects
  8.         If obj.Name Like “CommandButton*” Then ‘该处为按钮对象,也可换其他类
  9.             Set myc = New CObj
  10.             Set myc.obj = CallByName(sht, obj.Name, VbGet)
  11.             co.Add myc
  12.         End If
  13.     Next
  14.     Set myc = Nothing
  15. End Sub

复制代码

然后在打开工作簿和初始化按钮中 加入了初始化代码

  1. Private Sub CommandButton7_Click()
  2.     OBJ_INI Sheet1
  3. End Sub

复制代码

没错 以上就是所有的代码 就实现了动画的功能 当然还可以 在类模块中添加更多功能
比如 点击某个按钮时就把它放大或者改变颜色什么的 剩下的就自由发挥了
另外附送一个窗体控件类事件的实现代码 稍有不同 思路基本一致
希望大家玩的happy 
Excel VBA工作表多个控件共用同一事件,VBA事件类模块实用案例插图1 1多控件使用同一事件示范-工作表.rar
Excel VBA工作表多个控件共用同一事件,VBA事件类模块实用案例插图1 1类模块实现多控件公共事件-窗体.rar