Tema 5: Diseño de
formularios.
Crea aplicaciones de escritorio gracias a los formularios
de Excel
¿Para qué sirven los ¿Te imaginas recopilar la información de un censo
nacional en hoja y papel y luego digitalizar toda
formularios?
esta información en Excel para luego
realizar el análisis estadístico? La solución
de estos problemas puede ser la
implementación de un formulario.
Mantente en contacto si tienes alguna duda jguerreros@[Link]
5. Diseño de formularios. Excel Avanzado I
Los formularios son otros de los muchos objetos dentro de Excel y son cuadros de diálogo en donde
podremos recopilar información filtrada para después sistematizar nuestra información de manera
adecuada.
Los formularios sean quizás el objeto mas
importante dentro de Excel ya que es
increíble la cantidad de proyectos que se
pueden diseñar con ellos al integrar los
conocimientos anteriormente aprendidos.
Trata de estudiar estos conceptos
para facilitar la implementación de
los formularios en tus proyectos.
EJEMPLOS 01
Para motivarte en el estudio de esta parte del curso observa los siguiente proyectos realizados con
programacioón en VBA y formularios.
Algunas vistas del Sistema
de control de asistencias del
personal de enfermería en la
Clínica Ricardo Palma, fase
1. Este proyecto luego fue
llevado al desarrollo web de
aplicaciones.
Excel Avanzado I
Mi primer formulario
Espacio de trabajo 01
Para comenzar con el diseño de nuestros formularios es
importante establecer nuestro entorno o espacio de trabajo,
para ello simplemente realizamos los siguientes pasos:
En la barra de herramientas:
[Link] en Insertar
2. Clic en Userform
Inmediatamente podrán observar que se creo un formulario en blanco, este será nuestro espacio de
trabajo en donde colocaremos todos los elementos para que el formulario pueda estar listo para
ser programado.
Nota que se creo un nuevo objeto en la ventana de
proyectos al igual que cuando se crea un módulo.
VBA nos dá la posibilidad de crear tantos
formularios veamos necesarios para
que nuestro proyecto funcione. Para
ello es importante definir el
funcionamiento del mismo.
Cuadro de herramientas 02
Ya tenemos nuestro espacio de trabajo pero ahora
necesitamos de elementos y/o herramientas para
empezar con el diseño. Estas herramientas son llamadas
controles y las podemos encontrar dentro del elemento
llamado "Cuadro de herramientas" la cual podemos
activarla de la siguiente manera:
En la barra de herramientas:
[Link]
2. Cuadro de herramientas
Excel Avanzado I
Los controles de formularios mas usados son los siguientes.
Para usar un control dentro de nuestro espacio de
trabajo solo basta con arrastrar el elemento hacia
el espacio.
Excel Avanzado I
Ventana de propiedades 03
Como todos los objetos de Excel los formularios y sus controles
tienen propiedades los cuales pueden ser observados en la
ventana de propiedades. Para habilitar la ventana se puede seguir
los siguientes pasos:
En la barra de herramientas:
[Link]
2. Venta de propiedades o "F4"
Las propiedades cambian conforme se van seleccionando los
objetos.
Ejecutar un formulario 04
Existen varias formas de ejecutar un formulario. La primera de ellas es mediante los
los comandos
comandos de
de
depuración y ejecución:
Otra forma es llamando a la propiedad ".Show" mediante un módulo. Para ello, en un módulo
aparte digitamos el siguiente script
Sub AbrirFormulario()
"UserForm1" es el nombre por
'Código para abrir formulario
[Link] 'Propiedad .Show sirve para abrir el formulario defecto del formulario, este
End Sub
valor puede ser modificado
desde la ventana de propiedades
Una vez creado el módulo podemos llamarlo desde un botón en la hoja de cálculo o macros.
Excel Avanzado I
Diseño 05
Como todos los objetos de Excel los formularios y sus controles
tienen propiedades los cuales pueden ser observados en la
ventana de propiedades. Para habilitar la ventana se puede seguir
los siguientes pasos:
En la barra de herramientas:
[Link]
2. Venta de propiedades o "F4"
Las propiedades cambian conforme se van seleccionando los
objetos.
Ejecutar un formulario 06
Existen varias formas de ejecutar un formulario. La primera de ellas es mediante los
los comandos
comandos de
de
depuración y ejecución:
Otra forma es llamando a la propiedad ".Show" mediante un módulo. Para ello, en un módulo
aparte digitamos el siguiente script
Sub AbrirFormulario()
"UserForm1" es el nombre por
'Código para abrir formulario
[Link] 'Propiedad .Show sirve para abrir el formulario defecto del formulario, este
End Sub
valor puede ser modificado
desde la ventana de propiedades
Una vez creado el módulo podemos llamarlo desde un botón en la hoja de cálculo o macros.
Excel Avanzado I
Ejercicio
A continuación se creará el siguiente formulario correspondiente a la empresa InfoPUC que se
encargará de recibir la información de pago de sus clientes, para ello se necesita diseñar el
siguiente formulario:
Diseño 01
Para el diseño se necesitó de los siguientes elementos: cinco (05) labels o etiquetas, cuatro (04)
textbox o cuadros de texto, un (01) combobox o cuadros combinados, dos (02) frames o marcos,
dos (02) optionButtons o botones de opciones, un (01) checkBox o cuadro de marcación y un (01)
image o cuadro de imagen.
"Se puede realizar la modificación de la apariencia del formulario y sus elementos jugando
con sus propiedades. Por ejemplo:
BackColor: Determina el color de fondo del objeto en mención.
Font: Determina el tipo de fuente de los objetos que muestren texto.
BorderColor: Determina el color del borde del objeto.
El siguiente proceso, terminado el diseño, es el de identificación y declaración de controles, es un
paso que algunos prefieren obviar pero sin embargo permitiría ahorrar tiempo de diseño y dolores
de cabeza si se opta por realizarlo.
Excel Avanzado I
Identificación de elementos 02
Para la realización de este paso necesitaremos trabajar con la propiedad "name". El paso consiste en
darle un nombre único e irrepetible a cada control del formulario, esto con el fin de luego poder
identificarlos y llamarlos para su procesos de programación.
No existe una regla para asignar
nombres a los controles, la única
regla es que el nombre no tenga
caracteres especiales ni
espacios. En el siguiente cuadro
se puede observar una
convención para una buena
identificación
Inicialización de controles 03
Hay algunos controles que requieren de su inicialización de variables, como ejemplo los cuadros
combinados o comboBox los cuales van a desplegar una lista de datos a ser seleccionados.
Una opción para inicializar los valor de un comboBox es
mediante su propiedad "RowSource". El valor de esta
propiedad requiere la referencia de la hoja de cálculo en
donde se encuentra la información. En este caso el rango de
distritos se encuentra en el rango A2:A5 de la hoja DATOS.
Otra forma de inicializar valor de un control es por medio del evento
"Initialize" del Formulario. Para acceder a ello hacer doble clic en el
formulario o clic derecho y "ver código". Al hacerlo se debió activar el
espacio para el evento "click" sin embargo ese no es el indicado y
hacemos el cambio a "Initialize". El cuál ejecuta su interior al inicializar
el formulario.
Excel Avanzado I
Con el evento creado podemos llamar a la misma propiedad RowSource o a la propiedad "AddItem".
'Proceso de inicialización de valores usando la propiedad "AddItem"
'El proceso se ejecuta inicializar el formulario
Private Sub UserForm_Initialize()
'Inicializamos valores del comboBox
[Link] "Miraflores"
[Link] "La Molina"
[Link] "San Isidro"
[Link] "San Juan de Lurigancho"
[Link] "Lima Centro"
[Link] "Breña"
End Sub
'Proceso de inicialización de valores usando la propiedad "RowSource"
'El proceso se ejecuta inicializar el formulario
Private Sub UserForm_Initialize()
'Inicializamos valores del comboBox
[Link] = "DATOS!A2:A5"
End Sub
Almacenamiento de información 04
Ya con el proceso de diseño completo, lo que faltaría es enviar la información a la hoja de cálculo
para llenar una base de datos. Para ello es importante recordar el refrán:
"LO QUE TENGO A LA DERECHA LO GUARDO EN LO QUE TENGO A LA IZQUIERDA"
Diseñamos la siguiente tabla en una hoja llamada "BD", este cuadro se encargará de recibir la
información ingresada a través del formulario.
Una recomendación es siempre crear una columna llamada "Key" o llave que sea el indicador
único e irrepetible de nuestra base de datos. Esto ayudará a poder identificar una
fila en particular para un filtrado o una búsqueda. Generalmente esta llave suele
llenarse correlativamente.
Pero, ¿Donde codifico o escribo el código que se encargará de ejecutar el proceso de envío de
información?. Pues analicemos, ¿Cuál es el control del formulario que al ejecutar debe procesar la
petición?. Del análisis encontramos que la respuesta es el botón "GUARDAR".
Excel Avanzado I
Entonces hacemos doble clic en el botón "GUARDAR" para acceder a su evento, tambien lo pueden
hacer haciendo clic derecho y luego "ver código". Al hacer ello se abrirá un espacio de codificación
con el evento llamado: "btnGuardar_Clic".
Los formularios operan a través de los eventos de
sus objetos. Por ejemplo en este caso el evento
"clic" quiere decir que ejecutará lo que está
en su interior cada vez que hagamos
clic en el objeto. Si analizas esta lógica
notaras que tiene mucho sentido. Para
mayor información repasar lo realizado en el
módulo 1.
'El proceso se ejecuta al hacer clic en el botón "btnGrabar"
Private Sub btnGrabar_Click()
'Llenamos la información en la hoja BD de lo ingresado en los formularios
[Link]("BD").Cells(2, "A") = txtNombres
[Link]("BD").Cells(2, "B") = txtApellidos
[Link]("BD").Cells(2, "C") = cmbDistrito
[Link]("BD").Cells(2, "D") = txtRUC
[Link]("BD").Cells(2, "E") = txtRazonSocial
[Link]("BD").Cells(2, "F") = opCheque
[Link]("BD").Cells(2, "G") = opTransferencia
[Link]("BD").Cells(2, "H") = chkCredito
Diseñamos la siguiente tabla en una hoja llamada "BD", este cuadro se encargará de recibir la
End Sub
información ingresada a través del formulario.
entonces, al ejecutar nuestro formulario y llamar la información en sus controles y haciendo clic en el
botón aceptar habremos enviado la información a la fila dos de la hoja "BD".
Llenando una base de datos 05
Para llenar información de manera secuencial en una hoja de cálculo es necesario conocer la
siguiente estrategia:
1. Ubicar la última fila con valor, sin importar si existieran filas vacías anteriormente (de esta
validación se encargará el formulario)
2. Colocar la nueva información en la fila siguiente.
Para ello utilizaremos el siguiente código:
uFila = [Link]("nombre_hoja").cells([Link], columna).end(xlUp).Row
Excel Avanzado I
En donde:
Thisworkbook :
Libro actual
[Link]("Hoja1"):
Hoja 1 del libro actual
[Link]("Hoja1").Cells([Link], "A"):
Retorna el valor de la celda "A1048576". [Link] retorna el conteo total de filas, por
defecto 1048576
[Link]("Hoja1").Cells([Link], "A").End(xlUp):
Se ubica en la última fila con valor de la columna "A". Retorna el valor de dicha celda
[Link]("Hoja1").Cells([Link], "A").End(xlUp).Rows:
Se ubica en la última fila con valor de la columna "A". Retorna el número de fila.
'El proceso se ejecuta al hacer clic en el botón "btnGrabar"
Private Sub btnGrabar_Click()
'Encontramos la última fila de la hoja "BD"
uFila = [Link]("BD").cells([Link], "A").End(xlUp).Row + 1
'Llenamos la información en la hoja BD de lo ingresado en los formularios
[Link]("BD").Cells(uFila, "A") = txtNombres
[Link]("BD").Cells(uFila, "B") = txtApellidos
[Link]("BD").Cells(uFila, "C") = cmbDistrito
[Link]("BD").Cells(uFila, "D") = txtRUC
[Link]("BD").Cells(uFila, "E") = txtRazonSocial
[Link]("BD").Cells(uFila, "F") = opCheque
[Link]("BD").Cells(uFila, "G") = opTransferencia
[Link]("BD").Cells(uFila, "H") = chkCredito
End Sub
De la siguiente manera podemos llenar la información fila tras fila utilizando código en VBA.
Cerrar un formulario 05
Si abrir un formulario es representado por ".Show" cerrar uno sería con ".Hide" ¿no?. La repuesta es
no, la propiedad ".Hide" lo que hace es ocultar el formulario, sin embargo esto sigue estando en
ejecución. La forma correcta de cerrar un formulario es a través de "Unload". Entonces el botón que
gobierna esta acción ya no es "Grabar", lo hará el botón "Cerrar".
Option Explicit
'El proceso se ejecuta al hacer clic en el botón "btnGrabar"
Private Sub btnCerrar_Click()
'Cerramos el formulario usando Unload. La palabra reservada "Me" hace referencia al formulario activo, tambien pudo ser
reemplazado con el nombre del formulario, en este caso frmClientes
Unload Me
End Sub