基于单元格值在Excel中隐藏列
我想隐藏我的Excel工作表(称为“模板帐户”)中的某些列根据在单元格AC5中select一个select列表中的值。
逻辑如下:
1)如果单元格AC5中的选项列表值是“能源和资源”,那么我想要隐藏BJ:BO列。
2)如果单元格AC5中的选项列表值是“国防”,那么我想要隐藏BP:CA列等。
3)否则,如果AC5不包含AC5中的选项列表值,则不要隐藏任何内容
我尝试的代码看起来像这样,但它不起作用。 有人可以给我提供一些input吗?
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim cellvalue As String Dim ws As Worksheet Set ws = Sheet("Template account") If cellvalue Like "*Energy and Resources*" Then Columns("BJ:BO").EntireColumn.Hidden = True Else If cellvalue Like "*Defence*" Then Columns("BP:CA").EntireColumn.Hidden = True Else Exit Sub End If End Sub
要检测单元格值的更改,您必须使用Worksheet_Change()
事件处理程序
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "AC5" Then '<-- check for changed cell to be in AC5 Select Case Target.Value '<-- act correspondingly to changed cell value Case "Energy and Resources" Columns("BJ:BO").EntireColumn.Hidden = True Case "Defence" Columns("BP:CA").EntireColumn.Hidden = True Case "...." ' go on with other cases End Select End If End Sub
如果当“能量和资源”和“防御”都不是改变的拾取单元的值时,要取消隐藏列BJ:BO和BP:CA,则代码在Select Case
块的最后部分略微改变
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "AC5" Then '<-- check for changed cell to be in AC5 Select Case Target.Value '<-- act correspondingly to changed cell value Case "Energy and Resources" Columns("BJ:BO").EntireColumn.Hidden = True Case "Defence" Columns("BP:CA").EntireColumn.Hidden = True Case Else Union(Columns("BJ:BO"), Columns("BP:CA")).EntireColumn.Hidden = False End Select End If End Sub
将您的代码放在Workbook_SheetChange
。 目前您所处的事件只会在您select不同单元格时触发,而不是在单元格中发生实际更改时触发。 另外,@BruceWayne指出,你绝不会将单元格AC5的值传递给你的cellvalue
variables。 代码有一些变化:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name = "Template account" And Target.Address = "$AC:$5" Then Application.EnableEvents = False Dim cellvalue As String cellvalue = Target.Value2 If cellvalue Like "*Energy and Resources*" Then Sh.Columns("BJ:BO").EntireColumn.Hidden = True ElseIf cellvalue Like "*Defence*" Then Sh.Columns("BP:CA").EntireColumn.Hidden = True Else Sh.Columns("BJ:BO").EntireColumn.Hidden = False Sh.Columns("BP:CA").EntireColumn.Hidden = False End If Application.EnableEvents = False End If End Sub
添加了一个检查,以确认更改是在正确的工作表和单元格上。 代码运行时禁用事件,隐藏列不会再次触发事件。 最后启用。 增加了在Else
上再次显示的列。 没有testing过。