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

42 pensamientos en “Formularios en VBA

  1. DANIEL RUIZ

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

    Responder
  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

    Responder
  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 ?

    Responder
    1. Moisés Ortíz Autor

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

      Responder
  4. rbalbo

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

    Responder
  5. Maura

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

    Responder
  6. Pablo

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

    Responder
  7. Victor Luna

    Perfecto, muchas gracias.

    Responder
  8. Marcos

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

    Responder
  9. Luis

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

    Responder
  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

    Responder
    1. Moisés Ortíz Autor

      Hola Miguel, carga el formulario desde el evento Workbook_Open.

      Private Sub Workbook_Open()
      Formulario.Show
      End Sub

      Responder
  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 ?

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

      Responder
  12. jimmy carranza

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

    Responder
  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

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

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

    Responder
    1. Moisés Ortíz Autor

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

      Application.Visible =False
      UserForm1.Show

      Responder
  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

    Responder
    1. Moisés Ortíz Autor

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

      Responder
  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

    Responder
  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!

    Responder
    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

      Responder
  19. ElioSanchezG

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

    Responder
  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

    Responder
  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

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

      Responder
  22. diego

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

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

      Responder
  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?

    Responder
    1. Moisés Ortíz Autor

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

      Responder
  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?

    Responder
  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

    Responder
    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/

      Responder
  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

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

      Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>