VBA (Excel) - Pesquisando valores entre duas datas
Neste artigo vou mostrar como podemos automatizar o Microsoft Excel usando a linguagem VBA realizando algumas tarefas como:
|
É uma aplicação simples que mostra aos iniciantes e interessados como automatizar tarefas no Microsoft Excel usando a linguagem VBA. Só isso.
O
Visual Basic for Applications (VBA) é uma
implementação do Visual Basic da Microsoft incorporada em todos os programas
do Microsoft Office, bem como em outras aplicações da Microsoft, como o
Visio, e que foi também incorporada pelo menos parcialmente em outros
programas de terceiros como o AutoCAD, Mathcad e WordPerfect. Ele substitui
e estende as capacidades de anteriormente existentes linguagens de
programação de macros específicas para as aplicações e pode ser usado para
controlar a quase totalidade dos aspectos da aplicação anfitriã, incluindo a
manipulação de aspectos do interface do usuário tais como menus e barra das
ferramentas e o trabalho com formulários desenhados pelo usuário ou com
caixas de diálogo. http://pt.wikipedia.org/wiki/Visual_Basic_for_Applications |
Eu estou usando o Microsoft Office Excel 2007 e sistema operacional Windows 7, e portanto o código deste artigo foi testado somente nesta versão e ambiente.
Antes de prosseguir eu sugiro que você leia os seguintes artigos da seção VBA do site Macoratti .net
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.
Criando a planilha Excel e realizando pesquisas entre duas datas
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 : VBA_PesquisandoPorDatas
Será aberta o arquivo Excel exibindo as três planilhas padrão: Plan1, Plan2 e Plan3;
Vamos inserir alguns dados na planilha Plan1 a partir da célula A1 conforme mostra a figura abaixo:
Os dados foram copiados da tabela Orders do banco de dados Northwind.mdb e a primeira coluna representa o código do pedido, a segunda coluna o nome do funcionário e a terceira coluna a data do pedido.
Nota: Você pode usar qualquer dados na planilha desde que uma das colunas seja do tipo data.
Dessa forma a planilha Plan1 - será a planilha que desejamos acessar para preencher os controles do formulário e de realizar a pesquisa.
Criando o formulário de pesquisa
Com a planilha Excel aberta pressione as teclas ALT+F11. Se preferir clique no menu Desenvolvedor e a seguir na opção Visual Basic.
Isso abrira o Editor Visual Basic; No editor Visual Basic clique no menu Inserir e a seguir em UserForm;
Um novo formulário chamado UserForm será criado na área de trabalho do Editor.
Ao seu lado irá aparecer a Caixa de Ferramentas contendo os controles que vamos usar para criar o formulário;
À sua direita temos a Janela de Propriedades do controle selecionado que iremos usar para definir o nome e outras propriedades dos controles;
Vamos alterar o nome do formulário alterando a sua propriedade Name para frmPesquisa e vamos alterar a sua propriedade Caption para :"Pesquisando entre duas datas"
Vamos então arrastar a partir da caixa de ferramentas os seguintes controles para o formulário e a seguir vamos alterar as propriedades indicadas conforme abaixo:
De forma que leiaute do formulário tenha a seguinte aparência:
Agora vamos definir o código necessário para realizar a pesquisa entre datas nos dados da planilha Plan1.
Vamos começar definindo o código no evento Initialize do UserForm. Para isso clique duas vezes no formulário e selecione o evento Initialize e digite o código abaixo neste evento:
Neste código estamos carregando o controle ListBox com os dados da planilha Plan1 e os dois controles Combobox com os dados da terceira coluna da planilha. Para isso estamos usando um laço Do Until/Loop:
Do Until Sheets("Plan1").Cells(linha, 3) = ""
With Me.lbDados
.AddItem
.List(linhalistbox, 0) = Sheets("Plan1").Cells(linha, 1) 'Código
.List(linhalistbox, 1) = Sheets("Plan1").Cells(linha, 2) 'Funcionario
.List(linhalistbox, 2) = Sheets("Plan1").Cells(linha, 3) 'Data
End With
linha = linha + 1
linhalistbox = linhalistbox + 1
contador_lista = contador_lista + 1
Loop
|
Criamos um laço
que é verdadeiro enquanto a terceira coluna não for vazia A seguir incluímos os dados da primeiro, segunda e terceira colunas da planilha no Listbox
Incrementamos a
linha da planilha e do listbox e o contador de itens da lista. |
Do Until Sheets("Plan1").Cells(linha, 3) = ""
cboDataInicial.AddItem Sheets("Plan1").Cells(linha, 3)
linha = linha + 1
Loop
|
Criamos um laço
que é verdadeiro enquanto a terceira coluna não for vazia. Esta coluna é
coluna da data do pedido Incluímos os valores da coluna do controle combobox e incrementamos a linha da planilha |
Do Until Sheets("Plan1").Cells(linha, 3) = ""
cboDataFinal.AddItem Sheets("Plan1").Cells(linha, 3)
linha = linha + 1
Loop
|
Criamos um laço
que é verdadeiro enquanto a terceira coluna não for vazia. Esta coluna é
coluna da data do pedido Incluímos os valores da coluna do controle combobox e incrementamos a linha da planilha |
Agora vamos definir o código do evento Click do botão Pesquisar (name=cmdPesquisar).
Clique duas vezes no botão Pesquisar para abrir o evento Click associado a este botão de comando ou clique com o botão do mouse sobre o botão e a seguir clique em Exibir Código;
Digite o código abaixo no evento Click do botão Pesquisar :
Private Sub cmdPesquisar_Click()
If Me.cboDataInicial = "" Or Me.cboDataFinal = "" Then MsgBox ("Informe a data inicial e final para a pesquisa") Me.cboDataInicial.SetFocus Exit Sub Else 'define as variáveis usadas no código Dim guia As Worksheet Dim linha As Integer Dim coluna As Integer Dim coluna_data As Integer Dim linhalistbox As Integer Dim valor_celula As String Dim valor_celula_data As Date Dim conta_registros As Integer Dim data_inicio As Date Dim data_fim As Date Set guia = ThisWorkbook.Worksheets(1) 'obtems os valores das datas do combobox data_inicio = Me.cboDataInicial data_fim = Me.cboDataFinal linhalistbox = 0 conta_registros = 0 linha = 2 coluna = 3 coluna_data = 3 'limpa os dados do listbox lbDados.Clear 'selecione a planiliha Plan1 Sheets("Plan1").Select With guia While .Cells(linha, coluna).Value <> Empty 'recebe o valor da célula para fazer o teste valor_celula_data = .Cells(linha, coluna_data).Value 'Condição para satisfazer a busca tem que estar entre o valor inicial e final das datas If valor_celula_data >= data_inicio And valor_celula_data <= data_fim Then 'adiciona itens a listbox With lbDados .AddItem .List(linhalistbox, 0) = Sheets("Plan1").Cells(linha, 1) 'ID .List(linhalistbox, 1) = Sheets("Plan1").Cells(linha, 2) 'funcionario .List(linhalistbox, 2) = Sheets("Plan1").Cells(linha, 3) 'data linhalistbox = linhalistbox + 1 End With conta_registros = conta_registros + 1 End If linha = linha + 1 Wend End With Me.lblMensagem = "Entre " & data_inicio & " e " & data_fim & " foram encontrados " & conta_registros & " registros." End If End Sub |
O código acima realiza busca na planilha por valores que estejam entre as datas inicial e final indicadas e copia os valores no controle ListBox exibindo uma mensagem do total de registros encontrados no controle lblMensagem.
Agora vamos definir o código do evento Click do botão Limpar Lista(name=cmdLimpar) que limpa os valores do controle ListBox preparando para uma nova pesquisa.
Clique duas vezes no botão Limpar Lista para abrir o evento Click associado a este botão de comando ou clique com o botão do mouse sobre o botão e a seguir clique em Exibir Código;
Digite o código abaixo no evento Click do botão Limpar Lista:
Private Sub cmdLimpar_Click()
Unload Me
frmPesquisa.Show
End Sub
|
Definindo Macros
Uma macro é uma coleção de comandos que você pode aplicar com um único clique. As macros podem automatizar quase tudo que seja possível executar no programa que você está usando e até mesmo permitem fazer coisas que talvez você não soubesse que fossem possíveis.
As macros são programação, mas para usá-las, você não precisa ser um desenvolvedor e nem mesmo ter conhecimento de programação. A maioria das macros que você pode criar nos programas do Office é escrita em uma linguagem chamada Microsoft Visual Basic for Applications, ou VBA.
Em muitos programas do Office, você pode criar uma macro gravando uma série de ações ou escrevendo a macro. Vamos escrever uma macro que será usada para abrir o formulário UserForm1.
Para isso vamos incluir um Módulo em nosso projeto.(Se ele ainda não estiver presente)
Pressione ALT+F11 para abrir o Editor Visual Basic, clique no menu Inserir -> Módulo;
Após essa operação digite o código abaixo no módulo inserido:
Sub
Abrir_FormularioPesquisa() frmPesquisa.Show End Sub |
Este código usa o método Show que exibe um objeto UserForm no nosso caso chamado frmPesquisa.
Criamos assim o código em uma Macro pois vamos abrir o formulário frmPesquisa a partir da planilha Excel.
Pressione ALT+F11 novamente, estando no editor Visual Basic, para retornar à planilha Excel.
Usando a planilha Plan1 clique na guia Desenvolvedor e a seguir na opção Inserir e selecionando o controle de formulário Botão:
Após selecionar o Botão coloque-o na planilha Excel. Fazendo isso de imediato será aberta a janela atribuir macro, exibindo as duas macros que criamos no Módulo.
Selecione a macro Abrir_FormularioPesquisa e clique em OK;
Com isso atribuímos a macro Abrir_FormularioPesquisa criada ao botão de comando da planilha:
A seguir selecione o botão e altere o nome de Botão 3 para Abrir Formulário de Pesquisa;
Pronto ! agora podemos abrir a planilha Excel e clicar no botão para abrir o formulário frmPesquisar:
Informando a data inicial e final nos controles Combobox e clicando no botão Pesquisar iremos obter o seguinte resultado:
Para iniciar uma nova pesquisa basta clicar no botão Limpar Lista.
Dessa forma mostramos como podemos usar código VBA para realizar pesquisa entre duas datas no Excel 2007.
Pegue a planilha com o código VBA aqui: PesquisandoPorDatas.zip
João 1:17 Porque a lei foi dada por meio de Moisés; a graça e a verdade vieram por Jesus Cristo.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Visão geral do modelo de objeto Excel: http://msdn.microsoft.com/pt-br/library/wss56bz7.aspx