Применить условное форматирование VBA ко всем листам рабочей книги

Применить условное форматирование VBA ко всем листам рабочей книги

Я новичок в этом деле. Я создаю условное форматирование, чтобы выделить числа, превышающие среднее значение всех значений в строке.

Мне нужно применить это форматирование ко всем строкам на всех листах книги.

Из того, что я собрал, вот что у меня получилось:

 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

Но когда я запускаю это, оно применяется только к активным выбранным ячейкам. Как мне это исправить?

решение1

Вам нужно убедиться, что Range()используемый диапазон действительно находится в ws. В противном случае он просто запустится на Activesheet.

 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

Но работает ли это? Это немного "жестче", в основном я пытаюсьизбегать использования.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

Редактировать: только что понял... Зачем вообще использовать For each rцикл, если вы в любом случае используете только одну строку?

решение2

Мне нужно применить это форматирование ко всем строкам на всех листах книги.

Действительно, нужна практика, чтобы "знать, как задать правильный вопрос". Как только вы научитесь это делать, быстрый поиск:

Прокрутка рабочих листов 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

Ссылка:https://support.microsoft.com/en-us/help/142126/macro-to-loop-through-all-worksheets-in-a-workbook

Связанный контент