Formularios en VBA

Los formularios en VBA no son más que un cuadro de diálogo de Excel donde podremos colocar controles que nos ayudarán a solicitar información del usuario. Podremos colocar cajas de texto, etiquetas, cuadros combinados, botones de comando, etc.

Crear un formulario en Excel

Los formularios de Excel son creados desde el Editor de Visual Basic donde debemos seleccionar la opción de menú Insertar y posteriormente la opción UserForm.

Formularios en VBA

Inmediatamente se mostrar un formulario en blanco y de igual manera podrás observar el Cuadro de herramientas:

Formulario en Excel 2010

Si no ves el Cuadro de herramientas puedes seleccionar el menú Ver y la opción Cuadro de herramientas.

Agregar controles al formulario

Para agregar un control al formulario debes seleccionarlo del Cuadro de herramientas y dibujarlo sobre el formulario. En mi formulario he agregado etiquetas y cuadros de texto así como un par de botones de comando:

UserForm en Excel

El texto de las etiquetas se modifica en la propiedad llamada Caption. Para realizar este cambio solamente selecciona el control y se mostrará la ventana de Propiedades donde podrás hacer la modificación.  De igual manera el texto desplegado en los botones de comando se modifica en su propiedad Caption.

Código para el botón Cancelar

El botón cancelar cerrará el formulario sin guardar la información capturada en ningún lugar. El código que debemos utilizar es el siguiente:

Private Sub CommandButton2_Click()
Unload Me
End Sub

Para agregar este código puedes hacer doble clic sobre el control. La sentencia “Unload Me” cerrará el formulario.

Código para el botón Aceptar

A diferencia del botón Cancelar, el botón Aceptar colocará los datos de las cajas de texto en las celdas A1, B1 y C1. El código utilizado es el siguiente:

Private Sub CommandButton1_Click()
Worksheets("Hoja1").Range("A1").Value = Me.TextBox1.Value
Worksheets("Hoja1").Range("B1").Value = Me.TextBox2.Value
Worksheets("Hoja1").Range("C1").Value = Me.TextBox3.Value
End Sub

Al pulsar el botón Aceptar se transferirán los valores de los controles TextBox hacia las celdas de la Hoja1.

Botón para abrir formulario

Para facilitar la apertura del formulario puedes colocar un botón ActiveX en la hoja con el siguiente código:

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

Probar el formulario

Observa cómo cada uno de los botones realiza la acción correcta al pulsarlos:

Ejemplo de formulario VBA en Excel

32 comentarios en “Formularios en VBA

  1. borja

    Este ejemplo de formulario en Excel me parece sensacional. Querría saber cómo diseñarías en el botón aceptar la información para que, al introducir varias personas con sus correspondientes datos se fuesen volcando en las filas siguientes. Gracias de antemano. Borja

  2. rbalbo

    Gracias. Siempre es interesante aprender y por suerte existen personas que comparten sus conocimientos.

  3. Maura

    Muy buen tutorial. básico y práctico, muchas gracias por compartir sus conocimientos

  4. Pablo

    Excelente gracias por compartir tus conocimientos. Tienes una pagina muy útil

  5. Victor Luna

    Perfecto, muchas gracias.

  6. Marcos

    Muy buenos articulos, larga vida a tu pagina web – que es muy completa-.

  7. Luis

    te agradezco tu aporte a los que no sabemos, muchas gracias. espero tengas algunos ejemplos.

  8. jimmy carranza

    excelente muchas gracias por dedicar este tiempo y compartir el conocimiento. Mil gracias

  9. Juan José

    Hola Moises, muchas gracias por el tutorial. Sólo una pregunta, yo quiero que el formulario permita ir creando una tabla con los registros. Es decir que el siguiente registro no se guarde en la fila 1 sino en la fila 2 (Nombre en A2, Teléfono en B2, y el email en C2) y luego el que sigue en la fila 3. ¿Cómo haría esto? Gracias

  10. Diego Armando Gomez Mancilla

    Buenas Tardes! Como hago para crear un formulario, pero cuando ejecute mi archivo de Excel solo me salga este formulario y que de ahí se deriven todas las opciones que quiero, ósea que no me muestre la hoja de Excel como tal sino solo el formulario. Muchas Gracias.

    1. Moisés Ortíz Autor

      Hola Diego, dentro del método Workbook_Open utiliza las sigiuentes instrucciones.

      Application.Visible =False
      UserForm1.Show

  11. Fabio

    Estimado Moises, descargue tu formulario, mi pregunta es como hago que el boton “Capturar” funcione como ejecutable, ya que al hacer click ahi, me aparece la opcion de editar

    1. Moisés Ortíz Autor

      Hola Fabio, en la ficha Programador debes asegurarte que el botón “Modo diseño” esté deshabilitado.

  12. José Manuel

    EXCELENTE APORTE, pero después de crear un formulario a través de tu ejemplo, no consigo que las celdas se desplacen para poder seguir introduciendo datos, cada vez que inserto un dato me lo sustituye por el anterior, mi pregunta es si hay algún código para poder ir insertando en una fila vacía y a la vez ordenando y evitando los duplicados. Gracias de antemano

  13. Jorge

    Hola Moises! Hay forma de identificar cuando un formulario es cerrado con el boton “close”, es decir, botón con la “X” que está arriba a la derecha. Una vez identificado que haga determinada accción. Desde ya muchas gracias!

    1. Moisés Ortíz Autor

      Hola Jorge, el código que voy a mostrar hace que el formulario NO sea cerrado después de pulsar el botón “X” sino que en su lugar se ejecute el código de otro objeto (ej. el botón Cancelar).
      Ya que cualquier usuario pulsa la “X” para cerrar el formulario, debe esperarse que el código a ejecutar se encargue de cerrar el formulario.

      Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
      If CloseMode = 0 Then
      ‘No cerrar el formulario ya que fue pulsada la “X”
      Cancel = True
      ‘Ejecutar el codigo del boton Cancelar
      btnCancelar_Click
      ‘ Asegurarse que el codigo del boton cancelar cierre el formulario
      End If
      End Sub

  14. ElioSanchezG

    ¡Qué excelente explicación junto con los “tips” adecuados al momento de realizar interfaces gráficas! Muchísimas gracias.

  15. Armando

    Hola Moises, excelentes todos tus artículos y sobre todo claros y fácil de entender, yo acabo de descubrir tu pagina y de verdad fue genial.
    Gracias, Armando

  16. diego

    hola como puedo hacerle para que el formulario tome la informacion de excel y me la muestre en los campos del formulario?

    1. Moisés Ortíz Autor

      Hola Diego, debes utilizar la propiedad .Value de los controles y asignarles el valor de la celda específica, por ejemplo:
      UserForm1.TextBox1.Value = Range(“A1″).Value

      Generalmente este código se inserta en el evento UserForm_Initialize.

  17. Abraham

    Hola! Excelente web….Como puedo hacer para que me guarde los datos directamente del formulario de ingresar datos….para que ya no me pida guardar los datos cuando cierre el libro de excel?

    1. Moisés Ortíz Autor

      Hola Abraham, puedes guardar los cambios desde código VBA con la siguiente instrucción:
      ActiveWorkbook.Save

  18. Andres

    Moises como hago para que varios usuarios utilicen el formulario en red y cada vez que uno inserte una fila se guarde y a la otra persona le quede abajo

    1. Moisés Ortíz Autor

      Hola Andrés, los archivos de Excel pueden ser leídos pero jamás editados al mismo tiempo por varios usuarios. Solo puede trabajar y guardar información una persona a la vez, así que en estricto sentido no tendrás ese problema.

  19. Eddie tabilo

    Hola Amigo quiero saber como lo puedo hacer para que el botón aceptar no ingrese información vacía a la planilla
    Gracias

    1. Moises Ortiz Autor

      Hola Eddie, solo debes validar el valor del control no esté vacío antes de insertar los valores en las celdas, por ejemplo:
      If TextBox1.Value = “” Then
      MsgBox “Debes ingresar un texto”
      Else
      Range(“A1″).Value = TextBox1.Value
      End

  20. Oscar Loor

    Excelente página en prácticamente 2 horas aprendes a manejarte en excel si ya has tenido conocimientos de programación

  21. pablo

    Hola quisiera saber como hacer para que al abrir el formulario tenga un boton que me envíe a otro formulario.

    1. Moisés Ortíz Autor

      Hola Pablo, dentro del botón (en el evento Click) utiliza el método .Show del otro formulario:
      Userform2.Show

      Y si quieres ocultar el primer formulario, entonces debes utilizar el método .Hide:
      UserForm1.Hide

  22. JESUS ALEJANDRO

    execelente aporte, gracias por tomarte el tiempo de explicar detalladamente los procesos.