Aplicar formatação condicional VBA a todas as planilhas da pasta de trabalho

Aplicar formatação condicional VBA a todas as planilhas da pasta de trabalho

Sou muito novo nisso, estou fazendo formatação condicional para destacar números acima da média de todos os valores consecutivos.

Preciso aplicar essa formatação a todas as linhas de todas as planilhas da pasta de trabalho.

Pelo que coletei, isso é o que tenho:

 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

Mas quando executo isso, ele se aplica apenas às células ativas selecionadas. Como eu consertaria isso?

Responder1

Você precisa ter certeza de que o Range()que está sendo usado é realmente o intervalo no arquivo ws. Caso contrário, ele será executado apenas no 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

Mas isso funciona? Está um pouco "mais apertado", principalmente estou tentandoEvite usar.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

Editar: acabei de perceber ... Por que usar o For each rloop, já que você está usando apenas uma linha?

Responder2

Preciso aplicar essa formatação a todas as linhas de todas as planilhas da pasta de trabalho.

Na verdade, é preciso prática para “saber fazer a pergunta certa”. Depois de fazer isso, uma pesquisa rápida:

Percorrer planilhas 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

Referência:https://support.microsoft.com/en-us/help/142126/macro-to-loop-through-all-worksheets-in-a-workbook

informação relacionada