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:

  • preencher um controle ListBox com os dados de uma planilha Excel
  • preencher um controle Combobox com os dados de uma coluna da planilha
  • realizar a busca entre duas datas e exibir o resultado no controle Listbox

É 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

O que é uma macro?

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# ??


José Carlos Macoratti