Excel VBA:使用循环过滤(隐藏)数组

时间:2018-06-21 12:37:26

标签: excel-vba vba excel

关于VBA,我仍然是一个初学者,我正在尝试编写一个代码,如果其单元格值等于0并且用户选择将另一个单元格值设置为正确的措辞,则该行将隐藏行。但是,我编写的代码似乎无效。我确定我已经忘记添加某些内容,或者丢失了一些关键元素,但似乎无法弄清楚它是什么。

我在下面发布了我的代码。任何帮助将非常感激。

Sub HideEmptyRows()

Application.EnableEvents = False

Worksheets("Filtered Data").Rows("7:600").EntireRow.Hidden = False

If Range("J7") = "Filter" Then

    For Each cell In Range("J10:J503")
        If cell.Value = 0 Then
            cell.EntireRow.Hidden = True
        End If
    Next cell

Application.EnableEvents = True

End Sub

2 个答案:

答案 0 :(得分:0)

考虑:

Sub HideEmptyRows()
    Application.EnableEvents = False
    With Worksheets("Filtered Data")
        .Rows("7:600").EntireRow.Hidden = False

        If .Range("J7") = "Filter" Then
            For Each cell In .Range("J10:J503")
                If cell.Value = 0 Then
                    cell.EntireRow.Hidden = True
                End If
            Next cell
        End If

    End With
    Application.EnableEvents = True
End Sub

注意:

  1. 使用过的With
  2. 逻辑上的小清理

答案 1 :(得分:0)

  1. 您无需测试是否确实存在名为"Filtered Data"的工作表。

  2. 您取消隐藏Worksheets("Filtered Data")中的行,但随后检查值并在碰巧是ActiveSheet的任何工作表中隐藏行。

  3. 您没有声明变量cellOption Explicit是个好朋友;使用它。

  4. 缺少End If

否则,代码会起作用;经过这样的测试:

Option Explicit

Sub HideEmptyRows()

  Dim cell As Range

  Application.EnableEvents = False

  With Worksheets("Filtered Data")
    .Rows("7:600").EntireRow.Hidden = False
    If .Range("J7") = "Filter" Then
      For Each cell In .Range("J10:J503")
        If cell.Value = 0 Then
          cell.EntireRow.Hidden = True
        End If
      Next cell
    End If
  End With

  Application.EnableEvents = True

End Sub