Macro para pesquisar na tabela e destacar a linha.
Neste tutorial criaremos uma macro que fará busca em uma tabela e assim que o termo da busca for localizado será aplicado automaticamente um sombreamento na cor verde claro para destacar o local (linha ou linhas da tabela) onde o termo pesquisado se encontra.
O termo a ser pesquisado pode ser um nome ou sobrenome, um número, uma data, um caractere especial, ou qualque palavra.
Veja um breve exemplo de como vai funcionar a nossa macro. Observe a imagem da tabela abaixo que contém uma lista com o nome e a data de nascimento de várias pessoas:
Digamos que queremos localizar e destacar todas as pessoas que nasceram, por exemplo, em 1980.
Executamos a macro e na InputBox informamos termo a ser pesquisado, que neste exemplo é o ano 1980.
Veja o resultado e note que as linhas da tabela que contém pessoas nascidas em 1980 foram destacadas na cor verde claro.
Criando a macro.
Na Guia Desenvolvedor, no Grupo Código clique emVisual Basic.
No Editor do Visual Basic clique no menu Inserir e em seguida clique em Módulo.
Na Janela de Código adicione o seguinte código:
Sub BuscaPalavraNaTabela()
Application.ScreenUpdating= False
'Declara as variáveis
Dim TblRng As Range, TmpRng As Range
Dim vText As String
'A variável vText é igual ao valor informado na InputBox
vText = InputBox("Informe o termo da busca (texto, número, data, frase, etc)", "Buscar")
'Seleciona a primeira tabela contida no documento
ActiveDocument.Tables(1).Select
'Limpa todas as células que porventura estejam com sombreamento
Selection.Shading.BackgroundPatternColor = wdColorAutomatic
'Procura na tabela pela palavra, texto ou frase informada na InputBox e atribui o sombreamento na cor verde claro na linha
With ActiveDocument.Tables(1)
Set TblRng = .Range: Set TmpRng = .Range
With .Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = vText
.Replacement.Text = ""
.Forward = True
.Format = False
.Wrap = wdFindStop
.MatchCase = True
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute
End With
Do While.Find.Found
If .InRange(TblRng) Then
TmpRng.Collapse wdCollapseEnd
.Rows(1).Select
.Rows(1).Cells.Shading.BackgroundPatternColor = wdColorBrightGreen 'Especifica a cor do sombreamento
End If
.Find.Execute
Loop
End With
End With
'Atualiza a tela
Application.ScreenUpdating = True
End Sub
Deverá ficar como na imagem abaixo:
Comentando a execução do código
Sub BuscaPalavraNaTabela()
Através da instrução Sub é atribuída o nome “BuscaPalavraNaTabela” à nossa macro e em seguida é declarado todos os argumentos do código que fazem parte do procedimento Sub.
vText = InputBox("Informe o termo da busca (texto, número, data, frase, etc)", "Buscar")
A função InputBox é uma caixa de mensagem interativa, onde o usuário pode inserir dados, e no código desta macro usamos esta função para que o usuário possa informar o termo da busca que neste exemplo pode ser o nome ou parte do nome, a data de nascimento ou parte da data, como: somente o dia, somente o mês ou somente o ano.
O valor informado na InputBox é guardado na variável vText.
ActiveDocument.Tables(1).Select
Seleciona a primeira tabela do documento ativo. O número 1 entre parênteses se refere a primeira tabela do documento, porém, caso o documento contenha várias tabelas e você deseja, por exemplo, fazer uma busca na terceira tabela basta alterar o número que está entre parênteses para 3: ActiveDocument.Tables(3).Select.
Selection.Shading.BackgroundPatternColor = wdColorAutomatic
Essa linha de código retira o sombreamento de todas as células da tabela que porventura estejam com algum sombreamento.
Isso é necessário para que quando uma nova busca for feita as células da tabela esteja sem nenhum preenchimento de sombreamento.
With ActiveDocument.Tables(1)
Set TblRng = .Range: Set TmpRng = .Range
With .Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = vText
.Replacement.Text = ""
.Forward = True
.Format = False
.Wrap = wdFindStop
.MatchCase = True
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute
End With
Do While .Find.Found
If .InRange(TblRng) Then
TmpRng.Collapse wdCollapseEnd
.Rows(1).Select
.Rows(1).Cells.Shading.BackgroundPatternColor = wdColorBrightGreen 'Especifica a cor do sombreamento
End If
.Find.Execute
Loop
End With
End With
Nas linhas de código acima utilizamos o método Find para pesquisar na 1ª tabela do documento ativo a palavra ou termo informado na InputBox. A busca percorre por todas as linhas da tabela e sempre que o termo da busca for encontrado a linha em que ela se encontra recebe um sombreamento na cor verde claro.
Você pode alterar a cor do sombreamento alterando a linha de código:
.Rows(1).Cells.Shading.BackgroundPatternColor = wdColorBrightGreen
Como executar a macro
Feche o Editor do Visual Basic para voltar ao Word clicando em Arquivo e depois em Fechar e voltar para Microsoft Word.
Na Guia Desenvolvedor, no grupo Código clique em Macros.
Na caixa de diálogo Macro selecione a macro BuscaPalavraNaTabela e clique no botão Executar.
Surgirá a InputBox para você informar o texto da busca. Neste exemplo vamos procurar por todos aqueles que têm o sobrenome Silva.
Veja o resultado:
Faça o download do exemplo usado neste tutorial: Baixar Arquivo