在VBA事件处理程序中获取对Forms复选框的引用

时间:2013-12-16 15:00:19

标签: excel vba excel-vba office-2010

我在Excel 2010中有一些表单复选框。我需要在单击它们时执行一些常用代码。为此,我想传递一个对Checkbox的引用,但到目前为止我只能将它作为一个形状输入。

要抢占问题,是的,它们需要是表单复选框而不是ActiveX复选框。

我是VBA的新手,所以感谢任何帮助。

Sub CheckBox1_Click()
    'I really want this reference to be a Checkbox, not a Shape
    Dim shape As Shape
    Set shape = ActiveSheet.Shapes("Check Box 1")            

    DoSomething(shape)
End Sub

Sub DoSomething(MSForms.CheckBox)
    'I need the reference to be a checkbox as I need to check 
    'whether it's checked or not here
End Sub

2 个答案:

答案 0 :(得分:3)

在这种情况下,所有复选框都没有不同的点击事件。只有一个。并使用Application.Caller获取调用它的ckeckbox的名称。将其作为String传递给相关的子,然后使用它。

<强> UNTESTED

Sub CheckBoxMain_Click()
    Dim sName As String

    sName = Application.Caller

    DoSomething (sName)
End Sub

Sub DoSomething(sCheck As String)
    Dim shp As shape

    Set shp = ActiveSheet.Shapes(sCheck)

    With shp
        '~~> Do something
    End With
End Sub

您也可以将两者合并为一个,并将其与所有复选框相关联。

Sub DoSomething()
    Dim shp As shape

    Set shp = ActiveSheet.Shapes(Application.Caller)

    With shp
        '~~> Do something
    End With
End Sub

答案 1 :(得分:2)

这与Siddharth类似,但添加了ControlFormat的{​​{1}}属性。 Shape可以获得ControlFormat的智能感知,在这种情况下为CheckBox

Value