Excel精英培训网

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

[已解决]为什么窗体动态添加的控件不能相应类模块事件,求帮助

[复制链接]
发表于 2015-4-26 20:33 | 显示全部楼层 |阅读模式
本帖最后由 ocarinabs 于 2015-4-27 13:43 编辑

本来想做一个自动生成commandbutton的,点击显示名称,不知为何不能用,求帮助
最佳答案
2015-4-27 12:51
这是一个新人常犯的错误。
要确保这个类模块定义的按钮在窗体存在期间生效,应该将其声明在窗体代码中,而不是initialize事件中。

另外,有3个按钮,就必须声明3个变量,一般的使用数组。

窗体代码如下
  1. Dim ctlCB() As New CButtonEvent

  2. Private Sub UserForm_Initialize()
  3.     Dim nCtr As MSForms.CommandButton
  4.     ReDim ctlCB(1 To 3)
  5.     Dim i As Integer
  6.     For i = 1 To 3
  7.         Set nCtr = Me.Controls.Add("Forms.CommandButton.1", "cmdTest" & i)
  8.         With nCtr
  9.             .Caption = "CommandButton_" & i
  10.             .Move 10, 30 + (i - 1) * 50, 80, 40
  11.         End With
  12.         Set ctlCB(i) = New CButtonEvent
  13.         ctlCB(i).Init nCtr
  14.     Next i
  15.     UserForm1.Height = 4 * 55
  16. End Sub
复制代码

动态添加按钮类不响应.rar

15.61 KB, 下载次数: 78

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-4-27 06:10 来自手机 | 显示全部楼层
回复

使用道具 举报

发表于 2015-4-27 12:51 | 显示全部楼层    本楼为最佳答案   
这是一个新人常犯的错误。
要确保这个类模块定义的按钮在窗体存在期间生效,应该将其声明在窗体代码中,而不是initialize事件中。

另外,有3个按钮,就必须声明3个变量,一般的使用数组。

窗体代码如下
  1. Dim ctlCB() As New CButtonEvent

  2. Private Sub UserForm_Initialize()
  3.     Dim nCtr As MSForms.CommandButton
  4.     ReDim ctlCB(1 To 3)
  5.     Dim i As Integer
  6.     For i = 1 To 3
  7.         Set nCtr = Me.Controls.Add("Forms.CommandButton.1", "cmdTest" & i)
  8.         With nCtr
  9.             .Caption = "CommandButton_" & i
  10.             .Move 10, 30 + (i - 1) * 50, 80, 40
  11.         End With
  12.         Set ctlCB(i) = New CButtonEvent
  13.         ctlCB(i).Init nCtr
  14.     Next i
  15.     UserForm1.Height = 4 * 55
  16. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-4-27 13:01 | 显示全部楼层
本帖最后由 ocarinabs 于 2015-4-27 13:12 编辑
白开水的微笑 发表于 2015-4-27 12:51
这是一个新人常犯的错误。
要确保这个类模块定义的按钮在窗体存在期间生效,应该将其声明在窗体代码中,而 ...

谢谢老师指导。一下就理解了,那也可以使用collection先申明对吧
回复

使用道具 举报

发表于 2015-4-27 13:14 | 显示全部楼层
ocarinabs 发表于 2015-4-27 13:01
谢谢老师指导。一下就理解了,那也可以使用collection先申明对吧

Collection也可以,反正只要保证这个对象变量在整个窗体存续期间都存在即可。
数组么访问起来方便些。
回复

使用道具 举报

 楼主| 发表于 2015-4-27 13:41 | 显示全部楼层
白开水的微笑 发表于 2015-4-27 13:14
Collection也可以,反正只要保证这个对象变量在整个窗体存续期间都存在即可。
数组么访问起来方便些。

太感谢了,华丽解决了我的问题
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 12:03 , Processed in 0.321024 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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