VBA - Procurando informações na Planilha (Método Find)
Neste artigo vou mostrar como podemos automatizar o Microsoft Excel usando a linguagem VBA para localizar informações em uma planilha Excel.
A aplicação irá permitir que o usuário localize informações em uma planilha com dados da seguinte forma:
Abaixo vemos a figura da aplicação sendo executada exibindo a planilha Excel e os botões de comando :
É uma aplicação simples que mostra aos iniciantes e interessados automatizar tarefas no Microsoft Excel usando a linguagem VBA. Só isso.
Os recursos usados no projeto deste artigo foram:
Antes de iniciar temos que realizar duas configurações no Microsoft Excel 2007:
Obs: A necessidade de habilitar a execução de macros é que por padrão, o Excel coloca um nível de segurança mais elevado pois códigos maliciosos podem ser executados em scripts através de macros no Excel.
Vamos ativar a guia do desenvolvedor e logo em seguida habilitar a execução de macros.
Para ativar a guia do desenvolvedor (se ainda não estiver ativa) siga os seguintes passos:
Abra o Excel 2007 e ative o Menu principal de opções clicando no botão superior a esquerda, conforme a figura abaixo;
A seguir clique na guia Opções do Excel para abrir a janela - Opções do Excel;
Nesta janela, selecione o item - Mais Usados - e a seguir marque o item - Mostrar guia Desenvolvedor na Faixa de Opções e clique no botão OK;
No menu do Excel selecione a guia do Desenvolvedor e em seguida clique em Segurança de Macro;
Na janela Central de Confiabilidade selecione a opção - Configurações de Macro - e marque o item para habilitar todas as macros conforme a figura abaixo:
Pronto , feito isso já podemos iniciar o desenvolvimento da aplicação VBA no Excel 2007.
Abra então o Excel 2007 , será aberta uma planilha em branco. Clique então no botão no canto superior a esquerda para abrir o menu principal de opções;
Selecione a opção Salvar como e clique no item : Pasta de Trabalho Habilitada para Macro do Excel;
Em seguida informe o nome do arquivo : ProcurandoExcel;
Nossa primeira tarefa será criar a planilha onde iremos armazenar as informações dos clientes. Sim, isso mesmo, vamos armazenar as informações no próprio Excel.
Para facilitar o nosso trabalho vamos preencher a planilha Plan1 com dados oriundos de um banco de dados Access, no caso o banco de dados Northwind.mdb;
Na planilha clique no menu Dados e a seguir em Do Access; (Poderíamos importar dados da web , de um arquivo texto , etc.)
A seguir na janela - Selecionar Fonte de Dados - selecione o banco de dados Northwind.mdb
A seguir selecione a tabela Categories na janela Selecionar Tabela;
Para concluir clique no botão OK da janela Importar Dados;
Os dados serão importados diretamente para a planilha Plan1 conforme mostra a figura abaixo. A coluna Data e a linha 10 e 11 foram digitadas por mim para adequar os dados ao nosso exemplo:
Até o momento criamos a nossa planilha com os dados agora vamos partir para a automação do cadastro das informações usando VBA.
Para começar vamos incluir três botões de comando na planilha da seguinte forma:
Quando você incluir um botão na planilha será aberta a janela para atribuir macro conforme mostra a figura a seguir:
Você deve então fazer o seguinte:
Digite o código conforme mostra a figura a seguir no evento Click do botão no Módulo1 :
Este código faz a localização da primeira ocorrência de uma string no intervalo das colunas B e C usando o método Find:
O método Find localiza uma
informação em um intervalo expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
Retorno : Um objeto Range que representa a primeira célula onde essa informação é encontrada. Este método retorna Nothing se nenhuma correspondência for encontrada e não afeta a seleção ou a célula ativa.
As configurações para
Lookin, LookAt, SearchOrder, e MatchByte
são salvas cada vez que você utilizar este
método.
Você pode usar os métodos
FindNext e FindPrevious
para repetir a pesquisa. |
Para o outro botão iremos incluir o código abaixo para localizar a última ocorrência de uma string nas colunas B e C no evento Botão2_Clique que também usa o método Find:
Sub Botão4_Clique() Dim EncontraString As String Dim Intervalo As Range EncontraString = InputBox("Informe o valor a procurar") If Trim(EncontraString) <> "" Then With Sheets("Plan1").Range("B:C") Set Intervalo = .Find(What:=EncontraString, _ After:=.Cells(1), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False) If Not Intervalo Is Nothing Then Application.Goto Intervalo, True Else MsgBox "Não Localizado" End If End With End If End Sub
|
Finalmente no último botão vamos incluir o código VBA no evento Botão3_Clique conforme abaixo:
Sub Botão5_Clique() Dim PrimeiraOcorrencia As String Dim mVetor As Variant Dim Intervalo As Range Dim Contador As Long Dim I As Long Dim NovaPlanilha As Worksheet With Application .ScreenUpdating = False .EnableEvents = False End With 'Define o critério de buca em um array mVetor = Array("#") 'Você pode usar mais de um valor no array 'mVetor = Array("@", "#") 'Inclua uma nova planilha no seu workbook para copia 'Você pode usar também uma planilha existente como fizemos abaixo Set NovaPlanilha = Sheets("Plan2") 'não vou criar uma nova planilha mas se desejar comente a linha acima 'descomente a linha de baixo 'Set NovaPlanilha = Worksheets.Add With Sheets("Plan1").Range("A1:Z100") Contador = 0 For I = LBound(mVetor) To UBound(mVetor) 'Se voce usar LookIn:=xlValues vai funcionar 'com a célula da forma que usa o simbolo "@" 'Nota : Eu usei xlPart neste exemplo e não xlWhole Set Intervalo = .Find(What:=mVetor(I), _ After:=.Cells(.Cells.Count), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False) If Not Intervalo Is Nothing Then PrimeiraOcorrencia = Intervalo.Address Do Contador = Contador + 1 Intervalo.Copy NovaPlanilha.Range("A" & Contador) ' Use este codigo se você quiser somente copiar o valor ' NovaPlanilha.Range("A" & Contador).Value = Intervalo.Value Set Intervalo = .FindNext(Intervalo) Loop While Not Intervalo Is Nothing And Intervalo.Address <> PrimeiraOcorrencia End If Next I End With With Application .ScreenUpdating = True .EnableEvents = True End With End Sub
|
Neste código definimos que desejamos copiar o conteúdo das células que contenham o caractere # para a planilha Plan2.
Agora vamos alterar os textos de exibição dos botões:
Feito isso basta executa o projeto e clicar em cada um dos botões para realizar a busca.
Ou para copiar o texto com o critério para a planilha Plan2:
Eu sei é apenas Visual Basic for Applications (VBA), mas eu gosto...
Pegue a planilha com o código VBA aqui: ProcurandoExcel.zip
Salmos 5:9
Porque não há fidelidade na boca deles; as suas entranhas são verdadeiras maldades, a sua garganta é um sepulcro aberto; lisonjeiam com a sua língua.Veja os Destaques e novidades do SUPER CD VB 2012 (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super CD .NET e no Super DVD .NET , confira... Quer aprender C# ?? Chegou o
Super DVD C# 2012
com exclusivo material de
suporte e vídeo aulas com curso básico sobre C# |
Referências:
Visão geral do modelo de objeto Excel: http://msdn.microsoft.com/pt-br/library/wss56bz7.aspx