Worksheet_Change()中的EntireColumn.Hidden

时间:2015-06-09 07:44:23

标签: excel vba

使用Excel 2010我正在编辑现有的不受保护的工作簿,并在EntireColumn.Hidden事件中的命令中创建了EntireRow.HiddenWorksheet_Change(),以便在更改数据验证单元格时触发,但是他们不会#39; t work。

Private Sub Worksheet_Change(ByVal Target As Range)

With Application
    .ScreenUpdating = False
    .EnableEvents = False
End With

If Not Intersect(Target, Range("$C$2")) Is Nothing Then
    Select Case Target.Value
        Case "NO"
            MsgBox "You just changed to HIDE"          '<= Proves it fires
            Range("$C$3").Value = "Invisible"          '<= Does change cell
            Columns("N:O").EntireColumn.Hidden = True  '<= Doesn't hide
        Case "YES"
            MsgBox "You just changed to UNHIDE"        '<= Proves it fires
            Range("$C$3").Value = "Visible"            '<= Does change cell
            Columns("N:O").EntireColumn.Hidden = False '<= Doesn't unhide
    End Select
End If

With Application
    .ScreenUpdating = True
    .EnableEvents = True
End With

End Sub

事件正在解雇,因为我有MsgBox来证明这一点。我可以更改单元格值等,但不能更改列/行的隐藏/取消隐藏。

我已将我的代码复制到一本新书中并且有效。所以我把它复制回原版书中,但作为一张新的,空白的表格,它的作品。它仍然没有在原始的,相当大的表格中工作。

当我将其复制到一个简单的宏中时,按需要工作,隐藏正确的列,但只需按一下按钮:

Sub HideThem()
    Columns("N:O").EntireColumn.Hidden = True '<= DOES work
End Sub

我需要根据单个单元格的值自动更新。我甚至试图在Sub事件中调用此迷你Worksheet_Change(),但这也不起作用。

是否存在与其他命令/事件,片上按钮,图像,合并单元格等可能阻止列/行隐藏的已知冲突?

我尝试使用CheckBox代替YES/NO数据验证单元格来激活代码(因为这可以接受),但是当我尝试插入ActiveX CheckBox时,它说无法插入对象,即使是在一本全新的空白书中也是如此。这可能是一个相关的问题吗?

1 个答案:

答案 0 :(得分:0)

我想你在单元格C3中有一个下拉列表,其中包含两个项目,即&#34; Visible&#34;和&#34;隐形&#34;。 当您从空白/&#34;可见&#34;更改范围C3的值时,以下代码将隐藏列N和O.到&#34; Invisible&#34;。在此操作之前,您必须阅读该消息并单击“确定”。改变&#34; Invisible&#34;到&#34;可见&#34;将为您提供一个消息框。单击“确定”,看到隐藏的列显示自己。

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("C3") = "Invisible" Then
        MsgBox ("You just changed to HIDE")
        Columns(14).Hidden = True
        Columns(15).Hidden = True
    Else
    If Range("C3") = "Visible" Then
        MsgBox ("You just changed to UNHIDE")
        Columns(14).Hidden = False
        Columns(15).Hidden = False
    End If
  End If
End Sub