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

3

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

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

Pelo que eu colecionei, é isso que eu 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 eu executo isso, ele só é aplicado às células ativas selecionadas. Como eu consertaria isso?

    
por Trav 16.03.2017 / 14:12

2 respostas

2

Você precisa garantir que o Range() que está sendo usado é, na verdade, o intervalo em ws . Caso contrário, apenas é executado na planilha de atividades.

 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? É um pouco "apertado", principalmente tentando evitar usando .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

Edit: acabou de perceber ... Por que usar o loop For each r , já que você está usando apenas uma linha?

    
por 16.03.2017 / 17:22
0

I need to apply this formatting to all rows in all sheets in the workbook.

Na verdade, é preciso prática para "saber como fazer a pergunta certa". Quando você puder fazer isso, faça uma pesquisa rápida:

Percorra as 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: link

    
por 21.04.2017 / 09:58