Notifications
Clear all

Mudar Cor Linha ao Selecionar Célula

5 Posts
2 Usuários
0 Reactions
1,086 Visualizações
 Josy
(@josy)
Posts: 0
New Member
Topic starter
 

Encontei essa macro abaixo em outro tópico.

Dim Linha As Long 'Variavel global
'Função que colore a linha da celula atualmente selecionada
Private Sub Workbook_Activate()
    On Error Resume Next
    Linha = ActiveCell.Row 'Variavel global recebe a o numero da linha atualmente selecionada
    Range(Cells(Linha, 2), Cells(Linha, 7)).Interior.ColorIndex = 6 'Destaca linha
End Sub

'Função para limpar a linha antes de colorir a proxima selecao
Private Sub Workbook_Deactivate()
    On Error Resume Next
    Range(Cells(Linha, 2), Cells(Linha, 7)).Interior.ColorIndex = xlNone 'limpa a cor anterior
End Sub

'Chamada das respectivas funções toda vez que uma nova célula é selecionada
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

   Call Workbook_Deactivate
   Call Workbook_Activate
End Sub

Não compreendi como funciona. Gostaria que alguém me ajudasse. Pode ser que o que preciso seja exatamente isso, só não consegui fazer as alterações. Por isso, postei esse tópico com o mesmo nome de onde retirei a pesquisa.
Preciso que a linha mude ao selecionar a célula, seja por um click ou pelas setas do teclado.

Desde já agradeço a atenção!

Um abraço!

 
Postado : 05/10/2015 9:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Josy,

Tentei resumir um pouco o código

Dim Linha As Long 'Variavel global

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim ColunaInicial   As Integer
Dim ColunaFinal     As Integer
On Error Resume Next

    ColunaInicial = 2
    ColunaFinal = 7

    'limpa a cor anterior
    ThisWorkbook.ActiveSheet.Range(Cells(Linha, ColunaInicial), Cells(Linha, ColunaFinal)).Interior.ColorIndex = xlNone
    'Variavel global recebe a o numero da linha atualmente selecionada
    Linha = ActiveCell.Row
    'Destaca linha atualmente selecionada
    ThisWorkbook.ActiveSheet.Range(Cells(Linha, ColunaInicial), Cells(Linha, ColunaFinal)).Interior.ColorIndex = 6
End Sub

Ele salva o valor do número da linha em uma variável global.
Ao selecionar uma célula em uma nova linha, essa variável já está salva com a anterior, fazendo com que ele limpe a marcação da linha anterior, salve o valor da nova linha e marque novamente.

Exemplo:
Você seleciona a célula A2.
Na variável global "linha" vai ser gravado o valor "2".
Ao selecionar a célula A3, ele ainda vai estar salvo o "2" e vai limpar a marcação. Após limpar, ele vai gravar o novo valor da linha (3) e fazer a marcação na nova linha.

(o código deve ser colocado e "EstaPasta_de_trabalho")

Qualquer coisa da o grito.
Abraço

 
Postado : 05/10/2015 10:28 am
 Josy
(@josy)
Posts: 0
New Member
Topic starter
 

Obrigada, Bernardo!

Sempre vc a me ajudar... :oops: :D ... Muito obrigada por sua paciência.
Mas, rss... Ainda assim, me diz uma coisa... Mesmo que eu tenha várias Plan's nesta pasta de trabalho, como faço pra essa rotina funcionar em uma única Plan :oops: ?

 
Postado : 05/10/2015 10:43 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Josy,

Caso o layout delas sejam o mesmo, você pode determinar o nome delas no código das quais deseja que funcione:

Dim Linha As Long 'Variavel global

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim ColunaInicial   As Integer
Dim ColunaFinal     As Integer
Dim HabilitaSheet   As String
On Error Resume Next

    ColunaInicial = 2
    ColunaFinal = 7
    HabilitaSheet = "Plan1,Plan3" 'Nome das planilhas que deseja que funcione

    If InStr(1, HabilitaSheet, ActiveSheet.Name) > 0 Then
        'limpa a cor anterior
        ThisWorkbook.ActiveSheet.Range(Cells(Linha, ColunaInicial), Cells(Linha, ColunaFinal)).Interior.ColorIndex = xlNone
        'Variavel global recebe a o numero da linha atualmente selecionada
        Linha = ActiveCell.Row
        'Destaca linha atualmente selecionada
        ThisWorkbook.ActiveSheet.Range(Cells(Linha, ColunaInicial), Cells(Linha, ColunaFinal)).Interior.ColorIndex = 6
    End If
End Sub

Ou ir colocando em cada Sheet e ir determinando as particularidades:

Dim Linha As Long 'Variavel global

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ColunaInicial   As Integer
Dim ColunaFinal     As Integer
On Error Resume Next

    ColunaInicial = 2
    ColunaFinal = 7

    'limpa a cor anterior
    ThisWorkbook.ActiveSheet.Range(Cells(Linha, ColunaInicial), Cells(Linha, ColunaFinal)).Interior.ColorIndex = xlNone
    'Variavel global recebe a o numero da linha atualmente selecionada
    Linha = ActiveCell.Row
    'Destaca linha atualmente selecionada
    ThisWorkbook.ActiveSheet.Range(Cells(Linha, ColunaInicial), Cells(Linha, ColunaFinal)).Interior.ColorIndex = 6
End Sub

Qualquer coisa da o grito.
Abraço

 
Postado : 05/10/2015 10:51 am
 Josy
(@josy)
Posts: 0
New Member
Topic starter
 

Perfeito!!!!

Muito Obrigada!!!!

 
Postado : 05/10/2015 11:01 am