如何实现激活test工作表时自动触发btTest1按钮的Click事件?
问题背景
在名为test的工作表中,存在两个ActiveX按钮,名称分别为btTest1和btTest2。已在工作表模块及ClassTest类模块中编写了如下VBA代码:
工作表模块代码
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
当前激活test工作表后,点击btTest1会弹出显示“TEST 1”的MsgBox,点击btTest2会弹出显示“TEST 2”的MsgBox。现需实现:激活test工作表时自动弹出显示“TEST 1”的MsgBox,效果等同于用户手动点击btTest1按钮,请问该如何编写代码?
解决方案
以下是三种实用的实现方式,按需选择:
方法1:直接触发按钮的Click事件
这是最直接模拟手动点击的方式,在Worksheet_Activate过程末尾添加触发代码即可:
修改后的工作表模块代码:
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 ' 触发btTest1的点击事件 ActiveSheet.btTest1_Click End Sub
方法2:调用类模块中的弹窗逻辑
如果希望通过已封装的类实例实现,可先给ClassTest类添加公共方法暴露弹窗逻辑,再从工作表模块调用:
步骤1:修改ClassTest类模块代码
Private WithEvents bt As MSForms.CommandButton Property Set obj1(b As MSForms.CommandButton) Set bt = b End Property Private Sub bt_Click() ShowButtonCaption End Sub ' 添加公共方法,对外暴露弹窗逻辑 Public Sub ShowButtonCaption() MsgBox bt.Caption End Sub
步骤2:修改工作表模块代码
在Worksheet_Activate中获取第一个类实例并调用公共方法:
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 ' 调用第一个按钮对应的类实例的公共方法 MyButtons(1).ShowButtonCaption End Sub
方法3:模拟物理点击动作(不推荐)
通过SendKeys模拟按键点击,兼容性较差,仅在特殊场景下使用:
' 在Worksheet_Activate末尾添加 ActiveSheet.btTest1.SetFocus SendKeys "{ENTER}"
内容的提问来源于stack exchange,提问作者karma
相关产品推荐
相关产品推荐

