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



在VBA 方面,我仍然是初学者,我正在尝试编写一个代码,如果其单元格值等于零并且用户选择将另一个单元格值设置为正确的措辞,则隐藏行。但是,我编写的代码似乎不起作用;我确定我忘记添加一些东西或缺少一些关键元素,但似乎无法弄清楚它是什么。

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

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

考虑:

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. 您不会测试以查看是否确实存在名为"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

最新更新