Ваше требование не совсем ясно, потому что вы не указываете, какие строки будут затронуты каким образом. Однако вы можете попытаться изменить приведенный ниже код, чтобы он работал так, как вы хотите.
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 и пусть разные вещи происходят в ответ на изменения там. Все это можно сделать с помощью существующей структуры кода. Поэтому, если вы научитесь справляться с этим, время будет хорошо потрачено.