2016-09-21 1 views
0

Ich habe ein Makro mit einer Schleifenlogik, die ich von einer anderen stackoverflow/ms-Support-Seite abgeschrieben habe, aber es scheint nicht zu funktionieren.VBA-Problem - Schleife durch jedes Arbeitsblatt

Ich habe keine Erfahrung mit VBA, also habe ich Probleme herauszufinden, warum der Teil "Schleife durch alle Arbeitsblätter" nicht funktioniert.

Kann mir bitte jemand meinen Code ansehen und mir sagen, wie er behoben werden kann?

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

Ich mag die Idee von mit Strom nach dem für jede Stromleitung in einem zu werfen und dann einer Zeit vor dem Bereich in jedem der für Jede Zelle Zeilen und Ende mit nach der letzten nächsten Zelle. Wenn es keinen zwingenden Grund gibt (dh die Tests sind anders oder werden), warum kombinieren Sie nicht die Bereiche/Zellschleifen? –

Antwort

1

Per mein Kommentar:

Sie haben keine der Kreisobjekte zu einem übergeordneten Blatt zugeordnet, so dass es nur auf dem aktiven Blatt arbeitet. Nur weil Sie eine Schleife erstellen, wird das Blatt nicht automatisch diesen Bereichen zugewiesen. Sie müssen Current. vor ALL Range Objects setzen.

Die äußere Schleife war nicht notwendig.

redid ich die Logik auf der Haut etwas Tipp zu sparen:

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 
Verwandte Themen