ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 22560|回复: 27

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

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-23 15:10 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:类和类模块
本帖最后由 百度不到去谷歌 于 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, 下载次数: 1974)
1类模块实现多控件公共事件-窗体.rar (126.24 KB, 下载次数: 2509)

评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-5-23 15:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
进一步学习了类模块,感谢分享!

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 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
琼恩·雪诺 发表于 2014-7-25 20:23
不错,能不能再搞点其他的应用?

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

TA的精华主题

TA的得分主题

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

本版积分规则

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

GMT+8, 2024-4-16 23:48 , Processed in 0.046266 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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