Bedingte Formatierung VBA auf alle Arbeitsmappenblätter anwenden

Bedingte Formatierung VBA auf alle Arbeitsmappenblätter anwenden

Ich bin hier ganz neu und erstelle eine bedingte Formatierung, um Zahlen über dem Durchschnitt aller Werte in einer Zeile hervorzuheben.

Ich muss diese Formatierung auf alle Zeilen in allen Blättern der Arbeitsmappe anwenden.

Von dem, was ich gesammelt habe, habe ich Folgendes:

 Sub AllSheets()
         Dim ws As Worksheet
         For Each ws In Worksheets
            Range("A1:S1").Copy
            For Each r In Selection.Rows
            r.PasteSpecial (xlPasteFormats)
            Next r
            Application.CutCopyMode = False
        Next ws
 End Sub

Aber wenn ich das ausführe, wird es nur auf die aktiven ausgewählten Zellen angewendet. Wie kann ich das beheben?

Antwort1

Sie müssen sicherstellen, dass der Range()verwendete Bereich tatsächlich der Bereich im ist ws. Andernfalls wird es nur auf dem Activesheet ausgeführt.

 Dim ws As Worksheet
 For Each ws In Worksheets
    ws.Range("A1:S1").Copy 
    For Each r In Selection.Rows
         r.PasteSpecial (xlPasteFormats)
    Next r
    Application.CutCopyMode = False
Next ws

End Sub

Aber funktioniert das? Es ist etwas "enger", hauptsächlich versuche ichvermeide das Benutzen.Selection

 Dim ws As Worksheet
 For Each ws In Worksheets
    ws.Range("A1:S1").Copy ' Or replace this with actual range, not just `Selection`
    For Each r In ws.Range("A1:S1").Rows
         r.PasteSpecial (xlPasteFormats)
    Next r
Next ws

End Sub

Bearbeiten: ist mir gerade aufgefallen ... Warum überhaupt die For each rSchleife verwenden, wenn Sie sowieso nur eine Zeile verwenden?

Antwort2

Ich muss diese Formatierung auf alle Zeilen in allen Blättern der Arbeitsmappe anwenden.

Tatsächlich braucht es Übung, um zu wissen, wie man die richtige Frage stellt. Sobald Sie das können, eine schnelle Suche:

Durch Arbeitsblätter blättern vba

  Sub WorksheetLoop()

     Dim WS_Count As Integer
     Dim I As Integer

     ' Set WS_Count equal to the number of worksheets in the active
     ' workbook.
     WS_Count = ActiveWorkbook.Worksheets.Count

     ' Begin the loop.
     For I = 1 To WS_Count

        ' Insert your code here.
        ' The following line shows how to reference a sheet within
        ' the loop by displaying the worksheet name in a dialog box.
        MsgBox ActiveWorkbook.Worksheets(I).Name

     Next I

  End Sub

Referenz:https://support.microsoft.com/en-us/help/142126/macro-to-loop-through-all-worksheets-in-a-workbook

verwandte Informationen