Excel VBA:EntireColumn.Hidden在Worksheet_Change()中不起作用

这是我第一篇文章,因为我一直在调整和狩猎几天,我还没有能够find一个决议在这里或其他地方。

使用Excel 2010我正在编辑现有的未​​受保护的工作簿,并在Worksheet_Change()事件中的命令中创buildEntireColumn.HiddenEntireRow.Hidden ,以在数据validation单元更改时触发,但这些行为不起作用。

 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 

事件触发OK,因为我有msgbox es来certificate它,我可以更改单元格值等,但唯一没有发生的是实际隐藏/取消隐藏的列/行。

我已经将我的代码复制到一本全新的书籍中,并且工作正常。 所以我把它复制回原来的书,但作为一个新的,空白表,它仍然工作。 但是它在原始的,可观的表格中仍然不起作用。

但是,当我将其复制到一个简单的macros,它确实按需要工作,隐藏正确的列,但按下button:

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

也就是说,我需要这个基于单个单元格的值自动更新。 我甚至试图从Worksheet_Change()事件中调用这个迷你Sub ,但是这也不起作用。

无可否认,这是非常基本的代码,这就是为什么我不能使它工作的原因! 是否有任何已知的冲突与其他命令/事件,工作表button,图像,合并单元格等,可以防止列/行隐藏?

我不能为我的生活弄清楚为什么行/列不会自动隐藏,当他们手动(右键单击隐藏)或从我的macrosbutton按下。

我甚至尝试使用CheckBox而不是YES/NO数据validation单元来激活代码(因为这可能是可以接受的),但是当我尝试插入一个ActiveX CheckBox它说不能插入对象 ,即使在一个全新的空白书中。 这可能是一个相关的问题?

任何想法都会非常感激,因为我正在把我的头发撕掉!

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

 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