事件处理程序触发时,Excel vba -get ActiveX Controlcheckbox

我有一个Excel电子表格分成不同的部分与命名范围。 我想隐藏一个命名的范围,当一个checkbox被点击。 我可以做一个checkbox,但我想有一个function,可以隐藏适当的部分基于调用checkbox。 我打算从event_handlers中调用该函数,以便点击checkbox,并将checkbox作为parameter passing。

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

这工作:

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 

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

 '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 

由于您在常规工作表上使用常规(Active-X)checkbox,因此最好的方法是为每个子项创build一个Click事件,然后使用checkbox名称的参数调用Hide的一个例程,如下所示:

 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 

我认为答案是创build另一个类有一个checkbox对象作为它的一部分,并声明该对象“WithEvents”然后,我可以创build一个方法chkBox_clicked(),只要任何checkbox是该类的成员将被调用点击。 我也可以在对象内存储范围。

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

有更多的信息.​​..伟大的网站btw为excel VBA。

编辑:这不起作用。 看到我下面的评论。