【问题标题】:Hiding cells by using VBA使用 VBA 隐藏单元格
【发布时间】:2016-07-11 10:52:21
【问题描述】:

我正在使用以下代码在 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,那么它会再次显示所有面板组。我附上了下面的截图。

【问题讨论】:

    标签: excel hide vba


    【解决方案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") 为空白时,我找不到任何意外情况。目前,这属于&lt; 2 条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多