Скрыть строки на основе выбора - PullRequest
1 голос
/ 24 апреля 2020

У меня есть несколько вариантов, которые можно сделать в ячейках (C41: C59) с помощью раскрывающегося списка, значение раскрывающегося списка также отображается в ячейках (E41: E59). Для каждого выбора я хочу, чтобы разные строки отображались или скрывались. Скрыть, если раскрывающийся список Н / Д, иначе покажите строки. Проблема, которую я не могу обойти, состоит в том, что у каждого выбора есть различные строки и различное количество строк. Поэтому я попытался создать код для каждого варианта и изменить его только при изменении ячейки в столбце E. Это то, что у меня есть, но я ничего не делаю.

If Not Application.Intersect(Target, Range("E41")) Is Nothing Then
        If Range("E41") = "N/A" Then
            [67:73].EntireRow.Hidden = True
        Else
            [67:73].EntireRow.Hidden = False
        End If
    End If

1 Ответ

1 голос
/ 24 апреля 2020

Код ниже является процедурой события. Он запускается при изменении ячейки на листе, в кодовом листе которого находится процедура. (Расположение кода в этом конкретном модуле имеет первостепенное значение.) Если была изменена одна ячейка - игнорируя множественные одновременные изменения, например, которые могли быть вызваны действием копирования / вставки - код проверит, была ли измененная ячейка в диапазонах C41: C59 или E41: E59. Если это так, он будет скрывать или отображать строки в одном листе в зависимости от того, является ли значение ячейки «N / A» после изменения.

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 010

    Dim TriggerRange As Range
    Dim Rng As Range

    ' ignore simultaneous changes of many cells
    If Target.Cells.CountLarge > 1 Then Exit Sub

    Set TriggerRange = Application.Union(Range("C41:C59"), Range("E41:E59"))
    If Not Application.Intersect(TriggerRange, Target) Is Nothing Then
        Select Case Target.Row
            Case 41, 46, 59
                Set Rng = Range("67:73")
            Case 50 To 59
                Set Rng = Range(Rows(67), Rows(73))
            Case Else
                Set Rng = Range(Rows(67), Rows(73))
        End Select
        Rng.Rows.Hidden = (Target.Value = "N/A")
    End If
End Sub

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

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