ESQUECEU SUAS INFORMAÇÕES?

NOVIDADES E DESCONTOS

Quer receber descontos em nossa loja e ser avisado de novos arquivos?

Inserindo dados através de um formulário (userform)

/ / Formulários

Uma das grandes necessidades dos iniciantes em excel é criar um formulário para inserir dados. Nesse tutorial, criamos um formulário simples que você poderá fazer download e modificar do jeito que melhor te atender.

ESTRUTURA DA PLANILHA

A planilha contem apenas 2 abas:

  • MENU: Contém apenas o botão para abrir o formulário
  • DADOS: Onde serão inseridas as informações digitadas no formulário. É composta por 4 colunas: Nome, Sobrenome, Endereço e Plano

CÓDIGO DA PLANILHA

Private Sub UserForm_Initialize()
'Limpando os campos
caixa_nome.Value = ""
caixa_sobrenome.Value = ""
caixa_endereco.Value = ""
'Abrindo as opções do combo
With combo_plano
.AddItem "Plano 01"
.AddItem "Plano 02"
.AddItem "Plano 03"
End With
'Configuração para manter o cursor de edição ativo no campo NOME
caixa_nome.SetFocus
End Sub

Private Sub botao_enviar_Click()
'Cria a variavel linhavazia
Dim linhavazia As Long
'Confere se o campo nome foi preenchido
If caixa_nome.Value = "" Then
MsgBox ("Campo Nome é obrigatório")
caixa_nome.SetFocus
Exit Sub
Else
End If
'seleciona a aba "dados"
Sheets("dados").Select
'conta quantas informações foram inseridas na coluna A da aba dados
linhavazia = WorksheetFunction.CountA(Range("A:A")) + 1
'Insere informações da aba dados
Cells(linhavazia, 1).Value = caixa_nome.Value
Cells(linhavazia, 2).Value = caixa_sobrenome.Value
Cells(linhavazia, 3).Value = caixa_endereco.Value
Cells(linhavazia, 4).Value = combo_plano.Value
'Avisa que a informação foi inserida com sucesso
MsgBox ("Informação inserida")
'Volta para a aba MENU
Sheets("MENU").Select
End Sub

Private Sub botao_limpar_Click()
caixa_nome.Value = ""
caixa_sobrenome.Value = ""
caixa_endereco.Value = ""
End Sub

Private Sub botao_cancelar_Click()
Unload Me
End Sub

Private Sub CommandButton1_Click()
InserirDados.Show
End Sub

DOWNLOAD DA PLANILHA

66 Comentários to “Inserindo dados através de um formulário (userform)”

  1. Salles disse: Responder

    Gostaria de saber como faço pra criar uma condição na hora de gravar. para gravar na aba de acordo com a seleção.
    Ex: Tenho abas com os meses de jan a dez, e na hora que eu for fazer o cadastro seleciono o mês e quando clicar em gravar o programa salvará na aba correta.
    Espero que tenha exposto minha dúvida de forma clara.

    1. zeplanilha disse: Responder

      Salles,

      Faça um novo combo para escolher a aba que deseja inserir a informação. Por exemplo, as abas JAN e FEV. Crie o combo (o mesmo tipo da escolha do plano) e nomeie para SelAba. Acrescente o código na inicialização do userform (UserForm_Initialize):

      With SelAba
      .AddItem “JAN”
      .AddItem “FEV”
      End With

      Na função botao_enviar_Click(), substitua

      Sheets(“dados”).Select por Worksheets(SelAba.Value).Select

      Não esqueça de criar as abas antes.

      Boa sorte!

  2. Névio disse: Responder

    Olá, mas como faço pra aparecer o Mês a que refere a aba no combobox? Tipo, eu seleciono o mês na combobox e dai os dados são inseridos na planilha correspondente a esse mês, mas não entendi como fazer essa ligação. No combobox tem que aparecer os meses com JAN, FEV,… ou posso Escrever Janeiro e dai ele vai para a plan JAN? Muito obrigado

    1. zeplanilha disse: Responder

      Olá Névio,

      A sua pergunta era a dúvida de outro usuário também. Veja o primeiro comentário.

  3. SIDNEI APARECIDO disse: Responder

    Ola, estou com muitas dificuldades. estou fazendo gravação com macros no Excel, em formulário simples. gravando dados de uma planilha para outra.
    só que quando eu coloco uma formulá na célula e vou gravar no banco de dados aparece isso #ref!

    você pode me ajudar.

    1. zeplanilha disse: Responder

      Sidnei,
      Sua macro contém instruções para apagar células, linhas ou colunas? Normalmente esse erro aparece quando é realizado uma dessas operações de forma errada.

  4. Leandro Barbosa disse: Responder

    Muito bom esse tutorial, isso é o que eu chamo de “não esconder o ouro”, programo em Access e sempre tento ajudar mostrando o lado mais simples do processo da forma mais clara possível.

    Parabéns!!!

  5. Iuri disse: Responder

    Bom dia,

    Veja se pode me ajudar..
    Preciso criar um formulário que vai jogar as informações para duas guias da planilha.
    Por exemplo, tenho duas guias (Plan1 e Plan2) ao clicar em inserir as informações tem que ir para as duas.

    1. zeplanilha disse: Responder

      Iuri,

      Na função botao_enviar_Click(), repita o procedimento para escrever a informação nas planilhas. Ficaria desta maneira:

      Sheets(“Plan1”).Select
      linhavazia = WorksheetFunction.CountA(Range(“A:A”)) + 1
      Cells(linhavazia, 1).Value = caixa_nome.Value
      Cells(linhavazia, 2).Value = caixa_sobrenome.Value
      Cells(linhavazia, 3).Value = caixa_endereco.Value
      Cells(linhavazia, 4).Value = combo_plano.Value

      Sheets(“Plan2”).Select
      linhavazia = WorksheetFunction.CountA(Range(“A:A”)) + 1
      Cells(linhavazia, 1).Value = caixa_nome.Value
      Cells(linhavazia, 2).Value = caixa_sobrenome.Value
      Cells(linhavazia, 3).Value = caixa_endereco.Value
      Cells(linhavazia, 4).Value = combo_plano.Value

  6. Matheus disse: Responder

    Boa tarde.
    Como faço para salvar os dados do formulário em outra pasta de trabalho?
    Desejo criar um Banco de Dados separado.

    1. zeplanilha disse: Responder

      Matheus,

      Há uma maneira, mas a planilha do banco de dados precisa estar aberta. Crie um arquivo com o nome de bd.xlsm, criei uma aba “dados”. No seu arquivo original, faça as seguintes modificações no código:

      linhavazia = WorksheetFunction.CountA(Workbooks(“bd.xlsm”).Sheets(“dados”).Range(“A:A”)) + 1
      e
      Workbooks(“bd.xlsm”).Sheets(“dados”).Cells(linhavazia, 1).Value = caixa_nome.Value
      Workbooks(“bd.xlsm”).Sheets(“dados”).Cells(linhavazia, 2).Value = caixa_sobrenome.Value
      Workbooks(“bd.xlsm”).Sheets(“dados”).Cells(linhavazia, 3).Value = caixa_endereco.Value
      Workbooks(“bd.xlsm”).Sheets(“dados”).Cells(linhavazia, 4).Value = combo_plano.Value

  7. Ismael Fiorotti Coimbra disse: Responder

    Olá, me ajudou bastante o tutorial, mas poderia me ajudar em uma coisa?
    Gostaria de adicionar meio que uma condição no campo se houvesse um CPF nessa planilha pra quando eu digitar ele ja verificar se ja existe ou não, na hora em que eu digitar ele me dizer se ja existe ou não.
    Obrigado.

    1. zeplanilha disse: Responder

      Ismael,

      Uma maneira simples é criar um botão que seria o nosso “check”. Você pode utilizar, por exemplo uma fórmula para contar. Se ele encontrar o CPF, o valor da variável ficará maior que 0. Sempre que o valor for 0, o CPF ainda não foi utilizado.

      Abaixo, uma fórmula para contar o valor digitado do campo “buscaCPF”, procurando na aba Plan2, coluna B (onde teoricamente estão dos valores de CPF):
      Application.WorksheetFunction.CountIf(Plan2.Range(“B:B”), buscaCPF.Value)

  8. Netinho Sillva disse: Responder

    Amigo estou trabalhando em um controle de materiais e preciso de um código que me permita atualizar o estoque de cada material toda vez que ocorrer a saída de material, ou seja preciso que toda vez que digitar o código de um material e de baixa(saída) desse material o formulário atualize o estoque do referido material. Sera que vc pode me ajudar?

    Obs: Estou programando em Excel VBA.

    1. zeplanilha disse: Responder

      Netinho,

      Uma planilha de estoque exige uma programação mais elaborada. Uma solução simples seria o lançamento das entradas e saídas, informando sempre o quantitativo relacionado ao código (material). Em uma tabela paralela, você cria uma fórmula ou mesmo uma tabela dinâmica para fazer o somatório dos valores, obtendo assim o saldo em estoque.

  9. Netinho Sillva disse: Responder

    Bom dia Zezinho,

    Gostaria de informar que deu certo, já estou com o programa rodando. Obrigado!

  10. Paulo disse: Responder

    Zé,
    Muito legal o formulário, porém, preciso de um ajuste…
    O tipo de cadastro que vou fazer, será de materiais, ou seja, digitarei os códigos e mais alguns dados.
    Ao digitar o código do material, gostaria que sua descrição aparecesse no campo ao lado, é possível incluir?

    Obrigado!

    1. zeplanilha disse: Responder

      Olá Paulo,

      É possível sim. Utilize o comando WorksheetFunction.VLookup(codigo.Value, Range(“A1:B50”), 2, False) que funciona como a função PROCV. Nos parâmetros que citei no exemplo, ele irá procurar o código que foi selecionado no campo “codigo” na planilha da célula A1 até B50, estando o código na primeira coluna e a descrição na segunda. Configure para que sempre que o campo de código tenha uma alteração (Private Sub codigo_Change), ele execute o código

  11. Athayde disse: Responder

    Bom dia! Zezinho

    Tenho uma planilha com a sheet chamada (agenda) na coluna A nome, na coluna B telefone e na coluna C email.
    Como faço pra visualizar essa informação atualizada da planilha ao abrir um userform1. Ė possivel?

    1. zeplanilha disse: Responder

      Athayde,

      Defina o valor do campo como o valor da célula que contem essa informação dentro da inicialização do teu form (NomedoUserform_Initialize). Se teu campo está nomeado como “telefone” e a informação está na aba (sheet) “Dados” e célula B2, temos:

      Telefone = Sheets(“Dados”).Range(“B2”).Value

  12. Carlos disse: Responder

    Bom dia!

    Muito boa sua planilha….Porém, gostaria de saber se tem alguma forma de não mostrar a pasta que os dados estão sendo armazenados, no momento em que vc clica no botão enviar, ou seja o formulário permanecer sempre na Planilha Menu. Tem como?

    1. zeplanilha disse: Responder

      Olá Carlos,

      É possível sim. Adicione o seguinte código após a abertura da função:

      Private Sub botao_enviar_Click()
      Application.ScreenUpdating = False

      Não se esqueça de voltar ao normal no final da função:

      Application.ScreenUpdating = True
      End Sub

  13. Pedro disse: Responder

    Boa noite! tenho uma tabela criada na sheet faturas e outra com o nome nova fatura onde insiro os dados para a criaçao de novas faturas. esses dados vao para a sheet faturas mas ficam sempre na mesma linha. Como resolvo isso? criei atraves de copiar colar, nao de programação direta no vba Será que me pode ajudar?

    1. zeplanilha disse: Responder

      Olá Pedro,

      Utilize o vba indicado nesse download. O comando “linhavazia = WorksheetFunction.CountA(Range(“A:A”)) + 1” procura uma linha vazia e não sobrescreve a última inserção.

  14. edileuza disse: Responder

    olá
    Gostaria de saber por que as informacões do userform para de gravar na planilha ?
    tava gravando bem de repente nao grava mais

    1. zeplanilha disse: Responder

      Olá Edileuza,

      Certifique se as macros estão rodando. Veja nosso tutorial HABILITANDO MACRO

  15. Thiago Gomes disse: Responder

    OI Zé, preciso apenas inserir mais uma coluna com o nome Valor… Como Faço?

    1. zeplanilha disse: Responder

      Thiago, é simples.

      Crie um campo com o nome “valor” e acrescente o seguinte código:
      Cells(linhavazia, 5).Value = valor.Value

      Ao entender a lógica da programação, é possível criar inúmeros campos adicionais.

  16. rogerio rocha disse: Responder

    Estou precisando de um programa em excel para entrada de dados e formar um banco de dados onde eu possa tirar relatorios do mesmo.
    tenho que entrar com os seguintes dados:
    data – nome1 – nome2- quant.- local 1 – local 2 – local 3
    voce tem algum programa nesse sentido

    desde já agradeço

    1. zeplanilha disse: Responder

      Rogerio,

      Esse formulário do tutorial trabalha exatamente do jeito que você precisa. Para tirar relatório, você deve utilizar a planilha onde os dados são inseridos.

  17. Tiago disse: Responder

    Estou fazendo planilha de cadastro e banco de dados via macro apenas.
    É possível que ele não grave repetido?
    Desde já agradeço.

    1. zeplanilha disse: Responder

      Tiago,

      Use o comando .Find antes de registrar.
      Se o “Find” encontrar algo, informa com um alert que já está cadastrado e não executa o registro.

  18. Itamar disse: Responder

    Bom dia! Muito didático! Curti seu trabalho!

    Gostaria de usar no form de cadastro a seguinte idéia…

    tenho uma combobox, por exemplo, com uma quantidade de itens já adicionados e vindos de uma planilha.
    no meio do meu cadastro, percebi q não há um item, e necessito atualizar de imediato.

    gostaria de abrir um formulário com um duplo clique no combobox em questão…
    pode dar uma ideia? gostaria de fazer com dblclick mesmo, mas não consegui… dessa forma da certo? tem alguma outra??
    obrigado!

    1. zeplanilha disse: Responder

      Itamar,

      Faça um botão extra para permitir o cadastro. Depois de cadastrado, um botão de atualizar para carregar as informações novamente.

  19. Mariana disse: Responder

    Boa tarde!
    Não consigo alterar o nome do botão de Inserir NOVO cliente. Como faço isso? Tem alguma macro bloqueada?

    1. zeplanilha disse: Responder

      Mariana,

      Clique com o botão direito em cima do botão, depois clique com o botão esquerdo em cima do texto.

  20. Fábio disse: Responder

    Excelente tutorial! Para criar novos campos para preenchimento é necessário inserir uma Private Sub caixa nome_Change() na parte superior do código? Abs

    1. zeplanilha disse: Responder

      Fábio,

      Veja a dúvida enviada por Thiago Gomes nos comentários

  21. Fábio disse: Responder

    Olá, sempre que removo a caixa combo “Plano” o botão para abrir o cadastro não funciona mais…

    1. zeplanilha disse: Responder

      Fábio,

      Apenas retirar o combobox “Plano” não é suficiente se não deseja que essa informação seja inserida. Você deverá retirar algumas linhas do código referentes à essa caixa das funções UserForm_Initialize() e botao_enviar_Click().

  22. Ruth disse: Responder

    Estou com um problema, depois que a primeira inserção é feita, as outras estão indo sempre na mesma linha…… e não na debaixo….. como faço?

    1. zeplanilha disse: Responder

      Ruth,

      Na planilha disponível para download isso não ocorre. Em sua programação a fórmula abaixo conta o número de linhas e adiciona a informação na linha seguinte.

      linhavazia = WorksheetFunction.CountA(Range(“A:A”)) + 1

  23. Ruth disse: Responder

    Obrigada Matheus….

    Deu certo!!!!!

  24. Thais disse: Responder

    Boa tarde!
    Como posso deixar uma célula de preenchimento obrigatório, sendo que:
    – esta regra deve passar a valer para outros usuários da planilha
    Cheguei até a parte que: se tal célula estiver em branco a planilha não irá fechar e não irá salvar até ai esta ok.

    – há como deixar uma exceção para um usuário/autor ?
    Para que eu possa fechar a planilha e assim esta regra passa a valer para o usuário que eu encaminhar a planilha ?

    Grata.
    Thais

    1. zeplanilha disse: Responder

      Olá Thais,

      Esse exemplo de formulário não contempla perfil de usuário. Se deseja uma customização de planilha, entre em contato conosco para enviarmos um orçamento.

  25. Andre disse: Responder

    Ela funciona em rede?

    1. zeplanilha disse: Responder

      Andre,

      É uma planilha normal, que funciona em rede com as limitações de compartilhamento.

  26. Mauricio disse: Responder

    Boa noite. Gostei da sua planilha, é muito simples e funcional. Mas falta um pequeno detalhe, como fazer para alterar um registro que já existe usando o VBA?

    1. zeplanilha disse: Responder

      Olá Maurício,

      Devido a sua simplicidade, esse modelo não contempla a edição de dados.

  27. Max disse: Responder

    Incrível esse mundo do Excel! Eu sou novo nesse universo e estou fascinado. Seu site tem sido de grande ajuda! Caso possa, tenho uma duvida sobre o userform que não encontrei resposta em canto nenhuma da web. Tenho uma planilha com as seguintes colunas: DATA, FORMA DE PAGAMENTO e VALOR. Todos os dias eu preencho 5 linhas dessa planilha com as formas de pagamento. Ou seja, coloco a data, a forma de pagamento e o valor numa linha. Repito a data, coloco a forma de pagamento e o valor na linha seguinte e assim por diante. Estou tentando fazer um formulário para alimentar essa planilha com os seguintes campos: DATA – valor, DÉBITO – valor, CRÉDITO – valor, DINHEIRO – valor, VOUCHER – valor. Ai quando eu enviar ele preenche 5 linhas na planinha, repetindo a data. Muito difícil de fazer? Se for possível ajudar. Obrigado!

  28. Max disse: Responder

    Obrigado Matheus. Essa Planilha de Gastos me ajudou muito com outras partes do sisteminha que estou tentando fazer. Sobre minha pergunta anterior consegui resolver do seguinte modo:

    Public Sub INSERCAO()
    Dim ULTIMALINHA As Long
    ULTIMALINHA = Cells(Rows.Count, 1).End(xlUp).Row + 1

    Dim ULTIMALINHA1 As Long
    ULTIMALINHA1 = Cells(Rows.Count, 1).End(xlUp).Row + 2

    (código recordado para não atrapalhar a exibição)

    End Sub

    Assim ele repete a data nas linhas seguintes e insere as informações adicionais :D. Meu problema agora é só com o formato da data. Se eu coloco, por exemplo 050716 ao invès dele formatar como 05/07/2016 ele está invertendo dia e mês e colocando 07/05/2016.

    1. zeplanilha disse: Responder

      Max,

      Que bom que a planilha do zeplanilha te ajudou!

      Sobre a data, defina como “texto” a coluna que recebe as informações inseridas pelo userform. Se ainda não funcionar, aplique um Format(variavel,”dd/mm/aaaa”) no seu código VBA. Consegui resolver esse problema aplicando essas duas sugestões.

  29. Marcus disse: Responder

    Quando eu penso que sei algo de Excel, descubro que to longe ainda 🙁

  30. Guilherme disse: Responder

    Boa tarde.
    Qual o comando para que em uma textbox de um fomulário apareça um range de horários pré-determinados ? É necessário criar uma planilha excel com estes horários e depois inseri-lo no formulário ?

    1. zeplanilha disse: Responder

      Olá Guilherme,

      Para inserir dados em um listbox, utilize o comando “With” direto em seu form. Veja como eu inseri as informações de plano deste formulário:

      With combo_plano
      .AddItem “Plano 01”
      .AddItem “Plano 02”
      .AddItem “Plano 03”
      End With

  31. Fernando disse: Responder

    Teria como inserir um código para que, ao cadastrar (“Informação Inserida com Sucesso!”), ao volta para o Menu, Limpasse todos os campos?

    1. zeplanilha disse: Responder

      Fernando,

      Uma das alternativas possíveis é fechar o formulário e exibí-lo novamente. Insira o código abaixo no final da função botao_enviar_Click().

      Unload Me
      InserirDados.Show

  32. Erick disse: Responder

    Cara nao sei o que está acontecendo, quando eu fiz o codigo inicialmente deu tudo certo! agora quando adiciono mais um cliente ele escreve os dados em cima do primeiro! nao entendo o porque! o codigo está exatamente igual!
    quando cadastro ele fica subscrevendo os dados do primeiro e nao sai da linha 1..

  33. Erick disse: Responder

    Cara, pode deixar ahhaha ja resolvi, o problema era por que minha tabela começava na coluna B e nao na A, sendo assim a contagem sempre estava nula!

  34. Paulo Cesar disse: Responder

    Prezado Zé, gostaria de agradecer pela atitude de disponibilizar e compartilhar seus conhecimentos, que provavelmente foram adquiridos a força de muito esforço e estudo.
    Muito bom esse exemplo de inserção de dados via userform, tenho certeza que é algo que ajudou e facilitou o trabalho de muitos.
    Uma dúvida: por que toda vez que clicamos no botão limpar a lista dos planos duplicam? Só retorna ao normal se fecharmos o formulário e abri-lo novamente…

    1. zeplanilha disse: Responder

      Olá Paulo,
      Boa observação! Já fiz uma modificação na planilha para corrigir esse bug. Por gentileza, faça o download novamente.
      Abraço!

  35. Wlademir Huber disse: Responder

    Muito boa essa planilha, como faço para proteger a aba de dados para que a mesma não sofra alterações?

    1. zeplanilha disse: Responder

      Que bom que gostou da planilha Wlademir!

      Deixe sua planilha travada para edição (No menu “revisão”, clique em “Proteger Planilha”). No início do código do botão enviar (Private Sub botao_enviar_Click()), insira um código para destravar a planilha:
      ActiveSheet.Unprotect ("Sua senha")
      Após o formulário ter inserido os dados na planilha e antes de fechar, insira o código para travar novamente:
      ActiveSheet.PROTECT Password:="Sua senha"

      1. Wlademir Huber disse: Responder

        Muito obrigado, me ajudou muito no meu projeto.

        1. zeplanilha disse: Responder

          Que bom Wlademir!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

SUBIR