Formularios

Formularios VBA en Excel: cómo crearlos y usarlos

octubre 16, 2026 Tuto Excel 13 min read
Formularios VBA en Excel: cómo crearlos y usarlos

Un UserForm de VBA es una ventana flotante que se abre dentro de Excel con cuadros de texto, listas desplegables, casillas y botones: el lector rellena ahí lo que necesita y el código lo pasa a la hoja. En este artículo montamos uno sobre una hoja de pedidos: el formulario pregunta nombre, ciudad, cena, fechas, si viene con acompañante, cuántos invitados y el importe, y al pulsar Aceptar escribe una fila nueva en la hoja. Funciona en Excel 2007, 2010, 2013, 2016, 2019, 2021, 2024 y Microsoft 365 para Windows y Mac, y también en Excel para la web, donde se puede abrir el editor y revisar el código aunque los UserForms solo se ejecutan en el escritorio.

Qué es un UserForm de VBA y para qué te sirve en una hoja

Imagina la hoja Pedidos de un restaurante: cada día caen cinco o diez reservas y alguien tiene que escribir a mano la fecha, el nombre del cliente, la ciudad, la cena, si viene con acompañante, cuántos invitados son y el importe. Si lo haces a mano, en un mes se te cuelan tres ciudades mal puestas, dos importes sin decimales y un buen número de filas vacías. El UserForm es la ventana que evita eso: en lugar de escribir celda a celda, abres una ficha con sus campos ya listos (una lista de ciudades, un desplegable de cenas, casillas para las fechas, un botón Sí/No para el acompañante, un cuadro numérico para el importe) y el código se encarga de llevar cada cosa a su columna.

La gracia es que el formulario controla la entrada: el usuario solo elige lo que le enseñas, no puede inventarse una ciudad que no estaba en la lista ni dejar el importe en blanco. Tú, cuando vuelves a la hoja, ves filas completas, ordenadas y con los mismos datos, sin tener que revisar nada.

El editor de VBA: dónde se escribe el código del formulario

El editor de Visual Basic (VBA) es el programa dentro de Excel donde se escriben las macros y los formularios. No es una herramienta aparte: vive dentro de Excel y se abre con una combinación de teclas.

  1. Abre Excel y ve a Archivo > Opciones > Personalizar cinta de opciones.
  2. En la columna derecha, marca la casilla Programador y pulsa Aceptar. La pestaña Programador aparece al final de la cinta.
  3. Pulsa Alt+F11 para abrir el editor de VBA. Verás un panel a la izquierda con el nombre de tu libro (Proyecto) y a la derecha la zona en blanco donde se escribe el código.
ArchivoOpcionesPersonalizar cinta de opcionesProgramador

Una vez dentro, el menú Insertar tiene dos opciones que vas a usar: Módulo (una hoja en blanco para escribir Sub y Function) y UserForm (un formulario visual para dibujar controles).

El Cuadro de herramientas y la ventana Propiedades

Cuando insertas un UserForm, el editor abre automáticamente dos paneles:

El Cuadro de herramientas se abre desde el menú Ver > Cuadro de herramientas si no lo ves. Cada icono es un control: haces doble clic o lo arrastras al formulario para colocarlo. La ventana Propiedades (tecla F4) muestra todo lo que se puede cambiar de cada control: su Name (cómo se llama desde VBA, sin tildes ni espacios) y su Caption (lo que ve el usuario, aquí sí con tildes y espacios). Las dos primeras cosas que tocarás siempre son esas.

Los controles del UserForm uno por uno

Control Para qué sirve Propiedad que lleva el dato
Label (Etiqueta) Texto fijo que describe un campo Caption
TextBox (Cuadro de texto) Donde el usuario escribe a mano Text
ListBox (Cuadro de lista) Lista visible de la que se elige uno o varios List / Value
ComboBox (Cuadro combinado) Lista desplegable que se abre al pulsar Text / Value
CheckBox (Casilla) Casilla independiente para marcar o desmarcar Value (True/False)
OptionButton (Botón de opción) Botón circular; varios juntos forman una elección única Value
Frame (Marco) Recuadro que agrupa controles, sobre todo OptionButton (contenedor)
SpinButton (Botón de número) Dos flechas arriba/abajo para subir o bajar un número Value
CommandButton (Botón) Botón para ejecutar una acción Caption

La regla práctica: si el campo tiene opciones fijas, usa ListBox, ComboBox o CheckBox; si es texto libre, TextBox; si es una cantidad, TextBox con un SpinButton al lado.

Montar un formulario de pedido paso a paso

Antes de tocar el editor, prepara la hoja que va a recibir los datos. Es una hoja normal con encabezados en la primera fila, igual que cualquier tabla.

A1fx**Fecha**
A B C D E F G
1 Fecha Nombre Ciudad Cena Acompañante Invitados Importe
2 15/03/2026 Lucía Madrid Vegetariana Sí 2 48,00
3 15/03/2026 Pablo Lima Carnes No 4 96,00
Pedidos
Nota: En este artículo los argumentos se separan con punto y coma (=SI(A2>10;"Alto";"Bajo")). En Excel configurado con punto decimal (México, Estados Unidos) el separador es la coma.

Dibujar y nombrar los controles del formulario

  1. En el editor de VBA, abre el formulario con Insertar > UserForm. Ponle el nombre frmPedido en la ventana Propiedades (F4) y cambia su Caption a "Nuevo pedido".
  2. Inserta una Label con Caption "Nombre" y un TextBox debajo. Cámbiale el Name al TextBox por txtNombre.
  3. Inserta una Label "Ciudad" y un ListBox con Name lstCiudad.
  4. Inserta una Label "Cena" y un ComboBox con Name cboCena.
  5. Inserta una Label "Fechas disponibles" y tres CheckBox: chkViernes, chkSabado, chkDomingo.
  6. Inserta una Label "¿Viene con acompañante?", un Frame con Caption "Acompañante", y dentro del Frame dos OptionButton: optSi y optNo.
  7. Inserta una Label "Importe" y un TextBox con Name txtImporte, y a su derecha un SpinButton con Name spnImporte y Min=0, Max=500.
  8. Inserta tres CommandButton: cmdAceptar (Caption "Aceptar"), cmdLimpiar (Caption "Limpiar") y cmdCancelar (Caption "Cancelar").
Cuidado: El Name no puede tener tildes ni espacios: txtImporte sí, txtImporte Total no. Es el nombre que escribirás en el código.
Comprueba: El formulario tiene seis campos visibles (Nombre, Ciudad, Cena, Fechas, Acompañante, Importe) y tres botones abajo. La Name de cada control coincide con la lista anterior.

El código que muestra el formulario y deja los campos listos

Cada formulario tiene un módulo de código asociado: haz doble clic sobre el formulario en el editor y se abre. Ahí escribes un Sub que prepara los campos justo antes de mostrarlo: vacía los TextBox, rellena la ListBox y el ComboBox con AddItem, desmarca los CheckBox y deja el importe a 0.

Sub MostrarFormulario()
    frmPedido.txtNombre.Text = ""
    frmPedido.lstCiudad.Clear
    frmPedido.lstCiudad.AddItem "Madrid"
    frmPedido.lstCiudad.AddItem "Lima"
    frmPedido.lstCiudad.AddItem "Santiago"
    frmPedido.lstCiudad.AddItem "Bogotá"
    frmPedido.cboCena.Clear
    frmPedido.cboCena.AddItem "Vegetariana"
    frmPedido.cboCena.AddItem "Carnes"
    frmPedido.cboCena.AddItem "Pescados"
    frmPedido.chkViernes.Value = False
    frmPedido.chkSabado.Value = False
    frmPedido.chkDomingo.Value = False
    frmPedido.optSi.Value = False
    frmPedido.optNo.Value = True
    frmPedido.txtImporte.Text = "0"
    frmPedido.Show
End Sub
Nota: Para que las dos hojas (formulario y libro) se entiendan, crea el Sub MostrarFormulario en un Módulo normal del libro (Insertar > Módulo). Lo lanzarás desde un botón de la hoja.

Pasar lo escrito en el formulario a la hoja Pedidos

Ahora el código que copia cada control a su columna. Doble clic sobre el botón Aceptar y se abre el Sub cmdAceptar_Click.

Sub cmdAceptar_Click()
    Dim fila As Long
    fila = Worksheets("Pedidos").Cells(Rows.Count, 1).End(xlUp).Row + 1
    Worksheets("Pedidos").Cells(fila, 1).Value = Date
    Worksheets("Pedidos").Cells(fila, 2).Value = Me.txtNombre.Text
    Worksheets("Pedidos").Cells(fila, 3).Value = Me.lstCiudad.Value
    Worksheets("Pedidos").Cells(fila, 4).Value = Me.cboCena.Text
    Worksheets("Pedidos").Cells(fila, 5).Value = IIf(Me.optSi.Value, "Sí", "No")
    Worksheets("Pedidos").Cells(fila, 6).Value = Me.spnImporte.Value
    Worksheets("Pedidos").Cells(fila, 7).Value = CDbl(Me.txtImporte.Text)
    MsgBox "Pedido guardado en la fila " & fila
End Sub

Para Limpiar, el Sub cmdLimpiar_Click llama a MostrarFormulario pero sin mostrar el formulario, y para Cancelar, el Sub cmdCancelar_Click cierra la ventana con Unload Me.

Sub cmdLimpiar_Click()
    Me.txtNombre.Text = ""
    Me.lstCiudad.Clear
    Me.cboCena.Clear
    Me.chkViernes.Value = False
    Me.chkSabado.Value = False
    Me.chkDomingo.Value = False
    Me.optNo.Value = True
    Me.txtImporte.Text = "0"
End Sub

Sub cmdCancelar_Click()
    Unload Me
End Sub
A4fx15/03/2026
A B C D E F G
1 Fecha Nombre Ciudad Cena Acompañante Invitados Importe
2 15/03/2026 Lucía Madrid Vegetariana Sí 2 48,00
3 15/03/2026 Pablo Lima Carnes No 4 96,00
4 15/03/2026 Carmen Bogotá Pescados Sí 3 72,00
Pedidos
Comprueba: Al pulsar Aceptar aparece el mensaje con el número de fila y, al volver a la hoja Pedidos, la nueva fila aparece al final con todos los datos en su columna.

Ejecutar el formulario desde un botón en la hoja

Un formulario que solo se abre desde el editor no sirve. Lo normal es tener un botón visible en la hoja para lanzarlo.

  1. Vuelve a la hoja Pedidos y abre Insertar > Formas > Rectángulo redondeado.
  2. Dibuja el botón en la esquina superior derecha, escribe "Nuevo pedido" y pulsa Enter.
  3. Clic derecho sobre la forma, elige Asignar macro y selecciona MostrarFormulario.
  4. Asegúrate de que la pestaña Programador > Modo Diseño está desactivada (el icono aparece sin relleno). Si está activado, el botón solo funciona en modo edición.
ProgramadorControlesModo Diseño

Sub MostrarFormulario()
    frmPedido.Show
End Sub
Comprueba: Al pulsar el botón "Nuevo pedido" se abre la ventana del formulario en el centro de la pantalla.

Mostrarlo con la macro ShowMyForm si la cinta se ha desconfigurado

Si la cinta de opciones se ha personalizado demasiado o el menú contextual no muestra Asignar macro, crea una macro específica y añádela a la Barra de herramientas de acceso rápido.

  1. Crea un Sub en un módulo: Sub ShowMyForm() / frmPedido.Show / End Sub.
  2. Abre Archivo > Opciones > Barra de acceso rápido.
  3. En "Elegir comandos de", selecciona Macros, elige ShowMyForm y pulsa Agregar >>.
  4. Pulsa Aceptar. La macro aparece como un icono en la barra superior.
ArchivoOpcionesBarra de acceso rápidoMacrosShowMyFormAgregar
Comprueba: Al pulsar el icono de la barra superior se abre el formulario aunque la cinta esté personalizada o la forma no funcione.

Por qué el formulario no abre o no escribe en la hoja

Tres fallos reales con los que te vas a topar la primera vez, y la forma de arreglarlos.

«Se ha producido el error 1004 en tiempo de ejecución» al escribir la fórmula

El error 1004 sale al asignar una fórmula a una celda desde VBA cuando usas el nombre en español o el punto y coma dentro de .Formula. La propiedad .Formula espera los nombres de función en inglés y la coma como separador.

Sub Total()
    Worksheets("Pedidos").Range("H2").Formula = "=G2*1,21"
End Sub
Cuidado: Si escribes =G2*1,21 con coma decimal en .Formula y tu Excel usa coma como separador de argumentos, la fórmula se interpreta mal. Cambia a FormulaLocal o usa el punto: =G2*1.21.

=G2*1,21
Cuidado: Si en .Formula pones =SUMA(G2:G10) (nombre en español), VBA lanza el error 1004. Cambia a =SUM(G2:G10) o usa .FormulaLocal con =SUMA(G2:G10).

=SUMA(G2:G10)

El botón de la cinta no muestra el formulario

Causa más común: guardaste el libro como .xlsx en lugar de .xlsm. Excel, al guardar en formato normal, borra todas las macros y los UserForms sin avisar más allá del cuadro de diálogo.

  1. Abre Archivo > Guardar como.
  2. En "Tipo", elige Libro de Excel habilitado para macros (*.xlsm).
  3. Confirma el aviso "Las macros se perderán" y guarda.
  4. Verifica también que la pestaña Programador está visible (sin ella no se ve el botón de macros).
ArchivoGuardar comoLibro de Excel habilitado para macros (*.xlsm)
Cuidado: Si abres un .xlsm descargado de internet, Excel bloquea las macros por seguridad. Ve a Archivo > Información > Habilitar contenido para desbloquarlas.

Los OptionButton del Frame no se marcan

Si los OptionButton no están dentro del Frame, VBA los trata como un único grupo en todo el formulario: al marcar uno se desmarcan todos, pero no porque sea un grupo, sino porque están sueltos. Para que formen un grupo, los tienes que arrastrar dentro del Frame.

  1. Selecciona el OptionButton con un clic.
  2. Córtalo con Ctrl+X.
  3. Clic dentro del Frame y pega con Ctrl+V. El control aparece dentro del marco.
  4. Repite con los demás OptionButton del grupo.
Comprueba: Pulsar optSi desmarca optNo y al revés, sin importar cuántos OptionButton haya fuera del Frame.

Lo que ya sabes hacer con un UserForm y el siguiente paso

  • Abrir el editor de VBA con Alt+F11 y mostrar la pestaña Programador.
  • Dibujar controles en un UserForm y cambiarles el Name y el Caption desde la ventana Propiedades (F4).
  • Escribir tres Sub: uno que prepara los campos y muestra el formulario, otro que pasa los datos a la hoja y un tercero que cierra la ventana con Unload Me.
  • Guardar el libro como .xlsm para que las macros no se pierdan al cerrar.
  • Lanzar el formulario desde un botón en la hoja o desde la Barra de acceso rápido.

El siguiente paso lógico es añadir una validación con If en cmdAceptar_Click para que el formulario no escriba la fila si, por ejemplo, el nombre está vacío, no se ha elegido ciudad o el importe no es un número. Con eso, el formulario deja de ser una ventana bonita para pasar a ser una herramienta que no deja pasar datos malos a la hoja.

Dudas al crear un formulario en Excel con VBA

1. ¿Cómo se hace un UserForm en Excel con VBA?

Abre el editor con Alt+F11, ve a Insertar > UserForm y dibuja los controles (cuadros de texto, botones, listas) desde el Cuadro de herramientas. Cada control se programa en su código de evento, por ejemplo el clic de un botón, donde escribes qué debe pasar al pulsar. En pocos minutos tienes un formulario básico listo para mostrar con UserForm1.Show.

2. ¿Hay algún PDF con ejemplos de código para UserForm en VBA?

No existe un único PDF oficial con ejemplos; en la documentación de learn.microsoft.com/es-es/office/vba encuentras la referencia completa de controles y eventos. La forma más práctica es guardar tus propios formularios como plantilla: guarda el libro como .xlsm y tendrás tus ejemplos reutilizables sin depender de descargas externas.

3. ¿Se puede hacer un formulario de entrada de datos totalmente automatizado en Excel?

Sí: el UserForm valida cada campo al perder el foco y, al pulsar el botón Guardar, ejecuta una macro que vuelca los datos en la hoja y limpia el formulario para el siguiente registro. Con un bucle For Each puedes recorrer controles y vaciarlos en una sola línea. El resultado es que el usuario solo escribe y pulsa un botón, sin tocar la hoja.

4. ¿Dónde puedo descargar UserForms ya hechos para Excel?

No conviene descargar formularios de sitios desconocidos: pueden incluir macros maliciosas. Lo seguro es crear el tuyo y guardarlo como .xlsm en tu carpeta de plantillas personal, así lo tienes disponible cada vez que abres Excel. Si necesitas ideas, en support.microsoft.com/es-es encontrarás ejemplos oficiales de Microsoft sobre controles y propiedades.

5. ¿Cómo se crea un UserForm en Excel paso a paso?

Pulsa Alt+F11 para abrir el editor VBA, elige Insertar > UserForm y aparecerá un formulario vacío con su Cuadro de herramientas. Arrastra al formulario los controles que necesites (Label, TextBox, CommandButton), ajusta sus propiedades en la ventana Propiedades (F4) y haz doble clic sobre un botón para escribir el código de su evento Click.

6. ¿Se puede tener un formulario en Excel sin usar VBA?

Sí, con el formulario clásico de Datos > Herramientas de datos > Formulario, que crea automáticamente una ventana de alta, baja y búsqueda a partir de los encabezados de tu tabla. Es más limitado que un UserForm, pero no requiere programar nada y sirve desde Excel 2010 hasta Microsoft 365. Solo tienes que tener la tabla bien definida y pulsar el botón.

Fuentes

  1. MicrosoftExcel – User Form – Microsoft Q&Aconsultado el 06/10/2026
  2. MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 06/10/2026
  3. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 06/10/2026
  4. MicrosoftReferencias relativas, absolutas y mixtas — documentación oficialconsultado el 06/10/2026
  5. MicrosoftUna celda vacía en una fórmula — documentación oficialconsultado el 06/10/2026