Upload
eder-legua
View
234
Download
1
Embed Size (px)
Citation preview
7/24/2019 Userforms en Excel Con VBA
1/5
Userforms en Excel con VBA
Los userformsproporcionan un mecanismo para disear y desarrollar interfaces grfica 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.
Importamoslos nombres de los equipos de alguna fuente web donde estuvieran
disponibles.
Convertimoseste conjunto de datos en tabla, dotndola de un nombre como Clubes.
Creamos la tablaCalendario en la que se irn 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:
http://www.cs.us.es/blogs/i1eg2013/files/2013/03/Userforms2.pnghttp://www.cs.us.es/blogs/i1eg2013/files/2013/03/Userforms1.png7/24/2019 Userforms en Excel Con VBA
2/5
A partir de ah, vamos arrastrando controles del cuadro de herramientas al
userform. En nuestro caso, dos cuadros combinadospara los equipos local y visitante,
dos botones de opcinpara indicar si el partido ya se ha disputado yreas de
textocon contr oles de nmeropara ir introduciendo el nmero de goles del equipo local
y visitante, adems del botncorrespondiente para aceptar la insercin del partido. Junto
a ello, las pertinentes etiquetas para mostrar al usuario qu informacin introducir o
seleccionar en cada control.
Pinchando sobre el formulario y los distintos controles se activa la informacin
correspondiente a las Propiedadesdel elemento seleccionado en cada momento, donde
establecemos datos como el nombre para el formulario o control, el color de fondo, etc.
Como comentamos, resulta interesante establecer convencionespara los nombres de los
controles, como empezar por Frmen el caso de los formularios, por Cmblos cuadros
combinados,Optlos botones de opcin, Txtlas reas de texto, Numlos controles de
nmero, Btnlos botones o Lbllas etiquetas (del inglsLabel), entre otras. De esta forma
podremos encontrar rpidamente el nombre de nuestro control en cuanto comencemos a
escribir en el cdigo sus primeras letras siguiendo estas convenciones.
http://www.cs.us.es/blogs/i1eg2013/files/2013/03/Userforms3.png7/24/2019 Userforms en Excel Con VBA
3/5
Ya tenemos un primer formulariocon una determinada, pero debemos llamarlo desde
nuestra hoja Excel. Para ello, podemos volver a la hoja Excel e insertar en un botn de
formulario o alguna otra forma que nos permita asignar la accin correspondiente a abrir
el formulario. Elegimos Insertar > Forma > Rectngulo redondeado, quedando como
vemos en la imagen del principio de este post. Con botn derecho sobre esta forma
podemos establecer el texto que aparecer, y tambin Asignar macro, donde podemos
poner un nombre a la accin que se lanzar desde nuestra forma redondeada, y pulsar en
Nuevo. Esto nos llevar al cdigo VBA, digamos subrutina (Sub), donde podemos
indicar como accin que se nos muestre nuestro formulario. Como vemos, lo realiza el
procedimiento o mtodo Showsobre nuestro userform FrmCalendario.
Si guardamos lo que llevamos hecho, cerramos la ventana de Visual Basic y volvemos a
nuestra hoja, ya podemos pulsar en el botn 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 vdeo 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 RowSourceel 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 nmero, pulsando doble click sobre cada uno de los controles nos
crea directamente una seccin de cdigo, de nuevo Sub, donde podemos indicar el
cdigo a ejecutar cada vez que se modifica el valor del control de nmero (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.
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
http://www.cs.us.es/blogs/i1eg2013/files/2013/03/Userforms5.pnghttp://www.cs.us.es/blogs/i1eg2013/files/2013/03/Userforms4.png7/24/2019 Userforms en Excel Con VBA
4/5
cabo este proceso, podemos apoyarnos en la funcionalidad degrabacin de macrosde
Excel, y ver el cdigo que se generara si realizamos el proceso de forma automtica.
De esta forma, no necesitaremos conocer a priori los detalles de todo el cdigo a
generar, aunque siempre sea recomendable conocerlo en la mayor medida posible.
En cualquier caso, la grabacin facilitar la tarea. Seguimos los pasos:
1. Iniciamos la grabacin de la macro.
2. Ya iniciada, nos situamos en la cabecera de la tabla, en la primera columna.
3. Pulsamos la combinacin de teclas Ctrl + Flecha abajo, situndonos 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 queramos.6. Paramos la macro con el botn de Stop.
El texto generado contendr instrucciones que nos interesar, y otras que veremos
que no nos son de utilidad.
As, podemos intuir que la primera instruccin 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 instruccin no realiza esto con carcter general, sino que nos sita en una
posicin fija, cuando nuestro botn de Aceptar deber desplazarse una posicin
abajo, variando conforme vayamos aadiendo registros. Por ello, esa instruccin no
nos servir, y en lugar emplearemos Acti veCell .Offset(1, 0).Select. En cualquier caso,podemos copiar el cdigo generado por la macro, volver a nuestro userform en la
ventana de VBA, hacer doble click sobre el botn Aceptar y pegar el cdigo. A partir
de ah, vamos usando offset para desplazarnos y los valores de las celdas y controles
para escribir la informacin del formulario en las celdas correspondientes. El resultado
es el que vemos a continuacin:
http://www.aulaclic.es/excel2007/t_18_1.htmhttp://www.aulaclic.es/excel2007/t_18_1.htmhttp://www.aulaclic.es/excel2007/t_18_1.htmhttp://www.cs.us.es/blogs/i1eg2013/files/2013/03/Userforms6.pnghttp://www.aulaclic.es/excel2007/t_18_1.htm7/24/2019 Userforms en Excel Con VBA
5/5
Para el botn cancelar, lo nico que tenemos que hacer es volver al userform, dar
doble click al botn Cancelar, y en el cdigo indicar que se cancele la operacin,
cerrando el formulario mediante su descarga (unload):
http://www.cs.us.es/blogs/i1eg2013/files/2013/03/Userforms8.pnghttp://www.cs.us.es/blogs/i1eg2013/files/2013/03/Userforms7.png