Excel VBA:EntireColumn.Hidden在Worksheet_Change()中不起作用
这是我第一篇文章,因为我一直在调整和狩猎几天,我还没有能够find一个决议在这里或其他地方。
使用Excel 2010我正在编辑现有的未受保护的工作簿,并在Worksheet_Change()
事件中的命令中创buildEntireColumn.Hidden
和EntireRow.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