Cadastro Excel VBA – Formulário inserir e limpar automaticamente

Neste modelo de cadastro criado em Excel VBA, você tem um código que facilita muito o trabalho de criação de formulários.

No formulário você cria os objetos, TextBox, RadioButton, ComboBox, etc, e com uma simples configuração o sistema já está pronto par ainserir estes dados na sua planilha de cadastro.

Nesta primeira versão tenho apenas os botões Inserir e Limpar e o formulário é apenas um exemplo simples, porém com funções VBA muito úteis para a criação de qualquer tipo de formulário.

Vejamos como funciona:

Como criar seu formulário VBA

Formulário de cadastro VBA Excel automático

  1. Defina um nome para a sua pasta de trabalho Excel e salve ele com a extensão XLSM, é necessário que seja XLSM porque assim a planilha estará habilitada para macros, caso contrário todos os códigos VBA serão apagados.
  2. Defina uma planilha da sua pasta de trabalho e altere o nome conforme a sua necessidade, por exemplo Cadastro.
  3. Nesta planilha crie um cabeçalho par aos campos que serão salvos pelo seu formulário. No nosso exemplo temos os campos Nome, Endereço, Número, Cidade, UF e Sexo.
  4. Abra o editor de VBA. Caso não esteja habilitado, veja aqui como habilitar: Habilitando a guia desenvolvedor e copiando procedimentos VBA da internet.
  5. Na sua guia desenvolvedor localize a sua pasta de trabalho, destacada ao lado esquerdo.Formulário de cadastro VBA Excel automático
  6. Agora iremos criar o formulário de cadastro. Clique na guia Inserir e selecione UserForm. O sistema irá criar uma pasta chamada Formulários e inserir um formulário VBA.
  7. Clique duas vezes sobre a pasta Formulários e depois clique duas vezes sobre o formulário que acabou de criar.
  8. Clique no botão Caixa de Ferramentas.Formulário de cadastro VBA Excel automático 3
  9. O VBA irá abrir uma paleta de componentes que você pode utilizar no seu formulário.
  10. Pare com o mouse sobre o componente para ver os seus nomes.
  11. Clique sobre o componente Rótulo e arraste até o seu formulário.
  12. Clique sobre o componente com o botão direito e clique na opção Propriedades.
  13. Procure a propriedade Caption e altere o nome para Nome e ajuste o tamanho do componente.
  14. Repita a operação para incluir os campos Endereço, N.º, Cidade e UF e disponha os dados conforme a imagem.Formulário de cadastro VBA Excel automático 4
  15. Procure o objeto Caixa de Texto e arraste para o formulário, ao lado de Nome.
  16. Clique sobre o objeto arrastado e altere a propriedade Tag para a coluna da sua planilha criada no início que armazenará o nome digitado em seu cadastro. No caso a coluna escolhida foi A, então preencha o campo Tag com A.
  17. Repita a operação para os campos Endereço, N.º e Cidade, alterando a propriedade Tag de cada componente para B, C e D respectivamente, conforme as colunas que armazenarão estas informações.Formulário de cadastro VBA Excel automático 5
  18. Volte para a sua planilha clicando no ícone do Excel na barra de tarefas do Windows e em outra planilha crie uma lista com as UFs.
  19. Selecione a lista e altere o nome do intervalo para UF.
    Formulário de cadastro VBA Excel automático 6
  20. Volte para o Editor do VBA e insira uma Caixa de Combinação.
  21. Altere a propriedade RowSource para UF, isto fará com que a caixa de combinação mostre os estados brasileiros quando o formulário estiver sendo executado.
  22. Altere a propriedade Tag da caixa de combinação para E, coluna que terá esta informação.
  23. Selecione e insira o objeto Quadro. Altere a propriedade Caption para Sexo.
  24. Selecione e arraste para dentro do quadro dois objetos Botão de Opção. Altere a propriedade Caption dos dois para Feminino e Masculino respectivamente.
  25. Altere a propriedade Tag dos dois botões de opção para F. Esta coluna guardará o sexo.Formulário de cadastro VBA Excel automático 7
  26. Insira dois botões e altere a propriedade Caption dos dois para Novo e Inserir respectivamente.
  27. Clique com o botão direito sobre o formulário e selecione a opção Exibir código. Copie e cole o código abaixo no formulário. Este código é responsável pelo preenchimento das informações na planilha.
Veja também  Proteger/Desproteger todas as planilhas - Excel VBA

 

'Identifica o tipo do objeto e insere se for um dos tipos definidos
Private Sub lsInserir(ByRef lTextBox As Variant, ByVal lSheet As String, ByVal lColunaCodigo As Long, ByVal lUltimaLinha As Long)
    If (TypeOf lTextBox Is MSForms.TextBox) Or (TypeOf lTextBox Is MSForms.ComboBox) Then
        Sheets(lSheet).Range(lTextBox.Tag & lUltimaLinha).Value = lTextBox.Text
    Else
        If TypeOf lTextBox Is MSForms.OptionButton Then
            If lTextBox.Value = True Then
                Sheets(lSheet).Range(lTextBox.Tag & lUltimaLinha).Value = lTextBox.Caption
            End If
        End If
    End If
End Sub
 
'Loop por todos os componentes da tela
'formulario = Nome do UserForm atual
'lSheet = Nome da planilha aonde irão ser inseridos os valores
'lColunaCodigo = Coluna de referência para a inserção dos dados
Public Function lsInserirTextBox(formulario As UserForm, ByVal lSheet As String, ByVal lColunaCodigo As Long)
    Dim controle            As Control
    Dim lUltimaLinhaAtiva   As Long
 
    lUltimaLinhaAtiva = Worksheets(lSheet).Cells(Worksheets(lSheet).Rows.Count, lColunaCodigo).End(xlUp).Row + 1
 
    For Each controle In formulario.Controls
        lsInserir controle, lSheet, lColunaCodigo, lUltimaLinhaAtiva
    Next
End Function
 
'Limpa todos os objetos TextBox da tela
Public Function lsLimparTextBox(formulario As UserForm)
    Dim controle            As Control
 
    For Each controle In formulario.Controls
        If TypeOf controle Is MSForms.TextBox Then
            controle.Text = ""
        End If
    Next
End Function
Veja também  Criar catálogo de imagens no Excel - VBA
'Loop por todos os componentes da tela 'formulario = Nome do UserForm atual 'lSheet = Nome da planilha aonde irão ser inseridos os valores 'lColunaCodigo = Coluna de referência para a inserção dos dados Public Function lsInserirTextBox(formulario As UserForm, ByVal lSheet As String, ByVal lColunaCodigo As Long) Dim controle As Control Dim lUltimaLinhaAtiva As Long lUltimaLinhaAtiva = Worksheets(lSheet).Cells(Worksheets(lSheet).Rows.Count, lColunaCodigo).End(xlUp).Row + 1 For Each controle In formulario.Controls lsInserir controle, lSheet, lColunaCodigo, lUltimaLinhaAtiva Next End Function 'Limpa todos os objetos TextBox da tela Public Function lsLimparTextBox(formulario As UserForm) Dim controle As Control For Each controle In formulario.Controls If TypeOf controle Is MSForms.TextBox Then controle.Text = "" End If Next End Function

28. Clique duas vezes sobre o botão Novo. Será criado o método Click para este botão. Cole entre o sub e o end sub o código abaixo, que irá chamar o procedimento para limpar o formulário. Não coloque a primeira e a última linha, que já estão preenchidas.

Veja também  Copiar Planilha e Enviar como Anexo por Email com Outlook VBA

 

'Aciona o botão de limpar
Private Sub CommandButton2_Click()
    lsLimparTextBox frmCadastro
 
    TextBox1.SetFocus
End Sub

29. Clique duas vezes sobre o botão Inserir. Da mesma forma que o botão Novo será criado o método Click. Cole o código abaixo:

'Aciona o botão de inserir
Private Sub CommandButton1_Click()
    lsInserirTextBox frmCadastro, "Cadastro", 1
 
    lsLimparTextBox frmCadastro
 
    TextBox1.SetFocus
End Sub

30. Pressione o botão F5 para executar o formulário.

Se quiser baixe o nosso exemplo criado e clique no botão Formulário para testar o nosso projeto. Veja que se você incluir outros objetos Caixa de combinação, Caixa de texto ou Botão de opção e configurar a coluna no campo Tag destes objetos, o sistema automaticamente irá preencher estas colunas com esta informação, poupando muito código fonte VBA, tempo e depuração para validar o formulário.

Para testar, basta preencher os dados e clicar no botão Inserir, veja que automaticamente os dados são levados do formulário para a planilha.

Da mesma forma para limpar e começar um novo formulário clique no botão Novo e os dados serão automaticamente limpos.

Brinque com o formulário, incluindo novos campos com e indicando novas colunas para preencher no campo Tag. Veja como pode ser útil este exemplo de formulário.

Clique no botão abaixo para baixar o exemplo aplicado em uma planilha.

Abraço
Marcos Rieper

15 COMENTÁRIOS

  1. Excelente, ótimo artigo. Eu sempre fazia um loop para preencher os valores no combobox. Depois que li que dá para colocar no Rowsource.
    Outra fórmula bem interessante também é saber o número da ultima linha onde vou inserir um novo registro.
    Valeu Rieper, Obrigado.

  2. Rieper, gostaria de parabenizar pelo artigo, muito bom mesmo. Mas gostaria de saber como faço para acrescentar no formulário mas um item que seria numeros de telefone..

    De ja agradeço…

  3. Boa noite Marcos Rieper

    Eu, sou joão pedro um aluno curioso e gostaria de adaptar a função abaixo para identificar apenas as TextBox Vazia, no caso de todas serem obrigado preencher e o usuário deixa-la sem preenchimento, com isso ele receba uma mensagem de alerta antes de salvar o registro.
    Da forma que a função estar usando For Each ela não reconhece ainda se a Textbox esta vazia ou não!
    se possível me ajude a fechar essa janela. sem mais joão pedro(Recife/Pe) 03/10/2016 23:35.

    ‘identificar todos os objetos TextBox (vazia) da tela
    Public Function lsIdentificarTextBoxVazia(formulario As UserForm)
    Dim controle As Control

    For Each controle In formulario.Controls
    If TypeOf controle Is MSForms.TextBox Then
    msgbox Application.UserName & ” Preencha ” & controle.Name
    End If
    Next
    End Function

  4. Olá, Boa Noite! Marcos

    Muito obrigado por sua atenção, foi apenas incluir o if e deu certo fez de fato o que eu desejava, ele reconhece apenas a textbox vazia

    Abraço
    João Pedro

  5. Boa tarde.

    A dica foi muito válida, mas gostaria de saber como fazer para limpar a combobox tambem, pois quando clica em inseri ou em novo o campo do estado fica preenchido ele não limpa tambem.

    Mas parabéns pela explicação num geral.

    Fico no aguardo

    • Olá Tadeu,

      Aqui:

      ‘Limpa todos os objetos TextBox da tela
      Public Function lsLimparTextBox(formulario As UserForm)
      Dim controle As Control

      For Each controle In formulario.Controls
      If TypeOf controle Is MSForms.TextBox Then
      controle.Text = “”
      End If
      Next
      End Function

      Altere para (TypeOf controle Is MSForms.TextBox) or (TypeOf controle Is MSForms.ComboBox)

      Abraço
      Marcos Rieper

  6. Tenho um formulário onde existem alguns textbox e combox.

    Preciso criar 1 botão de inserir e automaticamente ele limpa todos os campos, textbox e combo box.

    Outro botão somente limpar todos os campos, textbox e combobox

    E um botão de alterar os dados

DEIXE UMA RESPOSTA

Please enter your comment!
Please enter your name here