2016-09-21 6 views
0

別のstackoverflow/msサポートページからコピーしたループロジックを持つマクロがありますが、動作していないようです。VBAの問題 - すべてのワークシートをループします

私はVBAに慣れていないので、「すべてのワークシートをループする」部分が機能していない理由を理解できません。

誰でも私のコードを見て、それを修正する方法を教えてください。私のコメントを1として

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

私はそれぞれにレンジの前に各電流ラインのため、その後の期間の後に現在で投げるのアイデアが好き各セルラインと最後の次のセルの後に終了します。 説得力のある理由がない限り(つまり、テストが異なっているかどうか)、レンジ/セルループを結合しないのはなぜですか? –

答えて

1

それが唯一のアクティブシート上で動作しますので、あなたは親のシートの範囲のオブジェクトのいずれかが割り当てられていません。あなたがループしているからといって、自動的にシートをそれらの範囲に割り当てるわけではありません。 Current.をALL Range Objectsの前に置く必要があります。

外部ループは必要ありませんでした。

私はいくつかのタイピングを節約するために非表示にロジックをやり直し:

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 
関連する問題