Notifications
Clear all

Rodar uma macro apenas em uma das Planilhas da Pasta.

9 Posts
2 Usuários
0 Reactions
1,430 Visualizações
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

Bom dia!

Amigos, consegui aqui neste fórum um código que colori o fundo da linha que eu selecionar, muito bom.

Mas, não sei como colocar ele apenas em uma das planilhas. Eu gostaria que ele rodasse apenas na planilha "Baixar", de uma pasta excel que tem varias outras abas.

O código que esta rodando em todas é o seguinte:

Dim LinhaSelecAnterior As Range
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

         Rows(ActiveCell.Row).Interior.ColorIndex = 36

          If Not LinhaSelecAnterior Is Nothing Then
            If ActiveCell.Row <> LinhaSelecAnterior.Row Then

               Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0
               
             End If
           End If
       
           Set LinhaSelecAnterior = ActiveCell

    End Sub

Alguém poderia me ensinar, caso isso seja uma linha de código que esta faltando, ou como colocar ela dentro do módulo e tudo mais?
Obs.: Nesta planilha eu já tenho outras macros, no Módulo1. (não sei se influencia)


Desde já, obrigado!

 
Postado : 02/10/2013 8:36 am
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

AH, se for possível eu gostaria que a macro colorisse a célula apenas da linha 13 para baixo, ou seja, se eu clicar em qualquer linha antes da 12, a cor de fundo da linha não deve alterar.

 
Postado : 02/10/2013 8:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Um código/rotina no modulo Workbook (esta pasta de trabalho), e vinculado a "Sheet" fica "disponivel" para todas as planilhas do arquivo.
Para que seja exclusivo de uma planilha, o código deve estar no modulo da respectiva planilha em seu respectivo evento.
Para "funcionar" somente em uma faixa, essa faixa deve ser especificada:
No modulo da sua planilha ("Baixar"), acrescente (o codigo anterior deve ser deletado)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > 12 Then
    Rows(ActiveCell.Row).Interior.ColorIndex = 36
End If

If Not LinhaSelecAnterior Is Nothing Then
    If ActiveCell.Row <> LinhaSelecAnterior.Row Then

        Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0
                   
    End If
End If
           
    Set LinhaSelecAnterior = ActiveCell

End Sub
 
Postado : 02/10/2013 9:36 am
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

Primeiramente obrigado, mas
Reinaldo, por favor, poderia verificar pra mim, quando eu clico em uma célula ele pinta o fundo, mas da um: "Erro em tempo de execução '424': O objeto é obrigatório."
Ele também não "despinta" quando seleciono outra linha.

 
Postado : 03/10/2013 3:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Curioso, não lembrava deste Tópico e postei algo similar hoje no Info - VBA
(http://info.abril.com.br/forum/viewtopic.php?f=149&t=49113)

O usuario lá reportou o mesmo "erro", por faltar uma linha inicial (colocada no inicio do modulo, fora de um procedimento) com a declaração de uma variavel

--> Dim LinhaSelecAnterior As Range
Acrescente em sua rotina que deverá funcionar OK
A rotina lá é para "acontecer" em uma range especifica (vide abaixo)

    Dim LinhaSelecAnterior As Range
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    'Aplica cor em c ate t se celula entre B7 e B13
    If Not Intersect(Target, Range("B7:B13")) Is Nothing Then
            Range(Cells(ActiveCell.Row, 3), Cells(ActiveCell.Row, 20)).Interior.ColorIndex = 46
        End If
        'Remove a cor de fundo quando a linha perde a seleção
            If Not LinhaSelecAnterior Is Nothing Then
                If ActiveCell.Row <> LinhaSelecAnterior.Row Then
                    Range(Cells(LinhaSelecAnterior.Row, 3), Cells(LinhaSelecAnterior.Row, 20)).Interior.ColorIndex = 0
                End If
            End If
        'Inicializa a variavel informando a seleção atual
        Set LinhaSelecAnterior = ActiveCell

        End Sub
 
Postado : 03/10/2013 8:40 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia Pedro

Para a boa organização do fórum estou movendo teu tópico para o sub fórum VBA & Macro.

Att.

 
Postado : 04/10/2013 4:40 am
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

BOM DIA A TODOS!

OK, Patropi, desculpe-me por postar no lugar errado.

Reinaldo, eu consegui adaptar este segundo código que você postou desta forma:

        Dim LinhaSelecAnterior As Range
        Private Sub Worksheet_SelectionChange(ByVal Target As Range)

        'Aplica cor em 'C' ate 'J' se célula clicada entre B13 e J800
        If Not Intersect(Target, Range("B13:J800")) Is Nothing Then
                Range(Cells(ActiveCell.Row, 2), Cells(ActiveCell.Row, 10)).Interior.ColorIndex = 36
            End If
            'Remove a cor de fundo quando a linha perde a seleção
                If Not LinhaSelecAnterior Is Nothing Then
                    If ActiveCell.Row <> LinhaSelecAnterior.Row Then
                        Range(Cells(LinhaSelecAnterior.Row, 2), Cells(LinhaSelecAnterior.Row, 10)).Interior.ColorIndex = 0
                    End If
                End If
            'Inicializa a variavel informando a seleção atual
            Set LinhaSelecAnterior = ActiveCell

            End Sub

Mas se não for abuso, gostaria de mais uma ajudinha.

Ele não destaca a cor 36 para as linhas menores do que 13, mas se uma dessas linha for "a linha selecionada anteriormente" ele pinta de branco...
Como eu faço a "range" para pintar de branco só as linhas maiores que 12?

Obrigado!

 
Postado : 04/10/2013 5:24 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se e assim:

Dim LinhaSelecAnterior As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cl
'Aplica cor em 'C' ate 'J' se célula clicada entre B13 e J800
If Not Intersect(Target, Range("B13:J800")) Is Nothing Then
    Range(Cells(ActiveCell.Row, 2), Cells(ActiveCell.Row, 10)).Interior.ColorIndex = 36
End If
'Remove a cor de fundo quando a linha perde a seleção
If Not LinhaSelecAnterior Is Nothing Then
    If ActiveCell.Row <> LinhaSelecAnterior.Row And Not Intersect(LinhaSelecAnterior, Range("B13:J800")) Is Nothing Then
        Range(Cells(LinhaSelecAnterior.Row, 2), Cells(LinhaSelecAnterior.Row, 10)).Interior.ColorIndex = 0
    End If
End If
'Inicializa a variavel informando a seleção atual
Set LinhaSelecAnterior = ActiveCell
    cl = ActiveCell.Interior.Color
End Sub
 
Postado : 04/10/2013 6:51 am
(@pedro)
Posts: 362
Reputable Member
Topic starter
 

Opa, ficou perfeito!

Muito obrigado Reinaldo!

 
Postado : 04/10/2013 12:54 pm