segunda-feira, 25 de agosto de 2014

Excel VBA: Destacando automaticamente a linha selecionada de uma tabela

Muitas vezes, durante o manuseio de listas, temos a necessidade de destacar visualmente a linha que estamos analisando. Apresentaremos, neste artigo, uma maneira de implementar esta funcionalidade, automaticamente, em Excel.

Para into precisaremos criar uma sub-rotina em VBA.

Para melhor entendimento do assunto VBA, leia o artigo "Excel - Você sabe o que é VBA?"




Entendendo o Modelo

Nossa tabela modelo é formada por 8 colunas (da coluna B até a coluna I) e por 13 linhas (da linha 7 até a linha 19). Quando alguma célula dentro dessa região for selecionada, a linha da célula deverá ser destacada com uma cor diferente.


Criando nossa sub-rotina VBA

Desejamos criar, então, uma sub-rotina que ficará vinculada à planilha PAGAMENTOS. Para isto, precisamos abrir o editor Visual Basic For Applications. Isto pode ser feito pelo menu DESENVOLVEDOR ou o pelo atalho ALT+F11.


Com o editor do VBA aberto, damos um duplo-clique na planilha PAGAMENTOS e inserimos (podemos copiar e colar) o código abaixo:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'O OBJETO "TARGET" RECEBE A CÉLULA QUE ACABA DE SER SELECIONADA,
    'POR CLIQUE DO MOUSE OU PELO TECLADO

    'DESCOBRINDO QUAL A ÚLTIMA LINHA PREENCHIDA NA PLANILHA
        ULTIMA = Range("B6").End(xlDown).Row
 
    'SAIR DO PROCEDIMENTO SE A CÉLULA SELECIONADA NÃO ESTIVER ENTRE AS LINHAS 7 E A ÚLTIMA PREENCHIDA.
        If Target.Row < 7 Or Target.Row > ULTIMA Then Exit Sub
     
    'SAIR DO PROCEDIMENTO SE A CÉLULA SELECIONADA NÃO ESTIVER ENTRE AS COLUNAS 2 E 9 (DE B ATÉ I).
        If Target.Column < 2 Or Target.Column > 9 Then Exit Sub
 
    'APLICANDO PADRÃO INICIAL EM TODAS AS CÉLULAS DA TABELA
        With Range("B7" & ":I" & ULTIMA).Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
 
    'COM A LINHA SELECIONADA (TARGET.ROW), DEFININDO FORMATAÇÃO DE DESTAQUE
        With Range("B" & Target.Row & ":I" & Target.Row).Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent6
            .TintAndShade = 0.799981688894314
            .PatternTintAndShade = 0
        End With
End Sub

Notemos que o nome da sub-rotina é "Worksheet_SelectionChange", o que significa que sua execução será automática e vinculada ao evento SELECTIONCHANGE da planilha, ou seja, será executado sempre que selecionarmos uma célula diferente.



Entendendo a sub-rotina passo-a-passo

Após selecionarmos uma célula qualquer na planilha PAGAMENTOS, a sub-rotina é disparada.

O primeiro passo da sub-rotina é detectar qual a última linha da tabela. Notem, pela ilustração abaixo,  que a nossa lista termina na linha 19, valor este que foi atribuído à variável ULTIMA (em destaque na ilustração):


Nas duas ilustrações seguintes estamos verificando se a célula selecionada (TARGET) está entre as linhas 7 e ULTIMA (no caso, 19) e as colunas B e I (da 2 até a 9):



O fragmento abaixo remove a formatação especial de toda a tabela (retorna todas as linhas à formatação básica).



E em seguida aplica um formato diferenciado na linha (de B até I) inde se encontra a célula selecionada (TARGET.ROW).



Pronto. Agora, sempre que alterarmos a célula selecionada, se ela estiver dentro do intervalo que discutimos anteriormente, sua linha será destacada.



Para baixar o modelo pronto CLIQUE AQUI.

Leiam também outros artigos em NOSSO BLOG.


Estamos aqui, à disposição, aceitando sugestões para novos artigos.

Aproveitem e conheçam o site da nossa empresa: www.excelline.net.

Contem conosco!



Se você quiser saber mais sobre VBA, recomentamos o seguinte livro:


Curta a nossa página
Agosto/2014

GILBERTO GOMES
ExcelLine - Office World
Google+  +gilberto gomes
Related Posts Plugin for WordPress, Blogger...

Compartilhe