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]"
我正在尝试根据列表值 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]"