O que é um formulário VBA e quando vale a pena usá-lo
Quando a tua folha de Excel já tem dezenas de clientes e comesças a cansar-te de escrever linha a linha, um formulário VBA transforma esse trabalho numa janela com campos amáveis: escreves o nome, o telefone e o email em caixas próprias, carregas num botão Guardar e o registo aparece na folha Clientes sem teres de a tocar.
O UserForm é uma janela desenhada por ti dentro do VBA, com os controlos que quiseres. No fim deste artigo vais saber desenhá-la, lê-la e gravá-la numa folha, com validação de campos vazios. Funciona em Excel para Microsoft 365, Excel 2024, 2021, 2019 e 2016 para Windows, e em Excel para Mac; não funciona em Excel para a web nem em Excel Mobile.
A diferença entre o formulário da folha e o UserForm
O comando Datos > Formulário abre uma janela rápida que só lê e grava numa tabela bem formatada, com campos pré-definidos (não se podem inventar) e sem cores, sem logotipo, sem validações à medida. Dá para o trivial.
O UserForm do VBA serve precisamente para tudo o que o de Datos não faz: desenhas a janela, decides que controlos entram, colocas as etiquetas em português ou em inglês, validas o que faz falta e gravas exatamente onde queres. É código, mas é código que escreve por ti.
O que precisas de ter pronto antes de começar
Para que o VBA apareça no teu Excel, a separador Programador tem de estar visível. Por defeito está oculta. Abre o livro onde vais trabalhar e guarda-o já como livro com macros, senão perdes o código ao fechar.
Pasos para preparar o livro:
- Clica em Arquivo > Opções > Personalizar barra de ferramentas (Personalizar cinta de opciones).
- Na lista da direita, marca a caixa Programador e clica em Aceptar.
- Volta a Archivo > Guardar como e escolhe o formato Libro de Excel habilitado para macros (.xlsm). Dá-lhe o nome Clientes.xlsm.
- Carrega em Alt+F11 para abrir o editor de VBA. Se a janela abriu, está tudo certo.
As peças do UserForm: rótulos, caixas de texto, botões e listas
Quando inseres um UserForm (Insertar > UserForm no editor VBA), aparece a Caixa de Ferramentas com os controlos que arrastas para a janela. Cada um serve para uma coisa:
[Selecionar objeto]
[Label] -> rótulo de texto fixo
[TextBox] -> caixa onde o utilizador escreve
[CommandButton] -> botão que executa código
[ComboBox] -> lista desplegable fechada
[ListBox] -> lista aberta de opções
[CheckBox] -> caixa de confirmação (sim/não)
[OptionButton] -> botão de opção (escolher um)
[Frame] -> moldura para agrupar controlos
[TabStrip] -> separadores dentro do formulário
[MultiPage] -> páginas com separadores
[ScrollBar] -> barra deslizante
[SpinButton] -> botões + e –
[Image] -> imagem (logotipo, ícone)
Um formulário de cadastro costuma juntar três Label (rótulos) com três TextBox (campos), um ComboBox para categorias e três CommandButton: Guardar, Limpar e Fechar.
As propriedades que vês no painel da esquerda
No editor VBA tens a janela Propriedades (se não a vês, carrega em F4). Cada controlo tem lá uma lista de ajustes. Os três que importam agora:
(Orden alfabético)
- (Name) é como o VBA chama o controlo no código. Se escreves
txtNome.Text, o VBA procura um TextBox cujo Name étxtNome. - Caption é o texto que se vê (só existe em Label, CommandButton, Frame, etc.; os TextBox não têm Caption porque o seu conteúdo é o que o utilizador escreve).
- BackColor, Font e Height/Width são cosméticos.
Criar um formulário de cadastro de clientes passo a passo
O livro de trabalho é Clientes.xlsm com uma folha Clientes. Vamos preenchê-la à medida que o formulário avança.
Hoja inicial:
| A | B | C | |
|---|---|---|---|
| 1 | Nome | Telefone |
Desenhar o formulário e dar nome a cada controlo
Pasos para montar o UserForm:
- No editor VBA (Alt+F11), vai a Insertar > UserForm. Aparece uma janela vazia.
- Ajusta a Caption do formulário (na janela Propriedades) para Cadastro de clientes.
- Da Caixa de Ferramentas, arrasta um Label e um TextBox lado a lado. Repete três vezes.
- Para cada TextBox, muda o Name na janela Propriedades: o primeiro passa a txtNome, o segundo a txtTelefone, o terceiro a txtEmail.
- Em cada Label, escreve a Caption: "Nome:", "Telefone:", "Email:".
- Arrasta três CommandButton para baixo. Os respetivos Names ficam btnGuardar, btnLimpar e btnFechar, com as Captions Guardar, Limpar e Fechar.
O formulário pronto tem seis controlos com nome e três com legenda. Não escreves ainda nenhum código: o aspeto é o que vês ao correr o UserForm com F5.
Carregar o formulário a partir da folha
Para abrir o formulário sem entrar no VBA todas as vezes, crias uma macro normal num módulo e atribuis-lhe um botão na folha.
Pasos para o botão da folha:
- Volta ao Excel (sem fechar o editor).
- Vai a Programador > Inserir > Controles de formulario > Botão e desenha-o numa zona livre da folha Clientes.
- Quando o Excel pedir a macro, escolhe Nuevo (ou cria um módulo com Alt+F11 > Insertar > Módulo e escreve o Sub à mão):
Sub MostrarFormulario()
UserForm1.Show
End Sub
Sub CerrarFormulario()
Unload UserForm1
End Sub
- Clica com o botão direito no botão da folha > Asignar macro > escolhe MostrarFormulario.
Agora, ao carregar no botão da folha, a janela Cadastro de clientes aparece.
O código do botão Guardar linha a linha
Clica duas vezes sobre o formulário (ou sobre o botão btnGuardar) para abrir a janela de código. Escolhe UserForm no objeto da esquerda e btnGuardar no evento da direita. Dentro do Private Sub btnGuardar_Click() / End Sub escreve:
Private Sub btnGuardar_Click()
Dim fila As Long
Dim hoja As Worksheet
Set hoja = Worksheets("Clientes")
fila = hoja.Cells(Rows.Count, 1).End(xlUp).Row + 1
hoja.Cells(fila, 1).Value = txtNome.Text
hoja.Cells(fila, 2).Value = txtTelefone.Text
hoja.Cells(fila, 3).Value = txtEmail.Text
MsgBox "Guardado"
txtNome.Text = ""
txtTelefone.Text = ""
txtEmail.Text = ""
txtNome.SetFocus
End Sub
A linha Cells(Rows.Count, 1).End(xlUp).Row + 1 sobe pela coluna A até à última célula escrita e soma 1: é a primeira linha vazia. Grava os três campos nas colunas 1, 2 e 3 da folha.
Para o botão Limpar:
Private Sub btnLimpar_Click()
txtNome.Text = ""
txtTelefone.Text = ""
txtEmail.Text = ""
txtNome.SetFocus
End Sub
E para o Fechar:
Private Sub btnFechar_Click()
Unload Me
End Sub
Prova com dados reais (Ana Silva, 911234567, ana@exemplo.pt) e clica em Guardar. Na folha Clientes deves ver:
| A | B | C | |
|---|---|---|---|
| 1 | Nome | Telefone | |
| 2 | Ana Silva | 911234567 | ana@exemplo.pt |
Com validação de campos vazios
Sem validação, um clique em Guardar com o formulário vazio deixa a folha cheia de linhas em branco. Acrescenta o teste no início do btnGuardar_Click:
Private Sub btnGuardar_Click()
Dim fila As Long
Dim hoja As Worksheet
If Trim(txtNome.Text) = "" Then
MsgBox "Preenche o nome"
txtNome.SetFocus
Exit Sub
End If
If Trim(txtEmail.Text) = "" Then
MsgBox "Preenche o email"
txtEmail.SetFocus
Exit Sub
End If
Set hoja = Worksheets("Clientes")
fila = hoja.Cells(Rows.Count, 1).End(xlUp).Row + 1
hoja.Cells(fila, 1).Value = txtNome.Text
hoja.Cells(fila, 2).Value = txtTelefone.Text
hoja.Cells(fila, 3).Value = txtEmail.Text
MsgBox "Guardado"
txtNome.Text = ""
txtTelefone.Text = ""
txtEmail.Text = ""
txtNome.SetFocus
End Sub
Trim apaga espaços para que um campo só com espaços também conte como vazio. Exit Sub sai do botão antes de gravar.
Carregar um ComboBox com categorias guardadas na folha
O cadastro ganha uma categoria (Eletrónica, Papelaria, Ferramentas) escolhida numa lista desplegable. As categorias vivem na folha para não estarem à mão no código.
Cria a folha Categorias e preenche:
| A | |
|---|---|
| 1 | Categoria |
| 2 | Eletrónica |
| 3 | Papelaria |
| 4 | Ferramentas |
Arrasta um ComboBox para o formulário, dá-lhe o Name cmbCategoria e Caption "Categoria:". No código do formulário usa o evento UserForm_Initialize (carrega ao abrir):
Private Sub UserForm_Initialize()
Dim hoja As Worksheet
Dim rng As Range
Dim celda As Range
Set hoja = Worksheets("Categorias")
Set rng = hoja.Range("A2:A" & hoja.Cells(Rows.Count, 1).End(xlUp).Row)
cmbCategoria.Clear
For Each celda In rng
If celda.Value <> "" Then
cmbCategoria.AddItem celda.Value
End If
Next celda
If cmbCategoria.ListCount > 0 Then cmbCategoria.ListIndex = 0
End Sub
Cada AddItem acrescenta uma opção visível ao utilizador. Para gravar a categoria escolhida, acrescenta no btnGuardar_Click, depois da linha que grava o email:
hoja.Cells(fila, 4).Value = cmbCategoria.Value
E atualiza os cabeçalhos da folha:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Nome | Telefone | Categoria | |
| 2 | Ana Silva | 911234567 | ana@exemplo.pt | Eletrónica |
Três erros que fazem o formulário não arrancar
Estes três tropeções acontecem a quem começa. Cada um tem um sintoma, uma causa e um conserto.
Por que razão o Alt+F11 não abre nada
Sintoma: carregas em Alt+F11 e o Excel não abre o editor de VBA. Causa: a separador Programador não está visível, e o atalho Alt+F11 não foi ativado na instalação. Conserto: ativa a separador em Archivo > Opciones > Personalizar barra de herramientas, marca a caixa Programador e clica Aceptar. Volta a carregar em Alt+F11.
Por que o livro deixa de ter macros ao guardar
Sintoma: fechaste o livro, reabriste e os botões não fazem nada; o ficheiro tem extensão .xlsx. Causa: gravar como .xlsx strip-a todas as macros. Conserto: abre Archivo > Guardar como e escolhe Libro de Excel habilitado para macros (.xlsm). Da próxima vez que abrires o livro, clica em Habilitar contenido na barra amarela por cima da folha para que as macros corram.
Por que o botão Guardar dá "Sub ou Function não definida"
Sintoma: clicas Guardar e aparece a mensagem "Erro de compilação: Sub ou Function não definida" ou "Sub ou Function não definida" ao executar. Causa: chamaste uma macro cujo nome não existe (por exemplo, UserForm_Initialize mal escrito, ou um nome de controlo com typo). Conserto: confirma o Name de cada controlo na janela Propriedades e usa exatamente esse nome no código. Se o erro aponta para UserForm_Initialize, verifica que o evento está em UserForm e não num módulo comum.
O que não consegues fazer com um formulário VBA
Um UserForm VBA não corre em Excel para a web, em Excel Mobile nem em Excel para tablets. Em Mac corre, mas só com a versão de desktop. Tudo o que precisas para usar formulários VBA é, portanto, um Excel de secretária com o motor VBA ativo e o livro gravado como .xlsm.
Outra limitação vem do próprio VBA: é uma linguagem antiga e o seu ambiente de edição (Alt+F11) não tem depurador moderno. Para trabalhos com milhares de controlos ou janelas muito complexas, o VBA começa a ressentir-se. Para além disso, abrir um livro com macros pede confirmação ao utilizador, o que pode confundir quem partilha o ficheiro.
Por fim, se o teu cadastro passar de algumas dezenas de milhares de registos, considera mover os dados para uma base de dados a sério (Access, SQL Server, SQLite) e ligar o Excel a ela só para entrar dados — é o mesmo formulário, mas sem o limite de 1.048.576 linhas do Excel a pesar.
O que já sabes fazer com formulários VBA
- Ativar a separador Programador e abrir o editor com Alt+F11.
- Desenhar um UserForm com Label, TextBox, CommandButton e ComboBox.
- Ler o que o utilizador escreve nas caixas e gravar em células da folha Clientes.
- Validar campos vazios antes de gravar e mostrar mensagens com
MsgBox. - Limpar as caixas e fechar o formulário com
Unload Me.
O próximo passo natural é abrir o cadastro para editar e apagar registos: um botão "Procurar" que lê a folha e preenche as caixas com os dados do cliente escolhido, e um botão "Apagar" que remove a linha depois de confirmar com MsgBox vbYesNo.
Datos comprobados en octubre de 2026.
Dudas al crear un formulario VBA en Excel
1. ¿Qué ejemplos prácticos puedo hacer con un formulario en Visual Basic dentro de Excel?
Un UserForm en VBA sirve para crear pantallas a medida dentro de Excel: una ficha para dar de alta clientes con sus datos, una ventana de inicio de sesión que pida usuario y contraseña, o un formulario de ventas donde eliges el producto en un Cuadro combinado y la cantidad en un Cuadro de texto. Empieza con algo pequeño, como un formulario con dos TextBox y un botón Aceptar que vuelque lo escrito en la hoja.
2. ¿Cómo descargo un formulario de VBA ya hecho para Excel y empiezo a modificarlo?
En el propio editor de VBA (Alt+F11) tienes la opción Archivo > Importar archivo para cargar formularios guardados como .frm por otros usuarios. También puedes abrir cualquier libro .xlsm, extraer sus UserForms con el Explorador de proyectos y copiarlos a tu archivo. Antes de usar uno descargado, revisa el código en la ventana Código del formulario para entender qué hace cada botón y qué hojas necesita.
3. ¿Cómo hago un formulario de inicio de sesión en Excel con VBA?
Crea un UserForm con dos TextBox (usuario y contraseña, este segundo con PasswordChar = * para ocultar lo escrito) y un botón Aceptar. En el evento Click del botón compara lo tecleado con los datos guardados en una hoja auxiliar (por ejemplo, en A1 y A2) usando un If y, si coincide, oculta el formulario con Unload Me; si no, muestra un MsgBox con el aviso de error. Recuerda guardar el libro como .xlsm para que la macro se conserve.
Fuentes
- MicrosoftLAMBDA — documentación oficialconsultado el 13/10/2026
- MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 13/10/2026
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 13/10/2026
- MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 13/10/2026
- MicrosoftExcel y Access — documentación oficialconsultado el 13/10/2026