课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com
有这样一种典型场景,在工作表中你有100个按钮 这100个按钮要执行的是相同的任务,
这些任务的之间的区别就是参数是按钮的名字 平时一两个的话 写一个公共宏
在每个按钮事件里直接写上对应的名字参数也能实现 但是太多了以后就有麻烦
那有没有什么办法 让vba识别当前按钮是哪一个 并自动传递这个当前按钮的名字到公共宏的参数中呢
当时是有的 经过辛苦的百度 然后再加上F1即实际试验 和理解 初步理解了 事件类的运行机制
特此分享如下
本例中 多个按钮控件 要达到点击任何一个按钮 弹出对话框显示按钮名称和它的点击次数
效果如下
这个案例里 没有对控件写任何事件代码 而是使用了一个 COBJ自定义类
类代码如下
-
Option Explicit
-
Public WithEvents obj As CommandButton
-
Private icount&
-
Private Sub obj_Click()
-
icount = icount + 1
-
MsgBox obj.Caption & " 你点了我第" & icount & "次"
-
End Sub
复制代码
然后写了一个绑定控件的公共过程
-
Option Explicit
-
Dim co As New Collection
-
Public Sub OBJ_INI(sht As Worksheet) '初始化控件,绑定到同一事件
-
Dim obj As Object
-
Dim myc As CObj
-
Set co = Nothing
-
For Each obj In sht.OLEObjects
-
If obj.Name Like "CommandButton*" Then '该处为按钮对象,也可换其他类
-
Set myc = New CObj
-
Set myc.obj = CallByName(sht, obj.Name, VbGet)
-
co.Add myc
-
End If
-
Next
-
Set myc = Nothing
-
End Sub
复制代码
然后在打开工作簿和初始化按钮中 加入了初始化代码
-
Private Sub CommandButton7_Click()
-
OBJ_INI Sheet1
-
End Sub
复制代码
没错 以上就是所有的代码 就实现了动画的功能 当然还可以 在类模块中添加更多功能
比如 点击某个按钮时就把它放大或者改变颜色什么的 剩下的就自由发挥了
另外附送一个窗体控件类事件的实现代码 稍有不同 思路基本一致
希望大家玩的happy