我想在 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
我猜您为按钮界面中的子单击指定的名称有问题。尝试不使用下划线:
接口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