ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 利用类模块对工作表中的ActiveX控件批量设定的注意事项

利用类模块对工作表中的ActiveX控件批量设定的注意事项

作者:绿色风 分类: 时间:2022-08-18 浏览:51
楼主
amulee
利用类模块可以减少许多重复的代码。
以给控件设定批量的Click事件为例,在工作簿中定义了以下名为clsChe的类模块:
  1. Public WithEvents Chkbox As MSForms.CheckBox
  2. Private Sub Chkbox_Change()
  3.     MsgBox Chkbox.Value
  4. End Sub


利用该类模块,可以轻松实现对复选框进行批量设置Change事件。

在窗体中,只需要绑定窗体中的复选框即可,代码如下:
  1. Dim Chk(1 To 4) As clsChe
  2. Private Sub UserForm_Activate()
  3.     For i = 1 To 4
  4.         Set Chk(i) = New clsChe
  5.         Set Chk(i).Chkbox = Me.Controls("CheckBox" & i)
  6.     Next i
  7. End Sub


但是在工作表中似乎不太容易实现,很多人试过Shapes集合,试过CheckBoxes集合,甚至改变类模块中的定义为
  1. Public WithEvents Chkbox As CheckBox

但会发现,这个CheckBox类型并不支持事件。

因而会给人造成工作表中的复选框控件不是MSForms.CheckBox的错觉,其实不然。
在工作表中插入的复选框和窗体中的其实是一样的。
但是在工作表中插入的复选框增加了一层Shape外衣,使用户无法直接访问到内层的MSForms.CheckBox控件。
必须脱去层层外衣才能访问到其核心控件,其实这个真正的复选框控件在这里
  1. Shapes(i).OLEFormat.Object.Object


我们还可以利用CALLBYNAME函数来直接访问
  1. CallByName(Sheet1, "CheckBox" & i, VbGet)



其余代码同窗体中是一致的。

请查看附件:
类模块示例.rar
2楼
wqfzqgk
3楼
lnjyzxp
老师附件:类模块示例中用的:CallByName(Sheet1, "CheckBox" & i, VbGet)已能生搬硬套能用了,但还想了解一下工作表中的真正的复选框:Shapes(i).OLEFormat.Object.Object 怎么用?还请老师不吝赐教。
4楼
cjccchj
还有一种方法:Sheet1.OLEObjects("CheckBox" & i).object 也是可以的。

但是有一个问题困扰了我快大半年了,就是将上述能在VBA中很容易实现的代码, 封装进VB内时,在
Set Chk(i).Chkbox = CallByName(Sheet1, "CheckBox" & i, VbGet) 语句执行时出错。错误提示是类型不匹配,怎么也找不出原因来,用TypeName(CallByName(Sheet1, "CheckBox" & i, VbGet))来验证类型是匹配的,不知总版主有啥解决办法没?
5楼
ryueifu
shifu,  工作表上的 Form控件,和 ActiveX控件,有什么不同?
比如,插入100个Form的chebkbox ,另一个工作簿插入100个ActiveX的checkbox

保存后,大小有区别吗?
另外,在使用上,有哪些主要区别呢
6楼
amulee
个人看法:Form的CheckBox在ActiveX的CheckBox的基础上又套了一个外壳。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap