將條件格式 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

相關內容