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

我已经阅读了一些关于在Excel中隐藏行的post,他们都帮助我隐藏,但我似乎还没有find任何解决scheme,为什么它不会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,将不会自动取消隐藏。 这是一个大问题,因为我打算从所有零值开始,然后在这些值变为1或大于1时取消隐藏行。值得注意的是,D列中的这些值是对同一电子表格中其他位置的引用只是例如= N100),所以即使行被隐藏,我也可以控制这些值。 我不认为公式的使用是一个问题,因为它仍然可以响应HIDE的dynamic变化(当从1变为0时),而不是对UNHIDE。

有什么build议么?

我不确定如何在VBA中显示行,你有什么看起来是正确的显示行。 但是当我不确定如何去做时,我会logging一个macros来做我想做的事情,然后回顾一下excel生成的代码。

感谢所有的帮助。 感谢广告帮助我创build了一个macros,并从该代码我得到了我缺less的行:激活。 现在的代码工作如下:

 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