VBA根据单元格的值是否为零显示/隐藏行

时间:2018-07-05 10:18:35

标签: excel vba excel-vba show-hide

我有一个Excel工作表,我想根据其他单元格中的值隐藏或取消隐藏某些行。

简而言之:
整个过程应取决于单元格C2D2E2中的值。

如果C2空白,我想隐藏rows 31 to 40,如果不是空白,则需要可见

其他三个单元格相同,始终隐藏/取消隐藏以下10行:

D2 --> rows 41 to 50
E2 --> rows 51 to 60

我尝试了这段代码,但是它不起作用,并且我也没有收到任何错误:

Sub Hide_rows()
    If Range("LS!C2") = 0 Then
        Rows("31:40").EntireRow.Hidden = True
    Else
        If Range("LS!D2") = 0 Then
            Rows("41:50").EntireRow.Hidden = True
        Else
            If Range("LS!E2") = 0 Then
                Rows("51:60").EntireRow.Hidden = True
            Else
                If Range("LS!C2") > 0 Then
                    Rows("31:40").EntireRow.Hidden = False
                Else
                    If Range("LS!D2") > 0 Then
                        Rows("41:50").EntireRow.Hidden = False
                    Else
                        If Range("LS!E2") > 0 Then
                            Rows("51:60").EntireRow.Hidden = False
                        Else

                        End If
                    End If
                End If
            End If
        End If
    End If
End Sub

谢谢!

2 个答案:

答案 0 :(得分:5)

在我看来,您只需要以下几行:

With Sheets("LS")
        .Rows("31:40").EntireRow.Hidden = (.Range("C2") = 0)
        .Rows("41:50").EntireRow.Hidden = (.Range("D2") = 0)
        .Rows("51:60").EntireRow.Hidden = (.Range("E2") = 0)
End With
按照克里斯的观点

编辑-以下内容就足够了:

With Sheets("LS")
        .Rows("31:40").Hidden = (.Range("C2") = 0)
        .Rows("41:50").Hidden = (.Range("D2") = 0)
        .Rows("51:60").Hidden = (.Range("E2") = 0)
End With

答案 1 :(得分:2)

将此Worksheet_Change事件驱动的子过程放在LS工作表的私有代码表中(右clcik名称选项卡,查看代码),而不是公共模块代码表中。

sub worksheet_change(byval Target as range)
    if not intersect(target, range("C2:E2")) is nothing then
        on error goto safe_exit
        application.enableevents = false
        rows("31:40").entirerow.hidden = isempty(cells(2, "C"))
        rows("41:50").entirerow.hidden = isempty(cells(2, "D"))
        rows("51:60").entirerow.hidden = isempty(cells(2, "E"))
    end if
safe_exit:
    application.enableevents = true
end sub

对C2:E2所做的任何更改都将触发此子过程,并且将重新评估这些行的隐藏/未隐藏性质。