
Я новичок в этом деле. Я создаю условное форматирование, чтобы выделить числа, превышающие среднее значение всех значений в строке.
Мне нужно применить это форматирование ко всем строкам на всех листах книги.
Из того, что я собрал, вот что у меня получилось:
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