Calendário no Excel com VBA

42
Calendário no Excel com VBA

Objetivo: Criar um calendário que pode ser consultado a qualquer hora no Excel, tal como o calendário do Windows. Sendo que a data selecionada irá para a célula que estiver ativa.

Uma das coisas que eu sentia falta e acho que o amigo que está lendo também, é um calendário que possa ser chamado por um atalho no Excel.

Esta funcionalidade era sempre suprida por mim clicando no calendário do Windows, mas convenhamos que é bastante chato consultar ali.

Neste artigo vamos criar um calendário que pode ser chamado no Excel e colocará a data selecionada pelo duplo click do mouse diretamente na célula selecionada.

Criando o formulário:

  • Clique na guia Desenvolvedor e no botão Visual Basic.
  • Clique em VBAProject(Personal) que é o projeto acessível em qualquer lugar do Excel.

  • Clique em Inserir->User Form, irá ser incluído um formulário no projeto
  • Clique no botão Caixa de Ferramentas

  • Clique com o botão direito sobre o formulário da caixa de ferramentas habilitado pelo botão e clique em Controles Adicionais.
  • Selecione o controle adicional na lista chamado Microsoft MonthView Control 6.0 (SP4)

  • Selecione o componente MonthView que agora está habilitado na sua caixa de ferramentas e arraste para a Form1.

  • Ajuste o formulário arrastando as bordas para ficarem rentes ao calendário.
  • Com o formulário selecionado clique no botão Exibir código e insira o código abaixo:

Private Sub MonthView1_DateDblClick(ByVal DateDblClicked As Date)
   ActiveCell.Value = MonthView1.Value
   frmCalendario.Hide
End Sub
  • O código incluído fará com que o formulário passe a data para a célula quando houver um duplo clique sobre um valor no calendário

Realizando a chamada do formulário;

  • Ainda no VBA, clique em Inserir->Módulo estando selecionado o projeto PERSONAL.XLSB
  • No módulo incluído clique duas vezes e insira o código abaixo:
Sub lsCalendario()
   frmCalendario.Show
End Sub
  • Este código fonte realiza a chamada do calendário
  • Salve e feche o VBA

Realizando a chamada do calendário:

  • Clique na guia Desenvolvedor e no botão Macros
  • Selecione PERSONAL.XLSB!lsCalendario e clique no botão Opções
  • Digite uma tecla de atalho para a chamada deste procedimento, como por exemplo K (SHIFT+K) e feche esta tela
  • Agora pra testar funcionalidade pressione a tecla de atalho definida e clique duas vezes sobre qualquer data, o formulário irá passar esta data para a célula que estiver ativa e fechar automaticamente.

Então é isso, espero que tenham gostado do tutorial e se tiverem algum problema podem entrar em contato com o site ou ver o artigo sobre a habilitação da guia desenvolvedor ou gravar macro no Excel que tratam de assuntos relacionados a este.

Marcos Rieper

Treinamentos semanais em Excel

logo_210_90
Receba toda semana artigos sobre Excel e VBA por e-mail!

Importante: Você receberá um e-mail para confirmação!

42 COMENTÁRIOS

  1. bom dia ,
    Marcos , parabenz meu amigo pelo site(blog) que Deus te abençoe e possa multiplicar seu conhecimento assim como vc tem multiplicado o nosso . entrei hoje no blog e estou impressionado . é muito dificil achar alguém que disposto a compartilhar conhecimento sem cobrar valor .

    fique com Deus ,

    muito obrigado

  2. boa tarde ,
    amigo Marcos , como faço para usar o calendario em form e preencher uma caixa de texto ao clicar no dia desejado.

    obrigado

    • Boa tarde Silvano,

      Pra fazer isso você pode mudar o código ActiveCell.Value = MonthView1.Value para TextBox.Text = MonthView1.Value

      Private Sub MonthView1_DateDblClick(ByVal DateDblClicked As Date)
      TextBox.Text = MonthView1.Value
      frmCalendario.Hide
      End Sub

      Abraço

      Marcos Rieper

  3. Bom dia Marcos,

    Achei muito boa a idéia. Tenho um formulário onde jogo uma data para vencimento e fiquei muito interessado em fazer com o MonthView, acredito que trará mais interatividade ao usuário. Porem quando arrasto o controle aparece uma mensagem me dizendo que o elemento não foi encontrado. Consegue me ajudar?

    Abraço

    Marcelo Damascena

  4. Marcos, fiz tudo certinho, mas quando acesso o atalho, aparece um erro chamado: “ERRO EM TEMPO DE EXECUÇÃO 424. O OBJETO É OBRIGATÓRIO”. Você pode me ajudar?

  5. Olá! excelente TOPICO ele me ajudou e MUITO !!!
    apenas quando fui utilizar o note nao encontrei
    Microsoft MonthView Control 6.0
    para poder utilizar e continuar desenvolvendo no note…
    só posso usar no PC onde tenho instaldo direitinho o arquivo OCX
    mscomct2.ocx 647KB SP6 lá no System32 bem tentei de diversas maneiras
    mas ele simplismente nao APARECE !!! seleciono a OCX mas nao aparece
    alguem já passou esse sufuco pra poder me dar um auxilio …?
    quando vou em referencia sendo que Microsoft Windows Common Controls-2 6.0 (SP6)
    nao aparece na lista de referencias então vou em procurar e seleciono a OCX mscomct2
    fica aparecendo lá como se estivesse tudo certinho logo indo em controles adicionais
    verifico que nao tem o MONTHVIEW lá fecho o EXCEL abro ele novamente e
    Microsoft Windows Common Controls-2 6.0 (SP6)
    não aparece na lista de referencias NOVAMENTE !!!

    o negocio ta sinistro !!! h aH ah A nem sei mais de nada !!! h aH ah H A

    estou pesquisando e muito e todos os cantos só diz pra colocar lá no Sistem32
    que funciona … mas no meu caso não esta sendo tão simples assim nao …

    DESDE JÁ AGRADEÇO A ATENÇÃO e desculpe pelo texto imenso … VALEU !!!

  6. OLA !!!! consegui a resposta pra minha questão !!!
    como no note é seven tive um flash hehehe, estou mexendo no System32
    sem ser o user Administrador ativando referencia tbm … e depois ela some…
    vou tentar pelo ADMINISTRADOR a fazer o mesmo entao como é padrao do ADMIN estar OFF
    tive que ativa-lo para isso apenas aperte Windows+R digite CMD aperte ENTER
    e nesta tela preta digite NET USER ADMINISTRADOR /ACTIVE:YES
    o arquivo já estava lá no System32 mscomct2.ocx (647KB que é o SP6)
    então abri o Excel apertei ALT+F11 crie um UserForm ou abra o seu…
    resumindo pode seguir pelo POST excelente acima dos COMENTARIOS !!

    Depois de estar tudo OK tudo funcionando como deveria pode desativar o ADMINISTRADOR
    como eu fiz tbm NET USER ADMINISTRADOR /ACTIVE:NO

    E VALEU !!!

  7. Olá Marcos,
    Achei muito boa sua ideia do calendario, Parabéns, eu estou tentando colocar ele em um formulário que estou criando, mas não estou tendo muito sucesso, será que poderias me enviar seu e-mail para lhe passar o formulário para você me ajudar.

    Abraços

  8. Olá, poderia me informar em qual Excel foi criada a VBA? Estou usando o excel 2003 e não encontrei o controle Microsoft MonthView Control 6.0 (SP4).
    Obrigada
    Marcia

  9. Amigo gostaria de fazer o seguinte filtro:

    Gostaria de criar um form que tivesse um calendário para selecionar a “DATA INICIAL” e outro para a “DATA FINAL”, e um botão FILTRAR, com isso, esse botão filtraria os dados baseados nas datas escolhidas nos calendários

    como faria isso??

  10. Valeu pela dica, mas o meu problema é mais complexo, a saber:
    uma célula teria uma cx de listagem com os meses do ano e uma coluna com os dias. Ao se escolher o mês na caixa de listagem (ex.: julho) automaticamente a coluna dos dias mudaria referente a sabado e domingo.
    Ex. Em JUNHO tivemos os dias 2 e 3; 9 e 10; 16 e 17; 23 e 24 e 30 como sábado e domingo. No entanto, em JULHO, os sábados e domingos são os dias 7 e 8; 14 e 15; 21 e 22; 28 e 29. Isto para mim é super importante, pois nestes dias a planilha não poderá ser preenchida. Como fazer??

  11. boa noite.
    excelente tópico!
    porém, também tive o mesmo problema que outras pessoas mencionaram aqui, aparece a mensagem:
    “ERRO EM TEMPO DE EXECUÇÃO 424. O OBJETO É OBRIGATÓRIO”
    meu office é o 2010.
    pode me ajudar?
    obrigado!

    • Boa noite Luiz,

      Infelizmente retiraram da versão do Office 2010 este componente só funcionando até a versão 2007.

      Estou fazendo um artigo com um componente que um amigo do site encontrou na internet que supre esta necessidade.

      Abraço

      Marcos Rieper

  12. Muito bom o tópico, parabéns!!
    Para o pessoal que está com dificuldades com o office 2010, é possível instalar o controle, PORÉM só no Office 32bits, no Office 64 ele da um erro e não instala.
    Espero ter ajudado!!

  13. Ei, Marcos!
    Estou tendo o mesmo problema que algumas pessoas ai em cima, mas não encontrei a solução entre os comentários.

    “ERRO EM TEMPO DE EXECUÇÃO 424. O OBJETO É OBRIGATÓRIO”

    Abraço

  14. Marcos!
    Estou tendo o mesmo problema que algumas pessoas ai em cima, mas não encontrei a solução entre os comentários.

    “ERRO EM TEMPO DE EXECUÇÃO 424. O OBJETO É OBRIGATÓRIO”

    Aguardo retorno

  15. Bom dia amigo.

    Muito obrigado pela dica, me ajudou muito.

    Gostaria de contribuir: Tive o mesmo problema que várias pessoas de “ERRO EM TEMPO DE EXECUÇÃO 424. O OBJETO É OBRIGATÓRIO” utilizando o Windows 7 com Excel 2013, porém encontrei a solução aki nos próprios comentários.
    Como disse a Juliana em 4/01/2103: “PRECISA RENOMEAR O USERFORM PARA FRMCALENDARIO!!!!!!!!!!!!!!!”

    Agora funciona perfeito aki. Eu queria fazer um aprimoramento: tem alguma maneira de quando eu clicar em determinada célula ele abra esse calendário automaticamente ?

    Mais uma vez obrigado.

    • Boa tarde Marcelo,

      Obrigado pela sua contribuição.

      Para fazer a alteração que você quer digite o seguinte código, substituindo apenas o endereço da célula:

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Address = “$A$1” Then
      frmCalendario.Show
      End If
      End Sub

      Abraço

      Marcos Rieper

  16. Marco, muito bom seu trabalho! Fiz o comando do calendario, o mesmo funcionou que é uma blz! Porem não tem como desfazer a operação de inserir data pelo calendário? Esta parecendo que o mesmo esta salvando automático. Isso tem como desfazer? Agradeço

Faça umcomentário