Un / Hide Rows основаны на смене ячеек двух разных ячеек - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть очень простой код, который очень хорошо работает для Un / Hide строк при изменении значения ячейки S55. НО мне нужен код, но он работает одинаково для двух частей моего листа независимо.

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

вот код.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim HideRows As Range, ViewRows As Range

If Intersect([s55], Target) Is Nothing Then Exit Sub

Select Case [s55].Value
    Case Is = 0
        Set HideRows = Rows("60:298")
        Set ViewRows = Nothing

End Select
On Error Resume Next
HideRows.Hidden = True
ViewRows.Hidden = False
End Sub

1 Ответ

0 голосов
/ 11 апреля 2020

Ваше требование не совсем ясно, потому что вы не указываете, какие строки будут затронуты каким образом. Однако вы можете попытаться изменить приведенный ниже код, чтобы он работал так, как вы хотите.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim HideRows As Range, ViewRows As Range

    With Target
        Select Case .Address
            Case [S55].Address
                If .Value = 0 Then
                    Set HideRows = Rows("60:298")
                    Set ViewRows = Rows("3:5")
                End If
            Case [S1].Address
                If .Value = 0 Then
                    Set HideRows = Rows("3:5")
                    Set ViewRows = Rows("60:298")
                End If
        End Select

        On Error Resume Next
        HideRows.Hidden = True
        ViewRows.Hidden = False
    End With
End Sub

Сначала выполните оператор Select. Имеет 2 "дела". Случай № 1 вступит в силу, если ячейка, по которой щелкнули ( Target ), равна [S1], а вторая - если [S55]. Если ни один из них не применим, то ничего не будет сделано (потому что пользователь щелкнул в другом месте).

Конечно, [S55] является ячейкой, которую вы уже знаете, но [S1] является новой. Вы можете изменить адрес ячейки на тот, который вы хотите использовать.

Процедура устанавливает 2 диапазона. Один называется HideRows. Это группа строк, которую вы хотите скрыть. Другой называется ViewRows и состоит из строк, которые вы хотите сделать видимыми. В большинстве случаев ни один из этих диапазонов не установлен, и код не может ничего с ними сделать. В вашем существующем коде вторая возможность не используется.

Теперь, только то, что вы нажали [S55], не означает, что что-то случится с этими двумя диапазонами. Код сначала просматривает введенное вами значение. Это будет действовать, только если вы ввели 0 (ноль). Вот код, который проверяет это: If .Value = 0 Then. Я установил то же условие для [S1], но его легко изменить.

Теперь, если [S55] был изменен и теперь имеет значение 0, будут установлены оба диапазона HideRows и ViewRows. Строки («60: 298») будут скрыты, а строки («3: 5») станут видимыми. Конечно, если последние были видны до того, как инструкция не будет иметь никакого эффекта. Кроме того, конечно, диапазон легко изменить.

Вы не упомянули, какие строки скрывать, когда [S1] установлен в 0. В приведенном выше коде написано Set HideRows = Rows("3:5"), и его легко изменить. Следующая строка говорит Set ViewRows = Rows("60:298"). Это тоже легко изменить. Или вы можете просто удалить строку. Если вы сделаете это, диапазон ViewRows не будет установлен на что-либо, и ничего не будет показано, что не было показано ранее.

Когда код настроен, он переключает, скрывает и показывает те же строки для [S1] и [S55]. Это мило, но, вероятно, не полезно. Дело в том, чтобы показать, как это сделать. Например, вы можете позволить коду реагировать на записи 0 или 1 - скрывать что-либо только при вводе 0 и показывать только при вводе 1.

Также легко добавить больше ячеек, которые реагируют на событие Change и пусть разные вещи происходят в ответ на изменения там. Все это можно сделать с помощью существующей структуры кода. Поэтому, если вы научитесь справляться с этим, время будет хорошо потрачено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...