在Excel中使用VBA访问表单控件的事件过程

时间:2012-05-23 18:28:46

标签: forms events vba global

有没有办法为表单控件定义事件过程,例如ActiveX对象的情况?

我有一个GUI,当前用户添加/删除ActiveX命令按钮,但在尝试将项目添加到全局集合时添加了每个按钮时,会遇到Error 91。我最好的猜测是因为this much hated phenomenon。根据项目的当前状态,如果我能够定义其事件过程,我最好的选择是切换到使用表单控制按钮。如果没有,我可能需要以某种方式保存全局变量并在操作ActiveX控件对象后读回它们。

1 个答案:

答案 0 :(得分:2)

如果您只想添加按钮和捕获点击,您可以为它们分配一个公共宏,并根据按钮的名称(您在创建按钮时设置,以及哪些可以是通过被调用程序中的Application.Caller访问

Sub AddButtons()

    With ActiveSheet.Buttons.Add(100, 100, 50, 50)
        .Name = "button1"
        .OnAction = "ClickHandler"
    End With
    With ActiveSheet.Buttons.Add(200, 100, 50, 50)
        .Name = "button2"
        .OnAction = "ClickHandler"
    End With


End Sub

Sub ClickHandler()
    Dim bName As String

    bName = Application.Caller
    Select Case bName
        Case "button1": MsgBox "Clicked First button"
        Case "button2": AnotherSub 
    End Select

End Sub