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

49 pensamientos en “Formularios en VBA

  1. DANIEL RUIZ

    Buen dia, me gustaria saber como pueo aprender a manejar macros. Gracias.

  2. 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

  3. Arturo

    Hola tengo una duda, quisiera abrir un cuadro de dialogo tipo abrir pero que al seleccionar el archivo me entregue el path de ubicacion del archivo y lo pueda guardar en una variable,en vez de abrir el archivo, como podría hacer esto ?

    1. Moisés Ortíz Autor

      Hola Arturo, eso lo logras con la siguiente sentencia:
      path = Application.GetOpenFilename()

  4. rbalbo

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

  5. Maura

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

  6. Pablo

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

  7. Victor Luna

    Perfecto, muchas gracias.

  8. Marcos

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

  9. Luis

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

  10. Miguel Soto

    Hola
    Tengo una Duda….. Me gustaría que al abrir el archivo de excel Saliera al tamaño del Formulario y no muestre nada más.
    Hay una macro para esto ?
    Gracias

    1. Moisés Ortíz Autor

      Hola Miguel, carga el formulario desde el evento Workbook_Open.

      Private Sub Workbook_Open()
      Formulario.Show
      End Sub

  11. Jesus Mendoza

    Hola Moisés primero que nada muchas felicidades muy claros y eficientes tutoriales, mi pregunta es como logro hacer que mi formulario flote sobre las celdas a si mismo siga mi celda activa ?

    1. Moisés Ortíz Autor

      Hola Jesus, la verdad no me queda claro a lo que te refieres con que “flote sobre las celdas”, pero los formularios son ventanas independientes que al momento de activarse dejan al resto de ventanas en segundo plano.

  12. jimmy carranza

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

  13. 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

      1. Isra

        Moises, me has ayudado bastante, iba a preguntar lo mismo y agradezco la respuesta ya estoy consultado ese y mas tutoriales, la verdad excelente trabajo y gracias por compartir tus conocimientos, saludos.

  14. Angelo

    Excelente Formulario mi estimado Moises, una consulta como hago para que me balla guardando la informacion linea,tras linea…es decir al introducir varias personas con sus correspondientes datos.

  15. 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

  16. 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.

  17. 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

  18. 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

  19. ElioSanchezG

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

  20. 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

  21. Isaac Jesús Romero Cruz

    Hola. Me ha parecido muy interesante lo que escriben. ¿Cómo puedo hacer uso de variables globales? Si quisiera hacer una serie de formularios, a modo de encuestas, e ir guardando los resultados obtenidos (su calificación) para al final poder pegarlos en celdas de excel. He intentado con el uso de clases, pero no sé como hacer variables globales.
    Si alguien sabe, le estaría muy agradecido.
    Gracias

    1. Moisés Ortíz Autor

      Hola Isaac, para declarar variables globales utiliza el siguiente código dentro de un módulo:
      Public variable As Integer

      Importante: este código debe estar fuera de cualquier función o subrutina.

  22. diego

    hola como puedo hacerle para que el formulario tome la informacion de excel y me la muestre en los cmpos 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.

  23. 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

  24. Juan Rivera

    Como hago para colocar una lista desplegable en un formulario y cuando elija una de las opciones la almacene en la celda correspondiente?

    1. Moisés Ortíz Autor

      Hola Juan, debes utilizar al control Cuadro combinado. No tengo un ejemplo utilizando formularios, pero puedes ver el funcionamiento de dicho control en una hoja de Excel en el siguiente artículo:
      http://exceltotal.com/cuadros-combinados-en-excel/

  25. Rey

    si en el formulario yo capturo un folio,,, como me puedo asegurar que si llego a capturar el mismo folio. no me deje hacerlo

    1. Moisés Ortíz Autor

      Hola Rey, tendrás que crear una lista de todos los folios previamente creados y antes de insertar la información del formulario validar la existencia de dicho folio. En el siguiente artículo puedes ver cómo se ejecuta un código de validación al pulsar el botón Aceptar:
      http://exceltotal.com/formulario-de-captura-de-datos-en-excel/

  26. 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.

  27. 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

  28. Oscar Loor

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

  29. pablo

    Hola quisiera saber como hacer para que al abrir el formulario tenga un boton que me envie a otro formular.

    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

  30. JESUS ALEJANDRO

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