3

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

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

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

 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

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

2 ответа2

2

Вы должны убедиться, что используемый 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 , поскольку в любом случае вы используете только одну строку?

0

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

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

Цикл по рабочим листам 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .