Hide/Unhide 根据列表值的一些行

Hide/Unhide some rows according a list value

我正在尝试根据列表值 hide/unhide 一些行,如果它们被隐藏,则将单元格设置为 0。如果我 select 1 但它不会'如果我 select 任何其他值,请不要取消隐藏它们。我可用的值是 1 到 5。

Private Sub Worksheet_Change(ByVal Target As Range)
    'Updated by Extendoffice 20180822
    If Target.Address = "$F" Then
        If Target.Value <= 2 Then
            Application.Rows("22:25").Select
            Application.Selection.EntireRow.Hidden = True
            Range("F22").Value = "0"
            Range("F23").Value = "0"
            Range("F24").Value = "0"
            Range("F25").Value = "0"
        ElseIf Target.Value <= 3 Then
            Application.Rows("23:25").Select
            Application.Selection.EntireRow.Hidden = True
            Range("F23").Value = "0"
            Range("F24").Value = "0"
            Range("F25").Value = "0"
        ElseIf Target.Value <= 4 Then
            Application.Rows("24:25").Select
            Application.Selection.EntireRow.Hidden = True
            Range("F24").Value = "0"
            Range("F25").Value = "0"
        ElseIf Target.Value <= 5 Then
            Application.Rows("25:25").Select
            Application.Selection.EntireRow.Hidden = True
            Range("F25").Value = "0"
        ElseIf Target.Value <= 6 Then
            Application.Rows("22:25").Select
            Application.Selection.EntireRow.Hidden = False
        End If
    End If
End Sub

您的代码只说要在特定条件下隐藏行,并没有说要在其他条件下显示它们,除非单元格 = 6,但逻辑永远不会那么远,因为 1-5 的任何值都会满足前5个条件,然后退出if语句。

如果你想来回翻转 hidden 布尔值(true/false 值),你可以将布尔变量调暗为非本身,然后将隐藏的 属性 设置为该值:

Dim TorF as Boolean
TorF = Application.Selection.EntireRow.Hidden 'to set the boolean's value

Application.Selection.EntireRow.Hidden = Not TorF 'to flip it

通过选择 1,您将命中第一个 IF 语句并隐藏 22:25。通过尝试更改值,不会执行任何操作,因为 "ElseIf Target.Value <= 6 Then" 永远不会被执行,因为每个值都 <= 6。当事件被触发时,您需要 "reset" 您的值 -> 添加此在 If Thens 之前到 Sub 的顶部...

If Target.Address = "$F" Then
        Application.Rows("22:25").Select
        Application.Selection.EntireRow.Hidden = False
        Range("F22").Value = "[whatever default value should be]"
        Range("F23").Value = "[whatever default value should be]"
        Range("F24").Value = "[whatever default value should be]"
        Range("F25").Value = "[whatever default value should be]"