根据选择隐藏行

问题描述 投票:1回答:1

我可以使用下拉菜单在单元格(C41:C59)中做出很多选择,下拉列表的值也可以在单元格(E41:E59)中看到。对于每个选择,我希望显示或隐藏不同的行。如果下拉列表为N / A,则隐藏,否则显示行。我无法解决的问题是,每个选择都有不同的行,并且行数也不同。因此,我尝试为每个选择创建一个代码,并且仅当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
excel vba
1个回答
1
投票

下面的代码是一个事件过程。当在其代码表中找到该过程的工作表上更改单元格时,它将运行。 (代码在该特定模块中的位置至关重要。)如果更改了一个单元格-忽略了多个同时发生的更改(例如可能由复制/粘贴操作引起的更改)-代码将检查修改后的单元格是否在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

在此代码中,总是隐藏或显示相同的行。该代码用于演示如何根据更改的单元格所在的行来指定不同的行范围,并根据您的喜好使用不同的语法。

© www.soinside.com 2019 - 2024. All rights reserved.