excel - 将单击 VBA 函数分配给 Excel 用户窗体上动态创建的按钮

标签 excel vba event-handling userform

我使用以下代码在 Excel 用户窗体上动态创建按钮:

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

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

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

最佳答案

在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

当您激活表单时,它将创建一个按钮。每次单击该按钮时,标题都会更改。

关于excel - 将单击 VBA 函数分配给 Excel 用户窗体上动态创建的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/566770/

相关文章:

C#:你应该在哪里放置事件处理程序委托(delegate)?

c# - 什么支持Excel更好? (VB.net 或 C#.net ??)

excel - 如何使用行输入搜索字符串,然后在 Excel 单元格中打印接下来的 5 行

c++ - 实例化 ActiveX 控件后,Excel 中出现 Visual Basic 运行时错误 -2147319765 (8002802b) 的原因是什么?

javascript - keyup 和 keydown 不同步?

c - Linux 中的鼠标事件处理?

excel - 使用 VBA 从 Excel 表中导入 Sharepoint 2010 列表数据

即使编码了密码后,Excel VBA 仍然提示输入密码

vba - 如何在vba中隐藏图表

vba - Excel VBA - 图表中 'Format Data Series - Gap Width' 的宏?