Este artículo pertenece a nuestra serie dedicada a UserForms. Si es el primero que has visto, te sugiero iniciar por la primera entrega: Introducción a UserForms
Artículo anterior: UserForms | Cargar información de un formulario a una Base de Datos
En esta nueva entrega de nuestra serie de artículos dedicados a UserForms, vamos a profundizar en una nueva herramienta de nuestra caja mágica para crear formularios: los botones de opción.
Seguramente los conozcas debido a que se encuentran presentes en todos lados: se trata de casilleros que presentan una serie de opciones entre los que el usuario puede elegir. Se caracterizan por su comportamiento, que nos permite seleccionar solo una opción por grupo a la vez.
Vamos a verlo directo a la práctica. Puedes retomar el archivo de Excel a donde lo habíamos dejado la última vez, en el artículo referido a cargar información de un formulario a una base de datos (haz click aquí para descargarlo).
Empezaremos por hacer un poco de lugar en nuestro formulario. Vamos a desplazar los botones de comando hacia abajo, para tener el lugar suficiente para insertar una etiqueta (“Sexo:”) y dos botones de opción:
Como posiblemente sospeches, a uno de los botones le pondremos de nombre visible al usuario (Ventana Propiedades > Caption) “Hombre”, y al otro, “Mujer”. Como nombre “duro” de VBA, para poder hacer referencia al objeto, iniciaremos con la abreviatura del objeto “opt”, para saber que nos referimos a un botón de opción (option, en inglés), seguido por su contenido específico: optHombre, optMujer. Una vez hecho esto, deberías poder visualizarlo del siguiente modo:
Recuerda que puedes crear dos o más botones de opción, lo importante es que el usuario podrá seleccionar solo una de ellas (para poder elegir una o más opciones, veremos en la próxima entrega las casillas de selección).
Marco
Si necesitas crear varios grupos de opciones, desde luego que la limitación “solo uno” puede interferir en tus planes, ya que impedirían que el usuario haga una selección independiente en varias categorías que no tienen relación entre ellas. Hay una solución sencilla para este problema: el uso de marcos, o grupos de botones.
Deberás crear en primer lugar el marco, de tamaño suficiente para albergar en su interior los distintos botones de opción, y dentro de él, tantos botones como desees que pertenezcan al grupo. Como dijimos, cada grupo será independiente entre sí:
Programando los botones de opción
Volvamos nuevamente a nuestro formulario ejemplo. Y antes aún, a nuestra tabla que oficia de base de datos: vamos a agregar una columna que representará el valor elegido en los botones de opción que hemos agregado. Se llamará igual que la categoría de la etiqueta: Sexo (pero tú puedes escoger los nombres que prefieras):
Ahora bien, para programar un grupo de botones de opción, debemos tener en cuenta que los mismos presentan un comportamiento booleano, es decir, que pueden asumir dos valores posibles: verdadero (cuando el botón está seleccionado), o falso (cuando no lo está).
Esta es su propiedad .Value, que en el caso de los TextBox resultaba cualquier valor o texto que se escribiera en su interior. Su característica de booleano puede parecer un limitante, pero tienen mucha utilidad en el marco de funciones If dentro de nuestro código VBA, para controlar el flujo del código. Veamos cómo.
Exploraremos el código que hemos escrito en el botón Aceptar > Click (haciendo click derecho sobre el botón Aceptar > Ver código).
Insertaremos un par de líneas de código, a continuación de la carga de los valores de los diferentes TextBox. La información se cargará en nuestra base de datos, en la última fila y la columna 5 (columna E de nuestra captura de la base de datos, con la fila variable a medida que se agregan nuevos resultados). Sin embargo, en este caso no podremos trasladar directamente el valor del botón de opción, ya que esto transmitiría “VERDADERO” o “FALSO”. En su lugar, utilizaremos una estructura If (es importante que las comprendas para controlar lo que ocurre con nuestro código, tratamos este tema y muchos otros más en nuestra Masterclass de Excel – Nivel 3):
If optHombre.Value = True Then
Cells(UFila, 5).Value = "Hombre"
ElseIf optMujer.Value = True Then
Cells(UFila, 5).Value = "Mujer"
Else
Cells(UFila, 5).Value = "Sin especificar"
End If
Lo que planteamos, es que si alguna de las opciones fue seleccionada (If… ElseIf…), se escriba en nuestra base de datos un valor dado (que nuevamente, no necesariamente será el texto de los botones, sino que puedes escribir lo que quieras). En caso de no haber seleccionado ningún botón, el campo se escribirá con “Sin especificar”. Si bien más adelante veremos algunos trucos para “forzar” al usuario a elegir o completar de manera obligatoria algunos campos, no está de más considerar todas las opciones posibles.
También, agregaremos dos líneas para “limpiar” la selección una vez realizada la carga (aquí, utilizaremos False en lugar de “”, ya que este booleano representa “ninguna selección”):
optHombre.Value = False
optMujer.Value = False
Y el código quedará del siguiente modo:
¡Intenta ejecutar el formulario ahora y observa lo que sucede!
Puedes descargar el archivo hasta donde lo hemos trabajado aquí mientras te preparas y reflexionas para la próxima entrega.