2016-09-21 76 views
0

我有一个循环逻辑的宏,我从另一个stackoverflow/ms支持页面复制,但它似乎并没有工作。VBA问题 - 通过每个工作表循环

我对VBA没有经验,所以我无法弄清楚为什么'循环遍历所有工作表'部分不起作用。

任何人都可以看看我的代码,并告诉我它如何修复?

Sub HideEmptyRows() 
    Dim rngName As Range 
    Dim cell As Range 
    Dim ws_count As Integer 
    Dim i As Integer 

    ws_count = ActiveWorkbook.Worksheets.Count 
    For i = 1 To ws_count 
     Application.ScreenUpdating = False 
     For Each Current In Worksheets 
      ' This code hides the adv and group merch rows 
      For Each cell In Range("eq29", "eq51") 
       If cell.Value = 0 Then 
        cell.EntireRow.Hidden = True 
        Else 
        cell.EntireRow.Hidden = False 
       End If 

      Next cell 

      ' This code hides the consulting rows 
      For Each cell In Range("eq61", "eq172") 
       If cell.Value = 0 Then 
        cell.EntireRow.Hidden = True 
        Else 
        cell.EntireRow.Hidden = False 
       End If 
      Next cell 
     Next 

    Application.ScreenUpdating = True 
    Next i 
End Sub 
+0

我想以后在投掷随着当前每个电流线的想法,然后在每个有关的范围之前一段时间每个单元格行和最后一个Next单元格后的End With。 除非有令人信服的理由(即测试不同或将会),为什么不合并范围/单元循环? –

回答

1

按我的评论:

你还没有指定任何范围内的对象到父表所以它只能在活动工作表。仅仅因为你正在循环,不会自动将表单分配给这些范围。您需要将Current.放在所有范围对象的前面。

外环是没有必要的。

我重做就躲的逻辑来节省一些打字:

Sub HideEmptyRows() 

    Dim rngName As Range 
    Dim cell As Range 
    Dim current As Worksheet 


    Application.ScreenUpdating = False 
    For Each current In Worksheets 
     ' This code hides the adv and group merch rows 
     For Each cell In current.Range("EQ29:EQ51") 
      cell.EntireRow.Hidden = cell.Value = 0 
     Next cell 

     ' This code hides the consulting rows 
     For Each cell In current.Range("EQ61:EQ172") 
      cell.EntireRow.Hidden = cell.Value = 0 
     Next cell 
    Next 

    Application.ScreenUpdating = True 

End Sub