Como criar um formulário de entrada de dados automatizado no Excel VBA
Siga este tutorial para criar um formulário personalizado de entrada de dados automatizado em VBA.
Visual Basic é uma linguagem excelente para automatizar tarefas repetitivas no Excel. Imagine elevar sua automação criando formulários de usuário altamente funcionais que também parecem organizados para os usuários finais.
Os formulários de usuário no VBA apresentam uma tela em branco; você pode projetar e organizar os formulários para atender às suas necessidades a qualquer momento.
Neste guia, você aprenderá a criar um formulário de entrada de dados baseado no aluno que captura informações relevantes em planilhas Excel vinculadas.
Criando um formulário de usuário com Excel VBA
Abra uma nova pasta de trabalho do Excel e execute algumas etapas preliminares antes de começar a criar seu formulário de entrada de dados.
Salve sua pasta de trabalho com o nome desejado; não se esqueça de alterar o tipo do arquivo para uma pasta de trabalho habilitada para macro do Excel.
Adicione duas planilhas a esta pasta de trabalho, com os seguintes nomes:
- Planilha1: página inicial
- Planilha2: Banco de dados de alunos
Sinta-se à vontade para alterar esses nomes de acordo com suas necessidades.
Na planilha Home, adicione um botão para controlar a macro do formulário do usuário. Vá para a guia Desenvolvedor e clique na opção Botão da lista suspensa Inserir . Coloque o botão em qualquer lugar da folha.
Depois de colocar o botão, renomeie-o. Clique com o botão direito nele e clique em Novo para atribuir uma nova macro para mostrar o formulário.
Insira o seguinte código na janela do editor:
Sub Button1_Click()UserForm.ShowEnd Sub
Assim que as planilhas Home e Student Database estiverem prontas, é hora de criar o formulário do usuário. Navegue até a guia Desenvolvedor e clique em Visual Basic para abrir o Editor. Alternativamente, você pode pressionar ALT+F11 para abrir a janela do editor.
Clique na guia Inserir e selecione UserForm.
Um formulário de usuário em branco está pronto para uso; uma caixa de ferramentas que acompanha é aberta junto com o formulário, que contém todas as ferramentas essenciais para projetar o layout.
Na caixa de ferramentas, selecione a opção Quadro. Arraste-o para o formulário do usuário e redimensione-o.
Na opção (nome) você pode alterar o nome do quadro. Para mostrar o nome no front-end, você pode alterar o nome na coluna Legenda.
Em seguida, selecione a opção Rótulo na caixa de ferramentas e insira dois rótulos dentro deste quadro. Renomeie o primeiro como Número de inscrição e o segundo como ID do aluno.
A mesma lógica de renomeação se aplica; altere os nomes através da opção Legendana janela Propriedades. Certifique-se de selecionar o respectivo rótulo antes de alterar seu nome.
Em seguida, insira duas caixas de texto próximas às caixas de rótulos. Eles serão usados para capturar as entradas do usuário. Altere os nomes de duas caixas de texto através da coluna (Nome) na janela Propriedades. Os nomes são os seguintes:
- Caixa de texto1: txtApplicationNo
- Caixa de texto2: txtStudentID
Projetando o Quadro de Detalhes do Aluno
Insira um quadro vertical e adicione 10 rótulos e 10 caixas de texto. Renomeie cada um deles da seguinte maneira:
- Rótulo3: Nome
- Rótulo4: Idade
- Rótulo5: Endereço
- Rótulo6: Telefone
- Rótulo7: Cidade
- Rótulo8: País
- Label9: Data de nascimento
- Rótulo10: CEP
- Label11: Nacionalidade
- Rótulo12: Gênero
Insira as caixas de texto correspondentes próximas a esses rótulos; insira duas (ou mais) caixas de optionbutton da caixa de ferramentas do formulário do usuário ao lado do rótulo gênero . Renomeie-os como Male e Female (junto com Custom), respectivamente.
Projetando o quadro de detalhes do curso
Adicione outro quadro vertical e insira seis rótulos e seis caixas de texto correspondentes a cada rótulo. Renomeie os rótulos da seguinte maneira:
- Label13: Nome do curso
- Label14: ID do curso
- Label15: Data de início da inscrição
- Label16: Data de término da inscrição
- Label17: Duração do curso
- Label18: Departamento
Projetando o quadro de detalhes de pagamento
Insira um novo quadro; adicione um novo rótulo e renomeie-o como "Deseja atualizar os detalhes de pagamento?" Insira dois botões de opção; renomeie-os para Sim e Não.
Da mesma forma, adicione um novo quadro contendo dois rótulos adicionais e duas caixas de combinação. Renomeie os rótulos da seguinte maneira:
- Label19: Pagamento recebido
- Label20: Modo de pagamento
Projetando o painel de navegação
No quadro final, adicione três botões da caixa de ferramentas, que conterão o código para execução dos formulários.
Renomeie os botões da seguinte maneira:
- Botão1: Salvar detalhes
- Botão2: Limpar formulário
- Botão3: Sair
Escrevendo o código do formulário automatizado: botão Salvar detalhes
Clique duas vezes no botão Salvar detalhes. No módulo seguinte, insira o seguinte código:
Private Sub CommandButton2_Click()‘declare the variables used throughout the codesDim sht As Worksheet, sht1 As Worksheet, lastrow As Long'Add validations to check if character values are being entered in numeric fields.If VBA.IsNumeric(txtApplicationNo.Value) = False ThenMsgBox "Only numeric values are accepted in the Application Number", vbCriticalExit SubEnd IfIf VBA.IsNumeric(txtStudentID.Value) = False ThenMsgBox "Only numeric values are accepted in the Student ID", vbCriticalExit SubEnd IfIf VBA.IsNumeric(txtAge.Value) = False ThenMsgBox "Only numeric values are accepted in Age", vbCriticalExit SubEnd IfIf VBA.IsNumeric(txtPhone.Value) = False ThenMsgBox "Only numeric values are accepted in Phone Number", vbCriticalExit SubEnd IfIf VBA.IsNumeric(Me.txtCourseID.Value) = False ThenMsgBox "Only numeric values are accepted in Course ID", vbCriticalExit SubEnd If'link the text box fields with the underlying sheets to create a rolling databaseSet sht = ThisWorkbook.Sheets("Student Database")'calculate last populated row in both sheetslastrow = sht.Range("a" & Rows.Count).End(xlUp).Row + 1'paste the values of each textbox into their respective sheet cellsWith sht.Range("a" & lastrow).Value = txtApplicationNo.Value.Range("b" & lastrow).Value = txtStudentID.Value.Range("c" & lastrow).Value = txtName.Value.Range("d" & lastrow).Value = txtAge.Value.Range("e" & lastrow).Value = txtDOB.Value.Range("g" & lastrow).Value = txtAddress.Value.Range("h" & lastrow).Value = txtPhone.Value.Range("i" & lastrow).Value = txtCity.Value.Range("j" & lastrow).Value = txtCountry.Value.Range("k" & lastrow).Value = txtZip.Value.Range("l" & lastrow).Value = txtNationality.Value.Range("m" & lastrow).Value = txtCourse.Value.Range("n" & lastrow).Value = txtCourseID.Value.Range("o" & lastrow).Value = txtenrollmentstart.Value.Range("p" & lastrow).Value = txtenrollmentend.Value.Range("q" & lastrow).Value = txtcourseduration.Value.Range("r" & lastrow).Value = txtDept.ValueEnd Withsht.Activate'determine gender as per user's inputIf optMale.Value = True Then sht.Range("g" & lastrow).Value = "Male"If optFemale.Value = True Then sht.Range("g" & lastrow).Value = "Female"'Display a message box, in case the user selects the Yes radio buttonIf optYes.Value = True ThenMsgBox "Please select the payment details below"Else:Exit SubEnd IfEnd Sub
Se você não tiver certeza do que significam partes ou parte do código, não se preocupe. Explicaremos isso detalhadamente na próxima seção.
Código de formulário automatizado explicado
As caixas de texto conterão uma mistura de texto e valores numéricos, por isso é essencial restringir a entrada do usuário. O Número da inscrição, ID do aluno, Idade, Telefone, ID do curso e Duração do curso deverá conter apenas números, enquanto o restante conterá texto.
Usando uma instrução IF , o código aciona pop-ups de erro se o usuário inserir um caractere ou valor de texto em qualquer um dos campos numéricos.
Como as validações de erro estão em vigor, você precisa vincular as caixas de texto às células da planilha.
As variáveis lastrow calcularão a última linha preenchida e armazenarão os valores nelas para uso dinâmico.
Finalmente, os valores são colados das caixas de texto na planilha Excel vinculada.
Limpar códigos de formulário e botão de saída
No botãolimpar, você precisa escrever o código para limpar os valores existentes no formulário do usuário. Isso pode ser feito da seguinte maneira:
With Me.txtApplicationNo.Value = "".txtStudentID.Value = ""..txtName.Value = "".txtAge.Value = "".txtAddress.Value = "".txtPhone.Value = "".txtCity.Value = "".txtCountry.Value = "".txtDOB.Value = "".txtZip.Value = "".txtNationality.Value = "".txtCourse.Value = "".txtCourseID.Value = "".txtenrollmentstart.Value = "".txtenrollmentend.Value = "".txtcourseduration.Value = "".txtDept.Value = "".cmbPaymentMode.Value = "".cmbPayment.Value = "".optFemale.Value = False.optMale.Value = False.optYes.Value = False.optNo.Value = FalseEnd With
No botão sair, insira o seguinte código para fechar o formulário do usuário.
Private Sub CommandButton5_Click()Unload MeEnd Sub
Como última etapa, você precisa inserir alguns trechos finais de código para criar os valores suspensos para as caixas de combinação (dentro dos quadros de pagamento).
Private Sub UserForm_Activate()With cmbPayment.Clear.AddItem "".AddItem "Yes".AddItem "No"End WithWith cmbPaymentMode.Clear.AddItem "".AddItem "Cash".AddItem "Card".AddItem "Check"End WithEnd Sub
Automação VBA torna o trabalho mais fácil
VBA é uma linguagem multifacetada que serve a muitos propósitos. Os formulários de usuário são apenas um aspecto do VBA – há muitos outros usos, como consolidação de pastas de trabalho e planilhas, mesclagem de várias planilhas do Excel e outros usos úteis de automação.
Não importa o objetivo da automação, o VBA está à altura da tarefa. Se você continuar aprendendo e praticando, não há nenhum aspecto do seu fluxo de trabalho que você não possa melhorar.