首页 > 解决方案 > 取消/隐藏行基于两个不同单元格的单元格更改独立取消/隐藏工作表的不同部分

问题描述

我有一个非常简单的代码,可以在更改 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

标签: excelvba

解决方案


您的要求并不完全清楚,因为您没有指定以哪种方式影响哪些行。但是,您可以尝试修改下面的代码以按照您想要的方式工作。

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 个“案例”。如果单击的单元格( Target )为 [S1],则案例 #1 将生效,如果是 [S55],则案例 #1 将生效。如果这些都不适用,那么什么都不会做(因为用户点击了别处)。

当然 [S55] 是您已经知道的单元格,但 [S1] 是一个新单元格。您可以将单元格地址更改为您要使用的地址。

该过程设置了 2 个范围。一个叫HideRows. 这是一组您想要隐藏的行。另一个被调用ViewRows并包含您要使其可见的行。大多数情况下,这些范围都没有设置,代码也无法对它们做任何事情。在您现有的代码中,第二个功能未被使用。

现在,仅仅因为您单击了 [S55] 并不意味着这两个范围会发生任何事情。代码首先查看您输入的值。只有当您输入 0(零)时,它才会采取行动。这是检查这个的代码If .Value = 0 Then:我为 [S1] 设置了相同的条件,但很容易更改。

现在,如果 [S55] 已更改并且现在的值为 0,则两个范围HideRowsViewRows都将被设置。Rows("60:298") 将被隐藏,Rows("3:5") 将可见。当然,如果后者在指令之前是可见的,将没有效果。当然,范围也很容易改变。

您没有提到当 [S1] 设置为 0 时要隐藏哪些行。上面的代码说Set HideRows = Rows("3:5")并且很容易更改。下一行说Set ViewRows = Rows("60:298")。这也很容易改变。或者您可以删除该行。如果您这样做,范围ViewRows将不会设置为任何内容,并且不会显示以前未显示的任何内容。

设置代码时,它是一个切换,隐藏和显示 [S1] 和 [S55] 的相同行。这很可爱,但可能没用。重点是展示如何做到这一点。例如,您可以让代码对 0 或 1 的条目做出反应 - 仅在输入 0 时隐藏某些内容,仅在条目为 1 时显示某些内容。

添加更多响应更改事件的单元格并让不同的事情发生以响应那里的更改也很容易。这一切都可以用目前的代码结构来完成。因此,如果您学习如何掌握它,那么花费时间是值得的。


推荐阅读