ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 关于类模块 WithEvents 的问题,过来请老师们请教

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-13 14:52 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 月关 于 2019-12-17 12:26 编辑

老师好!
昨天在论坛里看到一个求助贴,关于用一个复选框控制其它复选框的。
刚好有老师给了几个链接,忍不住也跟着学了一下类模块。

模仿过程中遇到两个问题,过来向老师们请教。

1)在类模块顶端,“百度不到去谷歌”老师写的是 Public WithEvents obj As CommandButton,
但是,我写 Public WithEvents chk As CheckBox 就会报错,提示“对象不是源自动事件”。
在本论坛里搜索了一下,写成 Public WithEvents chk As msforms.CheckBox 解决了。
学生不明白的是,同样都是在WorkSheet里用的ActiveX控件,仅仅是命令按钮和复选框的区别,为什么后者必须要加上 MsForms ?
——这一点,希望老师能给扩展一下。

2)在CheckBox1(全选)的Click事件里,我写的
For Each obj In col
obj.Value = IIf(Me.Value = True, True, False)  '——这一句一直报错,不知道应该怎么写
Next

学生也不知道是不是应该写在这个事件里,还是把5个CheckBox都装到Collection里(我只装了4个),希望老师点拨一下。

以上,还望老师们赐教,谢谢!

以下为附件,不想下载附件的老师可以直接看图片
微信截图_20191213144752.png 微信截图_20191213144724.png


第一个类模块.rar (27.32 KB, 下载次数: 15)

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-13 15:02 | 显示全部楼层
还有一个问题,在标准模块里装其余4个复选框的时候,

For Each obj In sht.OLEObjects
If obj.Name Like "CheckBox*" And obj.Name <> "CheckBox1" Then


上面这样写可以,而我第一次是下面这样写的,报错

For Each obj In sht.OLEObjects
If obj.Name Like "CheckBox*" And obj.Caption <> "全选" Then


——不知道错在哪里

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-14 15:10 | 显示全部楼层
上来看了看,沉的这么快。。。。 周末有没有精通类模块的老师出没呀

TA的精华主题

TA的得分主题

发表于 2019-12-14 18:41 | 显示全部楼层
本帖最后由 lss001 于 2019-12-14 19:03 编辑
月关 发表于 2019-12-14 15:10
上来看了看,沉的这么快。。。。 周末有没有精通类模块的老师出没呀

可否不用类???
àé.rar (23.69 KB, 下载次数: 9)
以下用类!!!
àé.rar (25.02 KB, 下载次数: 38)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-14 19:16 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lss001 发表于 2019-12-14 18:41
可否不用类???

以下用类!!!

多谢老师!
我先下载下来,待回头仔细学习一下,若有不明白的地方,再向老师多多请益。

TA的精华主题

TA的得分主题

发表于 2019-12-14 19:43 | 显示全部楼层
me关键字代表对象本身,当你把代码写在工作表里面的话,这个me相当于Sheet1  ,所以你用 Me.Value 肯定是不对的

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-14 20:09 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
huang1314wei 发表于 2019-12-14 19:43
me关键字代表对象本身,当你把代码写在工作表里面的话,这个me相当于Sheet1  ,所以你用 Me.Value 肯定是不 ...

谢谢老师。
我记得是写到Checkbox1的click事件里了,好像那是唯一一次用到Me的地方,这样在checkbox里面用Me也不行吗?
而且我记得把Me改成checkbox1也不行,还是报错,所以干脆又改了回去
在外面看不到附件,也没法实验。大周末的就不占用老师的休闲时间了。
您是这方面的行家,等周一我也仔细跟楼上老师给的范例对比一下。还有不明白的地方,再向老师们请教。

TA的精华主题

TA的得分主题

发表于 2019-12-16 19:26 | 显示全部楼层
第一个类模块(原版与魔改).rar (57.38 KB, 下载次数: 24)
里面有2个版本,

1个是在你基础上修改,可以让效果出现,但是你本来的代码并没有考虑到下级框影响上方的总控勾选框,所以实际上不是必需使用类模块的

第二个魔改版,真正做到上下互相联动,当下方勾选框全选中时,上方总控框也会被勾上

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-17 11:06 | 显示全部楼层
本帖最后由 月关 于 2019-12-17 11:10 编辑

多谢 lss001 老师,huang1314wei 老师,excelhomesnake 老师 。
先一并回复一下两位老师:特意用类只是想学习类而已;也因为上一个原因,所以先简简单单的来。

我看了一下两位老师代为修改的代码,基本就是最后CheckBox1的Click事件时的那一句代码的问题了。

学生特别想知道的是:
为什么老师可以用 Public WithEvents obj As CommandButton,
而换成复选框必须 Public WithEvents chk As msforms.CheckBo
MsForms 应该怎样使用?

谢谢老师!

TA的精华主题

TA的得分主题

发表于 2019-12-17 11:13 | 显示全部楼层
月关同学又有新的学习方向,腻害了,word哥
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 01:15 , Processed in 0.043718 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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