Notifications
Clear all

Macro destacada linha selecionada com cor

9 Posts
3 Usuários
0 Reactions
2,266 Visualizações
(@ramalho)
Posts: 18
Eminent Member
Topic starter
 

Senhores,

c)Como criar uma macro chamada destaca linha selecionada com cor (conforme abaixo) sendo que tenho várias abas dentro do arquivo por exemplo tenha a plan1 que utilizo a macro abaixo, mais não consigo utilizar a mesma macro na plan2, ou seja entendi que a macro é somente para a plan1.

Dim LinhaSelecAnterior As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Select Case ActiveCell.Row

Case 1, 2
'Coloque neste 'case' as linhas que não devem ser
'destacadas na seleção
'Exemplo: Linhas de título; Aqui eu defini como as linhas 1 e 2

'Remove cor de fundo da linha selecionada anteriormente
Select Case LinhaSelecAnterior.Row

Case Is <> 1, 2

Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0

End Select

Case Else

'Altera a cor de fundo da linha selecionada
Rows(ActiveCell.Row).Interior.ColorIndex = 15

'Remove a cor de fundo quando a linha perde a seleção
If Not LinhaSelecAnterior Is Nothing Then

'Verifica se a linha atual já estava selecionada
'neste momento, caso seja uma nova linha selecionada
'remove a cor de fundo.
If ActiveCell.Row <> LinhaSelecAnterior.Row Then

Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0

End If

Francisco Ramalho

 
Postado : 12/07/2013 2:49 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Francisco,

Boa Noite!

Você pode utilizar essa mesma macro dentro de cada uma das outras abas (planilhas) do seu arquivo. Cada planilha (aba) tem seu próprio Evento Worksheet_SelectionChange.

Para utilizar esse mesmo código nas outras planilhas, abra o editor do VBA (ALT+F11), copie o código, do lado esquerdo da janela do editor de códigos do VBA (janela chamada Projeto - VBAProject) dê um clique duplo em cada Plan existente (Plan2, Plan3...etc) e cole o códio na janela branca da direita que apareceu. Pronto! Agora é possível utilizar o mesmo código!

 
Postado : 12/07/2013 5:26 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Alem da dica do Wagner, você tambem pode utilizar a rotina no Evento do Workbook, assim não precisará colocar a rotina no e vento de cada aba.

Siga os mesmos procedimentos que o Wagner indicou, só que na janela do VBA ao inves de clicar nas Plan(1) (2) ... de dois clique em "EstaPasta_de_trabalho", Selecione na Janela da Direita no combobox Workbook e depois escolha : SheetSelectionChange, cole sua rotina mas sem a descrição do Evento "Worksheet_SelectionChange", a linha inicial deverá ficar :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Pronto, assim ficara valendo para todas as abas.

[]s

 
Postado : 12/07/2013 6:16 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

É verdade, Mauro. Havia me esquecido desse evento. Muito mais simples e prático.

 
Postado : 12/07/2013 6:27 pm
(@ramalho)
Posts: 18
Eminent Member
Topic starter
 

Wagner,

Estou tendo dificuldades de efetuar a rotina, pode me enviar um passo, talvez um print screen do procedimento, tentei de diversas formas, mas não consegui.

Obrigado

FRANCISCO RAMALHO

 
Postado : 13/07/2013 2:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ramalho, se seguiu os passos que o Wagner citou, não tem o que errar.

Para o caso do Evento no WorkBook
1°) Abrea a Janela do VBA : ALT+F11
2°) Na janela da Esquerda de dois cliques em "EstaPasta_de_trabalho"
3°) Na Janela da Direita cole a rotina abaixo :

Dim LinhaSelecAnterior As Range

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

    Select Case ActiveCell.Row
    
        Case 1, 2
            'Coloque neste 'case' as linhas que não devem ser
            'destacadas na seleção
            'Exemplo: Linhas de título; Aqui eu defini como as linhas 1 e 2
            
            'Remove cor de fundo da linha selecionada anteriormente
            Select Case LinhaSelecAnterior.Row
        
        Case Is <> 1, 2
    
        Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0
    
    End Select

    Case Else

        'Altera a cor de fundo da linha selecionada
        Rows(ActiveCell.Row).Interior.ColorIndex = 15
    
        'Remove a cor de fundo quando a linha perde a seleção
        If Not LinhaSelecAnterior Is Nothing Then
        
            'Verifica se a linha atual já estava selecionada
            'neste momento, caso seja uma nova linha selecionada
            'remove a cor de fundo.
            If ActiveCell.Row <> LinhaSelecAnterior.Row Then
            
                Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0
            
            End If
    
        End If
    
        'Inicializa a variavel informando a seleção atual
        'que será utilizada no inicio do procedimento
        'como sendo a seleção anterior
        Set LinhaSelecAnterior = ActiveCell

    End Select

End Sub

4°) Salve, Feche e Reabra o Arquivo.

Pronto, agora a rotina será executada em qualquer aba.

[]s

 
Postado : 13/07/2013 2:59 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Veja uma outra forma em..
viewtopic.php?f=21&t=8818

Att

 
Postado : 14/07/2013 5:18 am
(@ramalho)
Posts: 18
Eminent Member
Topic starter
 

Ramalho, se seguiu os passos que o Wagner citou, não tem o que errar.

Para o caso do Evento no WorkBook
1°) Abrea a Janela do VBA : ALT+F11
2°) Na janela da Esquerda de dois cliques em "EstaPasta_de_trabalho"
3°) Na Janela da Direita cole a rotina abaixo :

Dim LinhaSelecAnterior As Range

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

    Select Case ActiveCell.Row
    
        Case 1, 2
            'Coloque neste 'case' as linhas que não devem ser
            'destacadas na seleção
            'Exemplo: Linhas de título; Aqui eu defini como as linhas 1 e 2
            
            'Remove cor de fundo da linha selecionada anteriormente
            Select Case LinhaSelecAnterior.Row
        
        Case Is <> 1, 2
    
        Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0
    
    End Select

    Case Else

        'Altera a cor de fundo da linha selecionada
        Rows(ActiveCell.Row).Interior.ColorIndex = 15
    
        'Remove a cor de fundo quando a linha perde a seleção
        If Not LinhaSelecAnterior Is Nothing Then
        
            'Verifica se a linha atual já estava selecionada
            'neste momento, caso seja uma nova linha selecionada
            'remove a cor de fundo.
            If ActiveCell.Row <> LinhaSelecAnterior.Row Then
            
                Rows(LinhaSelecAnterior.Row).Interior.ColorIndex = 0
            
            End If
    
        End If
    
        'Inicializa a variavel informando a seleção atual
        'que será utilizada no inicio do procedimento
        'como sendo a seleção anterior
        Set LinhaSelecAnterior = ActiveCell

    End Select

End Sub

4°) Salve, Feche e Reabra o Arquivo.

Pronto, agora a rotina será executada em qualquer aba.

[]s

Mauro,
Preciso da macro para cada plan individualmente, se utilizar para todas, as mesmas não tem formato padrão, qual é a macro?

Obrigado pela atenção dispensada.

FRANCISCO RAMALHO

 
Postado : 15/07/2013 1:43 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ramalho,

Mauro,
Preciso da macro para cada plan individualmente, se utilizar para todas, as mesmas não tem formato padrão, qual é a macro?

Se quer a macro em cada aba, é só fazer da forma que o Wagner mostrou acima, colocando no Evento de cada aba, não entendi o que quer dizer com "as mesmas não tem formato padrão", e, "qual é a macro ?".

A macro é esta que você disponibilizou.

[]s

 
Postado : 15/07/2013 4:24 pm