使用Excel 2010,我正在编辑一个现有的不受保护的工作簿,并已在EntireColumn.Hidden
事件中的命令中创建了EntireRow.Hidden
和Worksheet_Change()
,以在更改数据验证单元格时触发,但它们不起作用。
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
时,它说无法插入对象,即使是全新的空白的书。这可能是一个相关的问题吗? 最佳答案
我想您在单元格C3中有一个下拉列表,其中有两个项目,即“可见”和“不可见”。
当您将范围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
关于excel - EntireColumn.Hideden在Worksheet_Change()中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30725920/