Destacar a linha selecionada alterando a cor de fundo
Esse código destaca toda a linha onde há a célula ativa no momento, alterando sua cor de fundo. Toda vez que uma célula receber o foco, a linha toda ficará realçada e ao sair dela, voltará ao normal.
Um detalhe, é que, foi criada uma condição para excluir as linhas cuja formatação de fundo não poderia ser alterada, como por exemplo, uma linha que contenha um título e já esteja com um padrão de fundo definido de forma diferenciada.
Vamos ao código.
No módulo de classe da Plan1, declare, na seção Geral do mesmo, a variável LinhaSelecAnterior, pois ela ficará acessível a toda a Plan1.
Digite o seguinte código:
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 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 |
Salve e Encerre o ambiente do VBA
Pronto. Agora quando você selecionar qualquer célula da Plan1, a linha inteira será destacada das demais.
Um abraço a todos.
Termos aprendidos neste artigo:
| Range | Retorna um objeto Range representando uma única célula ou um intervalo de células. |
| ActiveCell | Retorna um objeto Range representando a célula ativa da janela ativa (a janela visível) ou da janela especificada. Se a janela não estiver exibindo uma planilha, essa propriedade falhará. Somente leitura. |
| Row | Retorna o número da primeira linha da primeira área do intervalo. Long somente leitura. |
| Rows | Para um objeto Application, retorna um objeto Range representando todas as linhas da planilha ativa. Se o documento ativo não for uma planilha, a propriedade Rows falhará. Para um objeto Range, retorna um objeto Range representando as linhas no intervalo especificado. Para um objeto Worksheet, retorna um objeto Range representando todas as linhas da planilha especificada. Objeto Range somente leitura. |
| Interior | Retorna um objeto Interior representando o interior do objeto especificado. |
| ColorIndex | Retorna ou define a cor interna. A cor é especificada como um valor de índice na paleta de cores atual. |
| Worksheet_SelectionChange | O Evento SelectionChange ocorre quando a seleção é alterada em uma planilha. |




17 Comentários
Olá amigo (a),
a macro acima não funcionou, copiei e colei mas nada aconteceu.
Preciso de um comando um pouco mais simples: após digitas um valor em uma célula e perder foco, a outra célula é atualizada automaticamente (ex. digito “SP” na célula A1 e aparece “São Paulo” na célula A2. Você poderia me ajudar?
Grato, Sebastião Martins
Reply
exceldoseujeito Reply:
abril 26th, 2009 at 12:53
Crie uma lista com os Estados e suas siglas em uma outra planilha, Plan2, por exemplo. Com isso, você poderá deixá-la oculta porque só interessará ao funcionamento da fórmula, ninguém mais precisa visualizá-la, Ok.
Crie uma tabelinha como esta:
Abreviação Estado Capital
AC Acre Rio Branco
AL Alagoas Maceió
AM Amazonas Manaus
AP Amapá Macapá
BA Bahia Salvador
CE Ceará Fortaleza
DF Distrito Federal Brasília
ES Espírito Santo Vitória
GO Goiás Goiânia
MA Maranhão São Luís
MG Minas Gerais Belo Horizonte
MS Mato Grosso do Sul Campo Grande
MT Mato Grosso Cuiabá
PA Pará Belém
PB Paraíba João Pessoa
PE Pernambuco Recife
PI Piauí Teresina
PR Paraná Curitiba
RJ Rio de Janeiro Rio de Janeiro
RN Rio Grande do Norte Natal
RO Rondônia Porto Velho
RR Roraima Boa Vista
RS Rio Grande do Sul Porto Alegre
SC Santa Catarina Florianópolis
SE Sergipe Aracaju
SP São Paulo São Paulo
TO Tocantins Palmas
Na célula A2, digite a fórmula:
=ÍNDICE(Plan2!A1:C28;CORRESP(B2;Plan2!A1:A28;0);2)
Pronto. Vou postar este exemplo no blog, ok.
Qualquer dúvida, visite-nos.
Um abraço.
Reply
Comentário feito em abril 21st, 2009 às 0:51
Olá, a macro comigo tamebm nao funcionou, elá me da o seguinte erro:O obejeto é obrigatorio e me aponta para linha : “If Not LinhaSelecAnterior Is Nothing Then” . Voce poderia me ajudar ? Desde já agradeço.
Reply
Comentário feito em novembro 5th, 2009 às 16:44
Cara colaboradores esse codigo é muito bom pra mim que trabalho bastante com o excel só que
se eu tive uma linha com cor de fundo esse codigo tira porque as minhas paln. são marcadas com fundo
com resolver isso.
grato,
Fjss
Reply
Reinaldo Coral Reply:
novembro 29th, 2009 at 13:56
Você deve readaptar o código como descrito abaixo. Não otimizei ele pois o tempo está muito corrido… mas a lógica está toda aí.
Abração.
Option ExplicitPublic INT_BG_CEL_SELECIONADA As Integer
Public wsSelecaoEvidencia As Worksheet
Public LinhaSelecAnterior As Range
Public iCorAnterior As Integer
Sub LimparSelecao()
On Error GoTo Erro
'Remove a cor de fundo quando a linha perde a seleção
If Not LinhaSelecAnterior Is Nothing Then
LinhaSelecAnterior.Interior.ColorIndex = iCorAnterior
Set wsSelecaoEvidencia = Nothing
End If
Exit Sub
Erro:
MsgBox Err.Description
Exit Sub
End Sub
Private Sub Worksheet_Activate()
On Error GoTo Erro
Call LimparSelecao
Exit Sub
Erro:
MsgBox Err.Description
Exit Sub
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Erro
INT_BG_CEL_SELECIONADA = 44
'Remove a cor de fundo quando a linha perde a seleção
If Not LinhaSelecAnterior Is Nothing Then
LinhaSelecAnterior.Interior.ColorIndex = iCorAnterior
End If
If Target.Cells.Count = 1 Then
Select Case Target.Column
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 'A até J
If Target.Row >= 10 And Target.Row = 25 And Target.Row = 15 And Target.Row <= 25 Then
'Remove a cor de fundo quando a linha perde a seleção
If Not LinhaSelecAnterior Is Nothing Then
LinhaSelecAnterior.Interior.ColorIndex = iCorAnterior
End If
Set LinhaSelecAnterior = Target
'Altera a cor de fundo da linha selecionada
iCorAnterior = Target.Interior.ColorIndex
Target.Interior.ColorIndex = INT_BG_CEL_SELECIONADA
Set wsSelecaoEvidencia = ActiveSheet
End If
End Select
End If
Exit Sub
Erro:
MsgBox Err.Description
Exit Sub
End Sub
Reply
Comentário feito em novembro 28th, 2009 às 16:03
Adorei este código, só que quando saio de uma célula selecionada que estava colorida, ela perde a cor. Gostaria de saber se tem como fazer algum ajuste neste código para não mudar a cor anterior.
Reply
Reinaldo Coral Reply:
novembro 29th, 2009 at 13:57
Olá…. respondido no comentário anterior (mesma dúvida do Fernando)
Reply
Comentário feito em novembro 29th, 2009 às 12:41
Olá Reinaldo, gostei muito do codigo que vc postou e como eu não sou expert no assunto, gostaria de saber como faço para deixar a linha preenchida somente até a coluna D?
Valeu cara, Obrigado!!!
Eder Cunha
Reply
Reinaldo Coral Reply:
janeiro 29th, 2010 at 22:05
Oi Eder,
Podes substituir os comandos
Rows(ActiveCell.Row).Interior.ColorIndex = [número da cor]
Por
Range(“A” & ActiveCell.Row & “:D” & ActiveCell.Row).Interior.ColorIndex = [número da cor]
No seu caso, por exemplo, da coluna A até a coluna D:
Range(“A” & ActiveCell.Row & “:D” & ActiveCell.Row).Interior.ColorIndex = 15
Um abraço.
Reply
Eder Cunha Reply:
fevereiro 1st, 2010 at 6:34
Muito Obrigado pela atenção, fiz o que vc mandou e está dando erro de compilação e os dois pontos antes da
letra D ( “:D” ) fica selecionado, como se não fosse para ele estar ali, o que será que eu fiz errado?
Obrigado Reinaldo!!!
No aguardo!!!
Eder Cunha
Reply
Reinaldo Coral Reply:
fevereiro 1st, 2010 at 9:21
Acredito que você tenha copiado o código (Ctrl+C) e colado(Ctrl+V) no VBA.
Isso carrega a codificação web para o ambiente de texto puro. A codificação das aspas (“”) não é transformada de maneira correta.
Tente redigitar, manualmente, todas as aspas das linhas copiadas. Deve corrigir isto.
Abraço
Eder Cunha Reply:
fevereiro 1st, 2010 at 9:51
Legal, agora funcionou, eu tinha copiado e colado, não deu certo, dai eu digitei tudo o que vc escreveu e
funcionou, vai entender né??
Valeu mesmo!!!
Eu sei que vc está com o tempo muito curto, mas se vc puder me dar uma dica, eu peguei o comando que vc
enviou para o Fernando (para que a cor de fundo não fosse substituida) e mesclei junto com o programa
inicial mas não funcionou, se vc não conseguir responder por falta de tempo não tem problema não pq isso é´
só um detalhe.
Desde já agradeço!!
Eder Cunha
Reinaldo Coral Reply:
fevereiro 1st, 2010 at 10:45
O ideal é que você substitua por completo o código anterior, a princípio, por você não conhecer muito o VBA.
Acredito que não tenha funcionado por uma linha de comando que você deve substituir deste código:
Onde está escrito:
If Target.Row >= 10 And Target.Row = 25 And Target.Row = 15 And Target.Row <= 25 Then
Substitua por:
If Target.Row >= 10 And Target.Row <= 25 Then
Explicando um pouco:
Na linha de comando Case 1,2,3,4,… você pode definir as colunas que serão afetadas pelo código.
Na linha de comando If Target.Row >= 10 And Target.Row <= 25 Then você pode definir as linhas que serão afetadas pelo código.
Espero ter ajudado.
Abraço
Comentário feito em janeiro 29th, 2010 às 10:23
Puts.. se ajudou?
Ajudou e muito!!
Valeu mesmo, deu tudo certo, Muitissimo Obrigado!!!
Eder Cunha
Reply
Comentário feito em fevereiro 1st, 2010 às 11:39
Reinaldo, só mais uma pergunta, eu sei que isso pra vc deve ser a coisa mais simples do mundo, mas como eu estou começando a “fussar” no VB agora, este codigo que vc escreveu para manter a cor da linha após mudar de celula ativa, ela funcionou com a dica que vc passou..
“Substitua por:
If Target.Row >= 10 And Target.Row <= 25 Then"
A pergunta é:
Somente a celula ativa muda a cor, como faço para mudar as celulas da coluna A até a D?
Prometo que não te importuno mais!!!! rsrsrs
Muito obrigado!!
Eder Cunha
Reply
Reinaldo Coral Reply:
fevereiro 12th, 2010 at 13:18
Substituir
Target.Interior.ColorIndex = INT_BG_CEL_SELECIONADA
Por:
Range(“A” & Target.Row & “:D” & Target.Row).Interior.ColorIndex = INT_BG_CEL_SELECIONADA
Abraço
Reply
Comentário feito em fevereiro 2nd, 2010 às 9:33
Reinaldo, através da dica que vc passou acima..
Substituir
Target.Interior.ColorIndex = INT_BG_CEL_SELECIONADA
Por:
Range(“A” & Target.Row & “:D” & Target.Row).Interior.ColorIndex = INT_BG_CEL_SELECIONADA
A linha mudou de cor da coluna A até a D, perfeito!!
Dai surgiu um problema, quando a linha ficava perdia a seleção, as colunas de B até C ficavam coloridas, dai eu substitui o comando…
Set LinhaSelecAnterior = Target
por
Set LinhaSelecAnterior = Range(“A” & Target.Row & “:D” & Target.Row)
e funcionou perfeitamente!!!
É isso que acontece quando a dica é bem especificada e simplificada!!
Valeu mesmo!!!
Obrigado!!
Eder Cunha
Reply
Comentário feito em fevereiro 18th, 2010 às 8:53
Deixar um comentário