代码之家  ›  专栏  ›  技术社区  ›  xdhmoore

触发事件处理程序时,Excel VBA-获取ActiveX控件复选框

  •  2
  • xdhmoore  · 技术社区  · 15 年前

    我有一个Excel电子表格,它被分为不同的部分和命名范围。我想在单击复选框时隐藏命名范围。我可以为一个复选框执行此操作,但我希望有一个函数可以根据调用复选框隐藏相应的部分。我计划在单击复选框时从事件处理程序调用该函数,并将该复选框作为参数传递。

    是否可以访问调用事件处理程序的复选框对象?

    这工作:

    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 回复  |  直到 14 年前
        1
  •  2
  •   Lance Roberts    15 年前

    因为您在普通工作表上使用常规(Active-X)复选框,所以您最好为每个Sub创建一个Click事件,然后使用复选框名称的参数为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
    
        2
  •  0
  •   Community CDub    7 年前

    我认为答案是创建另一个将复选框对象作为其一部分的类,并声明该对象为“WithEvents”,然后我可以创建一个方法chkbox-clicked(),每当单击该类的任何复选框时都将调用该方法。我也可以在对象中存储范围。

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

    有更多信息…伟大的网站btw为excel vba。

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