VBA代码:隐藏但不会取消隐藏行

时间:2014-08-30 10:19:20

标签: excel vba excel-vba show-hide

我已经阅读了很多关于在Excel中隐藏行的帖子,他们都帮我隐藏了,但我似乎还没有找到任何解决方案,为什么它不会UNHIDE。

我使用以下代码:

Private Sub Worksheet_Calculate()
Dim LastRow As Long, c As Range
Application.EnableEvents = False
LastRow = Cells(Cells.Rows.Count, "D").End(xlUp).Row
On Error Resume Next
For Each c In Range("D116:D" & LastRow)
   If c.Value = 0 Then
        c.EntireRow.Hidden = True
    ElseIf c.Value > 0 Then
        c.EntireRow.Hidden = False
    End If
Next
On Error GoTo 0
Application.EnableEvents = True
End Sub

如果我从一些1和一些0值开始,那么代码会成功隐藏值为0的行,并且还会继续处于活动状态,从而确保后来我从1更改为0的任何值都会自动隐藏。

但是,最初为0的值一旦更改为1,将不会自动取消UNHIDE。这是一个很大的问题,因为我打算从所有零值开始,然后在这些值变为1或大于1时取消隐藏行。值得注意的是,D列中的这些值是对同一电子表格中其他位置的引用(只是例如= N100),这样即使隐藏行也可以控制值。我不认为使用公式是一个问题,因为它仍然可以响应HIDE的动态变化(当从1变为0时),而不是UNHIDE。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

感谢所有帮助过的人。感谢Ads帮助我创建了一个宏,从那段代码中我得到了我缺少的一行:激活。代码现在用作:

Private Sub Worksheet_Calculate()
Dim LastRow As Long, c As Range
Application.EnableEvents = False
LastRow = Cells(Cells.Rows.Count, "D").End(xlUp).Row
On Error Resume Next
For Each c In Range("D116:D" & LastRow)
   If c.Value = 0 Then
        c.EntireRow.Hidden = True
    ElseIf c.Value > 0 Then
        c.Activate
        c.EntireRow.Hidden = False
    End If
Next
On Error GoTo 0
Application.EnableEvents = True
End Sub

答案 1 :(得分:-2)

我不确定如何在VBA中显示一行,你看起来正确显示一行。但是当我不确定如何做某事时,我会记录一个宏来做我想要实现的事情,然后只查看excel产生的代码。