使用VBA隐藏单元格

时间:2016-03-23 22:48:05

标签: excel excel-vba hide vba

我使用以下代码隐藏Excel VBA中所需的单元格。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cell   As Range
    Set Cell = Range("$F$26")
    If Not Application.Intersect(Cell, Range(Target.Address)) Is Nothing Then
        If Range("F26").Value < 2 Then
            Rows("39:61").EntireRow.Hidden = True
            ElseIf Range("F26").Value < 3 Then
            Rows("47:61").EntireRow.Hidden = True
            ElseIf Range("F26").Value < 4 Then
            Rows("55:61").EntireRow.Hidden = True
            Else: Rows("39:61").EntireRow.Hidden = False
        End If
    End If
End Sub

当我按降序排列值时(例如4,3,2,1),它可以正常工作。但是在放1之后,如果我打算切换到2或3(但不是4)。然后它没有显示第二和第三组面板中的细胞。但如果我放4,那么它再次显示所有小组。我附上了截图。

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

您必须从头开始使用Range(“$ F $ 26”)中的新值重新评估后续调用;例如让一切都可见,然后决定隐藏什么。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Range("F26"), Range(Target.Address)) Is Nothing Then
        Application.ScreenUpdating = False
        Rows("39:61").EntireRow.Hidden = False
        Select Case Range("F26").Value
            Case Is < 2
                Rows("39:61").EntireRow.Hidden = True
            Case 2
                Rows("47:61").EntireRow.Hidden = True
            Case 3
                Rows("55:61").EntireRow.Hidden = True
        End Select
        Application.ScreenUpdating = True
    End If
End Sub

我已将条件评估更改为Select Case statement,并将Cell变量删除为不必要的。

当Range(“F26”)空白时,我找不到任何意外情况。目前,这属于< 2条件。