
我對此很陌生,我正在進行條件格式設定以突出顯示高於一行中所有值平均值的數字。
我需要將此格式套用到工作簿中所有工作表中的所有行。
根據我收集的信息,我得到的是:
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