触发事件处理程序时,Excel vba -get ActiveX控件复选框

时间:2010-06-07 19:24:01

标签: excel vba

我有一个Excel电子表格,它被分成带有命名范围的不同部分。我想在单击复选框时隐藏命名范围。我可以为一个复选框执行此操作,但我希望有一个功能可以隐藏基于调用复选框的相应部分。我打算在单击复选框时从event_handlers调用该函数,并将复选框作为参数传递。

有没有办法访问调用事件处理程序的复选框对象?

这有效:

Sub chkDogsInContest_Click()

    ActiveSheet.Names("DogsInContest").RefersToRange.EntireRow.Hidden = Not chkMemberData.Value

End Sub

但这就是我想做的事情:

Sub chkDogsInContest_Click()

    Module1.Show_Hide_Section (<calling checkbox>)

End Sub

这些功能在不同的模块中定义:

'The format for the the names of the checkbox controls is
'CHECKBOX_NAME_PREFIX + <name>
'where "name" is also the name of the associated Named Range

Public Const CHECKBOX_NAME_PREFIX As String = "chk"


Public Function CheckName_To_SectionName(ByRef strCheckName As String)

    CheckName_To_SectionName = Mid(strCheckName, CHECKBOX_NAME_PREFIX.Length() + 1)

End Function


Public Sub Show_Hide_Section(ByRef chkBox As CheckBox)

    ActiveSheet.Names(CheckName_To_SectionName(chkBox.Name())).RefersTo.EntireRow.Hidden = True

End Sub

2 个答案:

答案 0 :(得分:2)

由于您在普通工作表上使用常规(Active-X)复选框,因此最好的办法是为每个子组件创建一个Click事件,然后使用复选框名称的参数调用一个例程来隐藏,就像:

Private Sub chkCheckBox1_Click()

    If chkCheckBox1.Value = True Then
        Call RangeHide("CheckBox1")
    End If

End Sub

Private Sub RangeHide(rangetohide As String)

    Range(rangetohide).EntireRow.Hidden = True

End Sub

答案 1 :(得分:0)

我认为答案是创建另一个具有checkbox对象作为其一部分的类并声明该对象“WithEvents”然后我可以创建一个方法chkBox_clicked(),只要有任何复选框,就会调用该方法。单击该类。我也可以在对象中存储范围。

http://www.cpearson.com/excel/Events.aspx

有更多信息...很棒的网站顺便提一下excel VBA。

编辑:这不起作用。请参阅下面的评论。