ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 EH云课堂直播课程免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 14183|回复: 22

[分享] 工作表多个控件共用同一事件,事件类模块实用案例

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-23 15:10 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:类和类模块
本帖最后由 百度不到去谷歌 于 2014-5-23 15:11 编辑

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

这个案例里 没有对控件写任何事件代码 而是使用了一个 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
1多控件使用同一事件示范-工作表.rar (23.95 KB, 下载次数: 1303)

评分

参与人数 4鲜花 +8 收起 理由
ardu95 + 2 太强大了
一指禅62 + 2 学习受教了
excel333 + 2 值得肯定
VBA万岁 + 2 值得肯定

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-5-23 15:51 | 显示全部楼层
进一步学习了类模块,感谢分享!

TA的精华主题

TA的得分主题

发表于 2014-5-23 20:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-5-25 08:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-5-27 08:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-7-22 22:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-7-25 18:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-7-25 20:23 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-25 21:46 | 显示全部楼层
琼恩·雪诺 发表于 2014-7-25 20:23
不错,能不能再搞点其他的应用?

方法给了 要怎么用得看自己 的实际 如果你实际问题可以发帖提问

TA的精华主题

TA的得分主题

发表于 2015-3-12 16:42 | 显示全部楼层
如何实现删除控件事件?比如说单击Commandbutton1删除commandbutton1,以此类推。试了一下代码不行啊,不会加代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

关注官方微信,每天学会一个新技能

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2019-10-14 09:32 , Processed in 0.068286 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

快速回复 返回顶部 返回列表