【问题标题】:Create Button Dynamically and add OnClick Event动态创建按钮并添加 OnClick 事件
【发布时间】:2020-03-24 19:08:27
【问题描述】:

在 Outlook 2010 中,我有一个名为 UserForm1 的用户表单。 在这里,我动态创建一个按钮并显示表单。 单击按钮时如何添加事件(子btnLoad_OnClick)?

这是我的代码:

Dim btnLoad As MSForms.CommandButton

Sub btnLoad_OnClick()
    MsgBox ("Button Clicked")
End Sub

Sub SaveAttachment()

    Set btnLoad = UserForm1.Controls.Add("Forms.CommandButton.1", "btnLoad", True)

    With btnLoad
        .Caption = "Click Me"
        .Left = 30
        .Top = 30
        .Height = 30
        .Width = 60
    End With

    With UserForm1
        .Width = 850
        .Show
    End With

End Sub

【问题讨论】:

    标签: vba events button outlook click


    【解决方案1】:

    在您的UserForm1 模块中添加

    Private Sub btnLoad_Click()
        MsgBox "Button Clicked"
    End Sub
    

    并保存。
    每当您动态添加按钮 btnLoad 并单击它时,都会弹出消息。

    【讨论】:

    • 在 VBA 中我有一个名为 Module1 的模块,我原始帖子中的源代码也存储在 Module1 中。我希望btnLoad_Click() 也存储在“Module1”中,而不是UserForm1。这样做的原因是:我想将 Outlook VBA 交付给我的同事,当我告诉他们创建一个新模块、一个新表单并将所有源代码粘贴到 Module1 时,这比在 3 中粘贴源代码更容易不同的文件。另见:stackoverflow.com/questions/59087790/…
    • 用户表单上按钮的事件处理代码应该在用户表单的模块中。这不仅是一种好的做法,而且更容易,因为您不需要额外的类模块,因为您只能在类模块中拥有事件处理代码。 Module1 不是类模块,除非你的类被称为 Module1。因此事件处理代码将无法在其中工作。如果您不想将代码放在 UserForm1 模块中,则需要添加一个新类并声明您的按钮 WithEvents 来处理事件。
    • 你为什么不右键单击 -> 导出你的模块和用户表单来分发它,而不是让其他人创建新模块并粘贴代码?
    • 我只知道可以分别导出每个UserForm和每个Module。所以我目前必须导出 2 个用户窗体和 1 个模块。有没有办法在一个包中导出所有内容?
    • 好的,Nacorid,我在上面将您的答案标记为解决方案,因为如果您正常工作,它就是解决方案。我有一个非常特殊的星座,在这里您的“导出”反馈会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2013-07-07
    • 2011-10-20
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多