2016-09-21 3 views
0

У меня есть макрос с логикой цикла, который я скопировал с другой страницы поддержки stackoverflow/ms, но он, похоже, не работает.VBA issue - цикл через каждый рабочий стол

У меня нет опыта работы с 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

Мне нравится идея бросать в С током после для каждой текущей строки, а затем периода до диапазона в каждом из For Каждая клеточная линия и End With после последней ячейки Next. Если нет веской причины (т. Е. Тесты разные или будут), почему бы вам не объединить диапазоны/ячейки? –

ответ

1

В соответствии с моим комментарием:

Вы не назначен какой-либо из объектов диапазона для родительского листа, так что работает только на активном листе. Просто потому, что вы выполняете цикл, автоматически не присваиваете лист этим диапазонам. Вам нужно будет поставить Current. перед объектами ALL Range.

Внешняя петля не нужна.

Я переделал логику шкурой, чтобы сохранить некоторые набрав:

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