Скрыть / показать некоторые строки в соответствии со значением списка - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь скрыть / показать некоторые строки в соответствии со значением списка и, если они скрыты, установить ячейку в 0. Код скрывает строки, если я выберу 1, но не будет показывать их, если я выберу любую другуюзначение.Доступны значения от 1 до 5.

Private Sub Worksheet_Change(ByVal Target As Range)
    'Updated by Extendoffice 20180822
    If Target.Address = "$F$16" 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

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Выбрав 1, вы попадаете в первое утверждение IF и прячете 22:25.При попытке изменить значение, ничего не будет сделано, потому что «ElseIf Target.Value <= 6 Тогда» никогда не будет выполнено, потому что каждое значение <= 6. Вам нужно «сбросить» ваши значения при запуске события -> добавьте это в верхнюю часть Sub до If Thens ...

If Target.Address = "$F$16" 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]"
0 голосов
/ 04 октября 2018

Ваш код говорит только о том, чтобы скрыть строки при определенных условиях, он не говорит о том, чтобы показывать их под другими, кроме случаев, когда ячейка = 6, но логика никогда не зашла бы так далеко, потому что любое значение от 1 до 5 соответствовало бысначала 5 условий, а затем выход из оператора if.

Если вы хотите перевернуть логическое значение hidden (значение true / false) назад и вперед, вы можете затемнить булеву переменную как not самой, а затемустановите для скрытого свойства это значение:

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

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