Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2894|回复: 4

[已解决]vba如何将sheet本身和sheet中的ActiveX控件传给类的变量里

[复制链接]
发表于 2014-1-12 14:13 | 显示全部楼层 |阅读模式
如定义类cmd_Class
Public WithEvents cmd As MSForms.CommandButton
Public sh As Workbook

Sub cmd_Click()
    MsgBox "cmd_Click"
End Sub

然后在一个窗体按钮的click事件中将sheet1传给cmd_Class.sh
commandButton1是在sheet1中的一个ActiveX按钮

    Dim newclass As cmd_Class
    Set newclass = New cmd_Class
    newclass.sh = Worksheets("sheet1")
    newclass.cmd = Worksheets("sheet1").OLEObjects("commandButton1")

实际执行到给newclass.sh赋值时就报错,提示“运行时错误:91,对象变量或With块变量未设置”
该如何处理啊,谢谢!

最佳答案
2014-1-12 15:32
大的错误有3处
1 工作表对象类型错误 应为 Public sh As Worksheet
2 将对象赋值给对象变量需要用set语句.所以模块里那两个赋值语句前都应加set
3 最后一个赋值语句还应加上一点OLEObjects("commandButton1").object
发表于 2014-1-12 15:32 | 显示全部楼层    本楼为最佳答案   
大的错误有3处
1 工作表对象类型错误 应为 Public sh As Worksheet
2 将对象赋值给对象变量需要用set语句.所以模块里那两个赋值语句前都应加set
3 最后一个赋值语句还应加上一点OLEObjects("commandButton1").object
回复

使用道具 举报

 楼主| 发表于 2014-1-12 16:09 | 显示全部楼层
经过测试,发现此处用类实现比模块的执行效率慢,还是用模块吧。
多谢  Zipall
回复

使用道具 举报

发表于 2014-1-12 17:42 | 显示全部楼层
xq254369 发表于 2014-1-12 16:09
经过测试,发现此处用类实现比模块的执行效率慢,还是用模块吧。
多谢  Zipall

sheet或按钮少时它没有优势.只有按钮多时才需要考虑类模块.

比如 有100个sheet,每个sheet上有10个按钮都要执行类似的click过程.
不用类模块你需要写1000个过程,如果用类模块,那么只需要2个过程(类模块里的click过程和将类实例化的过程).
回复

使用道具 举报

 楼主| 发表于 2014-1-13 18:21 | 显示全部楼层
Thanks !
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-21 07:39 , Processed in 0.302757 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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