点击某个按钮名称会触发Class Module中的WithEvents

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

在“测试”工作表中,我有两个名为 btTest1 和 btTest2 的 ActiveX 按钮。

在“测试”工作表模块中:

Dim MyButtons As Collection

Private Sub Worksheet_Activate()
Set MyButtons = New Collection
For i = 1 To 2
    Set ButtonClass = New ClassTest
    If i = 1 Then Set ButtonClass.obj1 = ActiveSheet.btTest1
    If i = 2 Then Set ButtonClass.obj1 = ActiveSheet.btTest2
    MyButtons.Add ButtonClass
Next
End Sub

ClassTest类模块中:

Private WithEvents bt As MSForms.CommandButton

Property Set obj1(b As MSForms.CommandButton)
Set bt = b
End Property

Private Sub bt_Click()
MsgBox bt.Caption
End Sub

激活“测试”表后,单击“测试 1”按钮,它显示消息框“测试 1”,当我单击“测试 2”按钮时,它显示消息框“测试 2”。

如何编写代码,以便在激活“测试”工作表时直接显示消息框“TEST 1”,就好像用户确实单击了“TEST 1”按钮一样?

excel vba excel-2010
2个回答
1
投票

您可以简单地添加:

Me.btTest1.Value = True

到事件代码的末尾。


1
投票

Rory 已经完全回答了您的问题,具体取决于您可能想要实现的目标 -

'''' worksheet module '''
Option Explicit
Private MyButtons As Collection

Private Sub Worksheet_Activate()
Dim i As Long
Dim ButtonClass As ClassTest

    If MyButtons Is Nothing Then
        Set MyButtons = New Collection
        For i = 1 To 2
            Set ButtonClass = New ClassTest
            If i = 1 Then Set ButtonClass.obj1 = Me.btTest1
            If i = 2 Then Set ButtonClass.obj1 = Me.btTest2
            MyButtons.Add ButtonClass
        Next
    End If
    
    Set ButtonClass = MyButtons(1) ' refer to the first item (a ButtonClass instance) in the collection
    
    ButtonClass.bt_Click  '

End Sub

''' ClassTest '''
Option Explicit
Private WithEvents bt As MSForms.CommandButton

Public Property Set obj1(b As MSForms.CommandButton)
Set bt = b
End Property

Public Sub bt_Click()
MsgBox bt.Caption
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.