在 Excel VBA 中为用户窗体的命令按钮创建接口类模块

问题描述 投票:0回答:1

我想在 Excel VBA 中为用户窗体的命令按钮创建一个接口类模块。点击事件应该在类中执行。谁能帮我这个?不知何故我做不到 非常感谢

到目前为止我的代码:

类接口:iButtonInterface

Sub oFormButton_Click()
End Sub

类:clsSaveButton

Implements iButtonInterface

Private WithEvents oFormButton As MsForms.CommandButton

Sub iButtonInterface_oFormButton_Click()
    ' Code if cmdSave-Button on userform is clicked
    MsgBox "Save Button clicked!" & oFormButton
End Sub

代码用户表单1

Private Sub UserForm_Initialize()
    Dim ctrl   As Control

    ' Initialize Button-Class
    Dim oButton As iButtonInterface

    For Each ctrl In Me.Controls
        Select Case ctrl.Name
            Case "cmdSave"
                Set oButton = New clsSaveButton
            Case Else
        End Select
    Next ctrl
End Sub
excel vba class user-interface
1个回答
0
投票

我猜您为按钮界面中的子单击指定的名称有问题。尝试不使用下划线:

接口IButton: 除了您的点击处理程序之外,它还需要一种如何将真实表单按钮绑定到您的按钮的方法,此处为设置属性

Option Explicit

Public Sub oFormButtonClick()
    Err.Raise 123456789, , "Implemented in derived class"
End Sub

Public Property Set FormButton(ByVal vNewValue As MSForms.CommandButton)
    Err.Raise 123456789, , "Implemented in derived class"
End Property

cls保存按钮: 实现接口并将点击事件重定向到您的按钮

Option Explicit

Implements IButton

Private WithEvents oFormButton As MSForms.CommandButton

Private Property Set IButton_FormButton(ByVal vNewValue As MSForms.ICommandButton)
    Set oFormButton = vNewValue
End Property

Private Sub IButton_oFormButtonClick()
    ' Code if cmdSave-Button on userform is clicked
    MsgBox "Save Button clicked! " & oFormButton.Caption
End Sub

Private Sub oFormButton_Click()
    Call IButton_oFormButtonClick
End Sub

表格: 声明按钮接口类型的私有变量并实例化按钮包装类的对象。设置对包装器内真实表单按钮的引用

Option Explicit

Private oButton As IButton

Private Sub UserForm_Initialize()

    ' Initialize Button-Class
    Dim ctrl   As Control

    For Each ctrl In Me.Controls
        Select Case ctrl.Name
            Case "cmdSave"
                Set oButton = New clsSaveButton
                Set oButton.FormButton = ctrl
            Case Else
        End Select
    Next ctrl
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.