首页 > 解决方案 > 根据选择隐藏行

问题描述

我有一堆可以使用下拉列表在单元格(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

标签: excelvba

解决方案


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

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


推荐阅读