在“测试”工作表中,我有两个名为 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”按钮一样?
您可以简单地添加:
Me.btTest1.Value = True
到事件代码的末尾。
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