sábado, 3 de diciembre de 2011

Crear un formulario (UserForm) en Excel I.

Hace mucho tiempo que estoy buscando el momento para poder subir al blog una explicación de como crear un UserForm (o sea un formulario) desde el Editor de VBA de Excel, esto es , vamos a generar un formulario personalizado.
Lo primero es tener claro cómo será este formulario, y para no complicar demasiado el asunto, he decidido que nuestro formulario tendrá dos ComboBox (también conocido como Cuadro combinado) y un TextBox (o Cuadro de texto), así como un CommandButton (o Botón de comando), además de algunas Labels (o Etiquetas).
La idea, para no dispersarme demasiado es crear la estructura de un Formulario en el que aparezca junto a una etiqueta un Cuadro combinado, y debajo de estos una nueva etiqueta junto a un Cuadro de texto, acabando el formulario con un Botón de comando que ejecute una acción. Quedará algo así:

Crear un formulario (UserForm) en Excel.


La idea es que mediante uno de los ComboBox podamos elegir una de las hojas del libro activo, mientras que con el segundo Combobox seleccionemos de un listado dado uno de sus elementos, para que una vez añadido un valor en el TextBox, al presionar el CommandButton copie dicho valor en la hoja correspondiente y en el lugar asociado al elemento del segundo Combobox
Veamos cual es nuestro Libro de trabajo, sobre el cual va a funcionar nuestro Userform. En este Libro existen tres hojas ('España', 'México' y 'Colombia'),y una más ('Consolidado'), donde se Consolidan las anteriores; cada hoja (cada país) tiene un listado de clientes único para todas ellas, que corresponden a un número de unidades de un determinado producto y colocadas en las mismas referencias:


Como ya conocemos nuestro Libro de trabajo, podemos empezar a crear el formulario, para ello abriremos el Editor de VBA presionando Alt+F11, y buscaremos el Menú Insertar > UserForm:

Crear un formulario (UserForm) en Excel.


Al insertar el UserForm se abrirá una ventana con los Controles que podemos insertar en nuestro formulario, para esto sólo es necesario hacer click sobre el Control elegido (para nosotros 'Etiqueta','Cuadro de texto','Cuadro combinado' y 'Botón de comando', e ir agregándolos en el espacio del formulario. Nos aprovecharemos del punteado (del 'grid') para alinear lo mejor posible, en primera instancia, los distintos controles añadidos, hasta conseguir:

Crear un formulario (UserForm) en Excel.


La primera parte está lista, aunque la podemos (y debemos) personalizar más, ya que las distintas etiquetas y botones serían mucho más descriptivas si, en lugar de 'label1', 'label2', 'label2' o 'CommandButton1', aparecieran nombres algo más identificativos a lo que se refiere ('País', 'Cliente', 'Unidades' o 'Insertar').
Estas modificaciones las conseguiremos buscando la ventana de Propiedades de cada una de ellas, en concreto la Propiedad Caption:

Crear un formulario (UserForm) en Excel.


Una vez cambiada la propiedad Caption para 'label1', 'label2', 'label2' y 'CommandButton1' nuestro formulario tendría este aspecto:

Crear un formulario (UserForm) en Excel.


Ya podemos dar por finalizado la primera parte de creación de nuestro formulario, el aspecto es el que queríamos... claro, que ahora queda lo más importante, darle poder!!!.
Para asignarle alguna funcionalidad a este formulario (y que haga lo que queríamos), tendremos que añadir cierto código VBA a cada uno de los Controles añadidos, en concreto a los dos ComboBox, al TextBox y al CommandButton, para ello haremos doble click sobre cada uno de ellos, lo que nos abrirá una ventana de código donde poder incluir nuestras instrucciones y procedimientos...
Lo que dejaré para la siguiente entrada.

8 comentarios:

  1. Muy buena la explicación de UserForm, lástima que supere muchísimo mis conocimientos de Excel, de Macros no se en absoluto nada, pero guardare su explicación muy bien ya que al final para mi hobby estoy convencido que me hará mucha falta.
    Un Cordial Saludo.
    Lázaro.

    ResponderEliminar
  2. Muy bueno, gracias por compartir tantos conocimientos, eso te hace grande.

    ResponderEliminar
  3. Hola podrían ayudarme tengo que hacer un formulario para ingresar datos en una hoja, pero lo que necesito es que el formulario este en la hoja 1 y en la hoja 2 ingrese los datos, pero no me queda no se de programación y ya tiene muchos años que aprendi a hacer eso y por no usarlo se olvida. Necesito que el formulario tenga dos logotipos de la empresa. Me podrias dar unas muestras de como hacerlo o unas imágenes para hacerlo directamente conforme lo vaya diseñando. Agradeceria la ayuda.

    ResponderEliminar
    Respuestas
    1. Hola Ezequiel,
      mostrar el UserForm en la Hoja1 es sencillo, basta asociarlo a un botón de esa hoja o a algún evento dentro de la ventana de código de la Hoja1.

      Para llevar los datos a la Hoja2, bastaría añadir la hoja en las sentencias correspondientes, por ejemplo, para llevar el valor del TextBox1 a la celda A1 de la Hoja2:
      Hoja2.Range("A1").Value=TextBox1.Value

      Para insertar imágenes (Logos) inserta en el UserForm el Control 'Imagen' y dentro de las propiedades de ese control busca 'Picture', te mostrará un buscador donde seleccionar la imagen.

      Un cordial saludo

      Eliminar
    2. hola te podría enviar el archivo que tengo y me pongas que es lo que estoy haciendo mal, si debe llevar imágenes, pero no me acuerdo como.

      Eliminar
    3. Hola Ezequiel,
      puedes enviarlo a
      excelforo@gmail.com
      con la explicación concreta del problema.
      Saludos

      Eliminar
  4. Buenas tardes disculpen cuales son las características de salida de resultados con UserForm ayuda por favor es de urgencia

    ResponderEliminar
    Respuestas
    1. Hola Alejandra,
      a qué tipo de características de salida te refieres??

      Los datos devueltos desde un Userform son del tipo en que hayan sido definidos en la programación...
      si un TextBox lo has definido como Double, devolverá un número decimal, o si ha sido String será texto, etc...
      Saludos

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.