Vous êtes sur la page 1sur 5

Userforms en Excel con VBA

Los userforms proporcionan un mecanismo para diseñar y desarrollar interfaces gráfica de usuario basadas en VBA (Visual Basic for Applications) en Excel. Estuvimos creando en la clase anterior una interfaz como la siguiente para insertar registros en una tabla Excel.

la siguiente para insertar registros en una tabla Excel.  Importamos los nombres de los equipos

Importamos los nombres de los equipos de alguna fuente web donde estuvieran disponibles.

Convertimos este conjunto de datos en tabla, dotándola de un nombre como “Clubes“.

Creamos la tabla Calendario” en la que se irán almacenando los partidos disputados o planificados, con los datos que se muestran en la imagen.

Creamos el esqueleto de un userform inicial mediante la ficha del Programador >Visual Basic; desde la ventana de visual basic, menú Insertar > UserForm. De este modo nos aparece el userform con el contenido por defecto:

de visual basic, menú Insertar > UserForm . De este modo nos aparece el userform con

A partir de ahí, vamos arrastrando controles del cuadro de herramientas al userform. En nuestro caso, dos cuadros combinados para los equipos local y visitante, dos botones de opción para indicar si el partido ya se ha disputado yáreas de texto con controles de número para ir introduciendo el número de goles del equipo local

y visitante, además del botón correspondiente para aceptar la inserción del partido. Junto

a ello, las pertinentes etiquetas para mostrar al usuario qué información introducir o seleccionar en cada control.

Pinchando sobre el formulario y los distintos controles se activa la información correspondiente a las Propiedades del elemento seleccionado en cada momento, donde establecemos datos como el nombre para el formulario o control, el color de fondo, etc.

nombre para el formulario o control, el color de fondo, etc.  Como comentamos, resulta interesante

Como comentamos, resulta interesante establecer convenciones para los nombres de los controles, como empezar por Frm en el caso de los formularios, por Cmb los cuadros combinados, Opt los botones de opción, Txt las áreas de texto, Num los controles de número, Btn los botones o Lbl las etiquetas (del inglés Label), entre otras. De esta forma podremos encontrar rápidamente el nombre de nuestro control en cuanto comencemos a escribir en el código sus primeras letras siguiendo estas convenciones.

Ya tenemos un primer formulario con una determinada, pero debemos llamarlo desde nuestra hoja Excel. Para ello, podemos volver a la hoja Excel e insertar en un botón de formulario o alguna otra forma que nos permita asignar la acción correspondiente a abrir el formulario. Elegimos Insertar > Forma > Rectángulo redondeado, quedando como vemos en la imagen del principio de este post. Con botón derecho sobre esta forma podemos establecer el texto que aparecerá, y también Asignar macro…, donde podemos poner un nombre a la acción que se lanzará desde nuestra forma redondeada, y pulsar en Nuevo. Esto nos llevará al código VBA, digamos subrutina (Sub), donde podemos indicar como acción que se nos muestre nuestro formulario. Como vemos, lo realiza el procedimiento o método Show sobre nuestro userform FrmCalendario.

o método Show sobre nuestro userform FrmCalendario .  Si guardamos lo que llevamos hecho, cerramos

Si guardamos lo que llevamos hecho, cerramos la ventana de Visual Basic y volvemos a nuestra hoja, ya podemos pulsar en el botón y se abrirá nuestro formulario.

A partir de aquí, habrá que crear la funcionalidad correspondiente a los controles y botones del formulario, de forma similar a lo explicado en el vídeo anterior. Para ello, habrá que volver a la ventana de visual basic, y completar varios pasos:

Para asociar los datos que deben aparecer en los cuadros combinadosde los clubes, debemos seleccionar el cuadro correspondiente y, en Propiedades, escribir en RowSource el nombre de nuestra tabla con los equipos (en este caso Clubes).

Para actualizar los cuadros de texto con los goles seleccionados en los respectivos controles de número, pulsando doble click sobre cada uno de los controles nos crea directamente una sección de código, de nuevo Sub, donde podemos indicar el código a ejecutar cada vez que se modifica el valor del control de número (cada vez que pulse el usuario). En este caso, lo que hacemos es asignar el valor del control al área de texto, como se ve en la imagen, para cada control.

área de texto, como se ve en la imagen, para cada control. Continuando con nuestro ejemplo

Continuando con nuestro ejemplo de userforms VBA en Excel, lo que requerimos que haga nuestro formulario es insertar un registro en la tabla Calendario. Para llevar a

cabo este proceso, podemos apoyarnos en la funcionalidad de grabación de macros de

Excel, y ver el código que se generaría si realizamos el proceso de forma automática. De esta forma, no necesitaremos conocer a priori los detalles de todo el código a generar, aunque siempre sea recomendable conocerlo en la mayor medida posible. En cualquier caso, la grabación facilitará la tarea. Seguimos los pasos:

1. Iniciamos la grabación de la macro.

2. Ya iniciada, nos situamos en la cabecera de la tabla, en la primera columna.

3. Pulsamos la combinación de teclas Ctrl + Flecha abajo, situándonos en el último registro (fila) introducido.

4. Pulsamos la flecha hacia abajo, para escribir en la primera fila posterior a la tabla.

5. Escribimos cualquier texto en la celda, y nos desplazamos hacia la derecha con el tabulador, volviendo a escribir otro texto cualquiera en la siguiente celda. Como vemos, esto crea una nueva fila en la tabla, que es lo que queríamos.

6. Paramos la macro con el botón de Stop.

El texto generado contendrá instrucciones que nos interesará, y otras que veremos que no nos son de utilidad.

interesará, y otras que veremos que no nos son de utilidad. Así, podemos intuir que la

Así, podemos intuir que la primera instrucción selecciona la primera columna dentro de la cabecera de nuestra tabla, y la segunda hace el efecto de situarnos al final de esa columna de la tabla. Lo que queremos es desplazarnos debajo del último registro introducido, luego podremos desplazarnos hacia abajo una fila. Como vemos, la tercera instrucción no realiza esto con carácter general, sino que nos sitúa en una posición fija, cuando nuestro botón de Aceptar deberá desplazarse una posición abajo, variando conforme vayamos añadiendo registros. Por ello, esa instrucción no nos servirá, y en lugar emplearemos ActiveCell.Offset(1, 0).Select. En cualquier caso, podemos copiar el código generado por la macro, volver a nuestro userform en la ventana de VBA, hacer doble click sobre el botón Aceptar y pegar el código. A partir de ahí, vamos usando offset para desplazarnos y los valores de las celdas y controles para escribir la información del formulario en las celdas correspondientes. El resultado es el que vemos a continuación:

Para el botón cancelar, lo único que tenemos que hacer es volver al userform, dar

Para el botón cancelar, lo único que tenemos que hacer es volver al userform, dar doble click al botón Cancelar, y en el código indicar que se cancele la operación, cerrando el formulario mediante su descarga (unload):

Cancelar, y en el código indicar que se cancele la operación, cerrando el formulario mediante su