当前位置:  开发笔记 > 后端 > 正文

将单击的VBA功能分配给Excel Userform上的动态创建按钮

如何解决《将单击的VBA功能分配给ExcelUserform上的动态创建按钮》经验,为你挑选了2个好方法。

我正在使用以下代码在Excel用户表单上动态创建按钮:

With Me.CurrentFrame.Controls.Add("Forms.CommandButton.1")
    .Caption = "XYZ"
    .name = "AButton"
    .Font.Bold = True
    .ForeColor = &HFF&
    ... blah blah blah
End With

我想在单击这些按钮时分配一个函数来运行,但我找不到一种直接的方法来执行此操作,因为按钮本身没有属性.

有没有办法用上面的习语做到这一点?我应该以不同的方式处理这整件事吗?



1> 小智..:

在Excel表单中动态添加控件事件; 您需要先在类模块中添加事件.对于我的例子,我将添加一个名为clsTEST的类模块,其中包含一个事件,btn_click()

    '#### CLASS NAMED clsTEST
    Public WithEvents btn As MSForms.CommandButton
    Public frm As UserForm

    Dim iCount As Long

    Private Sub btn_Click()

    iCount = IIf(iCount < 1, 1, iCount + 1)
    btn.Caption = "Count " & Str(iCount)

End Sub
'### END CLASS

正如您所看到的,唯一能做的就是将按钮上的标题设置为您点击它的次数.接下来,在表单代码中输入以下内容:

    Dim mColButtons As New Collection    '## SET A NEW COLLECTION

    Private Sub UserForm_Activate()
    '
    Dim btnEvent As clsTEST
    Dim ctl As MSForms.Control
    '
    Set ctl = Me.Controls.Add("Forms.CommandButton.1")
    '
    With ctl
    .Caption = "XYZ"
    .Name = "AButton"
    END With
    '
    Set btnEvent = new clsTEST   
    Set btnEvent.btn = ctl
    set btnEvent.frm = Me
    '
    mColButtons.add btnEvent
    'End Sub

激活表单时,它将创建一个按钮.每次单击按钮时,标题都会改变.



2> DJ...:

您需要为每个按钮动态创建代码/事件处理程序.

这需要做一些事情 - 请看这里:http://navpadexcel.blogspot.com/2006/11/httpwwwcpearsoncomexcelvbehtm.html

更好的方法可能是在表单上创建一堆按钮(尽可能多的是您需要的).也创建事件处理程序代码.最初让它们全部隐藏起来.

然后,当您的表单打开时,您可以动态更改按钮标题,使其可见并移动它们.您最初创建的事件代码将按预期链接到激活的按钮.


聪明的主意!似乎VBA中的一切都需要聪明.
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有