- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VBA中的控件数组
2009年2月28日
评论 发表评论
大家都知道,和VB不一样,VBA中不能直接创建控件数组。然而可以使用WithEvents来模拟相同的功能。我们需要一个类来处理控件的事件,而每一个控件需要一个类实例。对于不同控件的类实例,我们可以使用一个对象数组或者集合来实现。
这里使用按钮控件做为例子来介绍怎样在窗体和工作表中创建控件数组。
创建类创建控件数组之前,我们需要一个类来处理控件的事件。在VBE窗口中,单击菜单“插入”-“类模块”,在属性窗口中将类的名称改为“cCB”。在类模块中添加下面这一行:
Private WithEvents m_CB As MSForms.CommandButton
这样你就可以从代码栏的顶部左边下拉列表中选择m_CB并选择右边下拉列表中相应的事件。完整的代码如下:
Private WithEvents m_CB As MSForms.CommandButton
初始化,将控件绑定到类
Public Sub Init(ctl As MSForms.CommandButton)
Set m_CB = ctl
End Sub
控件的Click事件
Private Sub m_CB_Click()
MsgBox 你点击了: m_CB.Caption
End Sub
注销类
Private Sub Class_Terminate()
Set m_CB = Nothing
End Sub
窗体中的控件数组然后创建一个窗体,在窗体中添加两个CommandButton,将这两个按钮控件分别命名为cmd1和cmd2,然后在窗体中的初始化事件中添加代码如下:
Private ctlCB(1 To 2) As cCB
以对象数组保存类的实例
Private Sub UserForm_Initialize()
Set ctlCB(1) = New cCB
将按钮cmd1赋给类的实例
ctlCB(1).Init cmd1
Set ctlCB(2) = New cCB
ctlCB(2).Init cmd2
End Sub
这里使用对象数组ctlCB(1 to 2)来保存类实例。每当使用Set语句创建一个类实例,然后使用类的Init方法将按钮控件赋给这个实例。
也可以使用集合来保存这个类的实例。代码如下:Private colCB As New CollectionPrivate ctlCB As cCB‘ 以集合保存类的实例
Private Sub UserForm_Initialize()
Set ctlCB = New cCB
将按钮cmd1赋给类的实例
ctlCB.Init cmd1
将类的实例加入到集合中
colCB.Add ctlCB
Set ctlCB = New cCB
ctlCB.Init cmd2
colCB.Add ctlCB
End Sub
点击按钮,将弹出对应的消息框。
上面的例子是将手动添加的控件添加到控件数组中。也可以动态创建控件数组。创建一个新的窗体,然后在窗体的初始化事件中使用Controls集合的Add方法添加CommandButton控件,再将创建好的控件赋给类实例。完整代码如下:
Private ctlCB(1 To 3) As cCB
Private Sub UserForm_Initialize()
Dim nCtr As MSForms.CommandButton
For i = 1 To 3
添加按钮控件
Set nCtr = Me.Controls.Add(Forms.CommandButton.1, cmdTest i)
设置按钮控件标题和位置
With nCtr
.Caption = CommandButton_ i
.Move 10, 10 + (i - 1) * 40, 80, 30
End With
创建cCB类实例
Set ctlCB(i) = New cCB
将控件赋给类实例
ctlCB(i).Init nCtr
Next i
End Sub
工作表中的控件数组同样,在工作表中也可以创建控件数组(但和窗体有些不同)。在工作表中分别创建一个Label控件和三个CommandButton控件,如下图:
然后在Label控件的Click事件中添加如下代码:
Dim cmdCtl() As cCB
标签控件的Click事件
Private Sub Label1_Click()
Dim cmd As OLEObject 所有OLE对象
Dim i As Integer
重新定义数组
您可能关注的文档
最近下载
- 保监[2005]22号-关于开发建设项目水土保持咨询服务费用计列的指导意见.doc VIP
- 《水利工程施工》课程设计-松涛水利枢纽工程施工总进度网络计划编制.doc VIP
- CAD调度台软件用户手册.pdf VIP
- 潜艇结构优化设计方法:理论、技术与案例的深度剖析.docx VIP
- 第29课 中国特色社会主义进入新时代 教学设计.pdf VIP
- 餐饮店员工手册.docx VIP
- 2014款雷克萨斯NX200NX200t_汽车使用手册用户操作图解驾驶指南车主车辆说明书电子版.pdf
- 英国工人阶级状况.doc
- 国开一网一 当代中国政治制度 形考任务1话题讨论答案 结合中国共产党的百年发展史,谈谈对党的执政方式的理解.docx VIP
- 第29课中国特色社会主义进入新时代课件(共18张PPT)(含音频+视频).pptx VIP
原创力文档


文档评论(0)