Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

¿Qué es el OptionButton en VBA y cómo se usa?

| 32 comentarios

¿Qué es el OptionButton en VBA y cómo se usa?

El OptionButton en VBA es un control ActiveX que nos permitirá seleccionar una sola alternativa dentro de un grupo de botones de opción. A diferencia de las casillas de verificación, los botones de opción dependen uno del otro, por esto solo puede estar seleccionado un solo botón de opción.

Insertar un OptionButton:

Para insertar un botón de opción hacemos clic en el comando Insertar de la ficha Programador y luego seleccionar el “Botón de opción (control ActiveX)”

Se deberá agregar dos o más botones de opción para permitir que el usuario haga una selección de cualquiera de ellos.

Propiedad Value del OptionButton:

Esta es la propiedad más importante de este control. Los valores que puede tener la propiedad Value son de tipo boolean (Verdadero - Falso) es decir True y False.

Ejemplo 1:

Insertando 3 veces la alternativa “Botón de opción (control ActiveX)” y luego modificando el valor de “Caption” (cambiándolo por el nombre deseado, para este caso Opción 1, Opción 2 y Opción 3) en cada una de ellas al ingresar a sus propiedades se obtendrá:

img1

 

En el código VBA podemos acceder a su propiedad Value y modificarla de la siguiente manera:

Private Sub OptionButton1_Click()
'Si está seleccionado el Option1 se ejecuta
If OptionButton1.Value = True Then MsgBox ("Has seleccionado la Opción 1")
End Sub

Private Sub OptionButton2_Click()
'Si está seleccionado el Option2 se ejecuta
If OptionButton2.Value = True Then MsgBox ("Has seleccionado la Opción 2")
End Sub

Private Sub OptionButton3_Click()
'Si está seleccionado el Option3 se ejecuta
If OptionButton3.Value = True Then MsgBox ("Has seleccionado la Opción 3")
End Sub

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

En este Ejemplo 1 al validar que el botón de opción está seleccionado, se mostrará un cuadro de diálogo al ejecutar la función MsgBox mostrando un mensaje con la Opción que se eligió.

Ejemplo 2:

Algo parecido al primer ejemplo pero utilizando más elementes de interfaz

En este Ejemplo usaremos un UserForm1 en el cual añadiremos 3 veces la opción “Botón de opción (control ActiveX)” y un “botón de comando” los cuales modificaremos el Caption para cada uno de ellos y obtendremos lo siguiente:

img2

(Para mayor visualización de  la imagen, hacer click en la misma)

 

Este UseForm será llamado por un botón (modificando el Caption “Elegir Opción”) utilizando el siguiente código

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Con el siguiente código en VBA del UseForm1:

 

Private Sub CommandButton1_Click()
'Si está seleccionado el Option1 se ejecuta
If OptionButton1.Value = True Then
MsgBox "Seleccionaste la alternativa 1"
End If

'Si está seleccionado el Option2 se ejecuta
If OptionButton2.Value = True Then
MsgBox "Seleccionaste la alternativa 2"
End If

'Si está seleccionado el Option3 se ejecuta
If OptionButton3.Value = True Then
MsgBox "Seleccionaste la alternativa 3"
End If

End Sub

Al probar el Ejemplo 2 se puede ver que al seleccionar un botón de opción, y luego presionar Aceptar, se evalúa mediante una condición If Then, el valor de  Opción 1, Opción 2 y Opción 3. El Optionbutton que se encuentre con el valor True en la propiedad Value , ejecutará la función MsgBox mostrando el mensaje correspondiente que será similar al del Ejemplo 1.

Nota: de acuerdo a la alternativa seleccionada, se puede realizar algún PROCEDIMIENTO o FUNCIÓN para realizar alguna operación.

Ejemplos: Qué es el OptionButton en VBA y cómo se usa

 

Elaborado por: Walther Eduardo Reque Olano

32 comentarios

  1. Lo que se describe en el ejemplo que datalla que perimitira el formulario nos podrá ayudar para cuando queremos que el usuario elija sólo una opción y dicha opción se capture en alguna celda u otro formulario elegido donde se guardara la informacion elegida por el usuario

  2. Propiedad Value del OptionButton:

    Esta es la propiedad mas importante de este control. Los valores que puede tener la propiedad Value son de tipo boolean (Verdadero - Falso) es decir True y False.

    Ahora un ejemplo del código en el formulario:

    Private Sub Command1_Click()
    'Si está seleccionado el Option1 se ejecuta la siguiente condición pagar en efectivo.
    If Option1.Value = True Then
    MsgBox "Seleccionaste pagar en Efectivo"
    End If

    'Si está seleccionado el Option2 esta pagar con tarjeta de crédito
    If Option2.Value = True Then
    MsgBox "Seleccionaste pagar con Tarjeta de crédito"
    End If

    'Si está seleccionado el Option3 se ejecuta esta otra pagar con cheque
    If Option3.Value = True Then
    MsgBox "Seleccionaste pagar mediante Cheque"
    End If

    End Sub

  3. Observo que esta opción se utilizará bastante para encuentas con 1 sola opción o para preguntas de exámenes online con alternativas, pero y que sucedería si en la encuesta te brindan la opción: "Puede marcar mas de 1 opción si lo desea", por ejemplo en las encuestas de preferencias musicales (rock, pop, jazz, huayno, salsa, etc). Intenté con el OptionButton pero no me funcionó.

  4. Observo que en el ejemplo hay tres opciones: una sola se marca, que podría ser la respuesta de tres alternativas a una pregunta. Que sucede cuando son mas preguntas y cada una con sus alternativas?. En las propiedades del optionButton esta el GroupName, "ponerle nombre a un grupo". Por decir, pregunta 1, los tres primeros optionButton le puse un común nombre por decir P1 y así sucesivamente. Resultado, cada pregunta funciona con sus respectivas alternativas. Si hay algo mucho mejor, coméntenlo.

  5. ¿Es posible habilitar la elección de varias opciones con OptionButton? De lo contrario, tendría que recurrirse a otros botones como CheckBox; donde no hay necesidad de modificar propiedad alguna.

    • Hola Cristian,

      Sí es posible habilitar la elección de más de una opción, pero para ello será necesario colocar cada OptionButton dentro de un Frame diferente.

  6. ¿Es posible que el código reconozca qué botón se ha seleccionado sin tener que recurrir a un CommandButton?. Como si fuera un evento Change. dentro de un Frame o Group.
    Gracias

  7. El optionbutton es aplicable a varios ejemplos, como por ejemplo al aplicar un test de cualquier ámbito y se le puede asignar valores.
    En el ejemplo que se da también sería importante hacer que cada que ponga aceptar se cierre la ventana de opciones.

  8. En el diseño de formularios y en general en el diseño de cualquier interfaz que se relacione directamente con el usuario, es necesario tener en cuenta un factor muy importante: "la facilidad de utilización". Ya que usualmente los usuarios de estos programas no son los mismo diseñadores, es importante tomar en cuenta este factor y diseñar interfaces fáciles de entender y controlar. Se dispone de un conjunto de herramientas especiales para esto, un ejemplo claro de esta es el Optionbutton, el cual proporciona una función clara dentro de un formulario: limitar el número de respuestas a solo una. Lo cual enmarca el procedimiento que puede seguir el usuario.

  9. buenos dias, estoy con un inconveniente que me tiene mal hace rato porque no puedo desifrarlo.
    tengo una planilla en donde tengo varias opciones para elegir, a traves de botones de opcion. cuando el usuario ingresa nuevamente quiero que el boton seleccionado anteriormente se vuelva a desactivar, o sea... que cada vez que ingresamos nuevamente al formulario me aparezcan en blanco todos los botones de opcion, para luego elegir de nuevo la deseada en ese momento.
    desde ya muchas gracias.
    saludos.
    Alejandra

  10. Estimada Alejandra, para blanquear las opciones puedes aplicar:
    OptionButton1.Value= False
    OptionButrton2.Value=False
    Option
    .....
    ...
    ...

    De esta manera se desactivan las opciones y puedes volver a eleguir.
    Lo principal de esta opcion es la opciones de Verdadero y Falso, la aplicacion que encontre es si un equipo que entro en falla paro o no paro, si paro pasa a un analisis, otro aplicacion es si la parada fue por mantenimiento o fue por operaciones. Hay muchos casos practicos y sencillos para poder generar registros.

    • La idea no es bloquearlas sino refrescarlas, ya que si seleccionas algo y se abre un nuevo formulario (f2), al regresar al anterior (f1), este sigue con la opción marcada....lo que entiendo y es mi inquietud también, como hacer para que se refresque el formulario original (f1) sin tener que cerrar y volver a abrir?

  11. Esto facilita el registro de la información, ya que homogeniza los datos que se ingresan.

  12. Sería muy útil para encuestas virtuales .

  13. Para que una de las opciones escogidas quede grabada en una celda, realicé estos códigos:

    If OptionSI.Value = True Then
    Cells(ult, 8) = OptionSI.Caption
    End If

    Antes tuve que indicar en qué celda queria que se colocara

    ult = Cells(Rows.Count, 5).End(xlUp).Offset(1, 0).Row

    Es lo más sencillo que aprendí, espero sirva de ayuda.

  14. buenas noches, Una consulta el escribir los códigos del ejemplo ¿se escribe en la hoja 1 o en el userform?

  15. Me encantó! Será muy útil para elaborar encuestas 😀

  16. Sería posible que al activar una opción por el formulario optionbutton se llame a otro formulario?

    • Si deja userform1 show

  17. Muy buen aporte, muchas gracias por compartir sus conocimientos. Claro, conciso y muy útil.

  18. Si en un UserForm tengo, pongamos por ejemplo, 50 optionbuttons, ¿hay alguna forma de simplificar la programación de esos optionbuttons,?.
    ¿Hay que programar independientemente cada uno para que ejecute una acción cuando se seleccione uno de ellos?.

  19. Gracias por tu mensaje Francisco

    Si se requiere hacer una modificación masiva se puede usar me.controls, te paso un ejemplo

    For Each ctrl In Me.Controls
    If TypeName(ctrl) = "TextBox" Then
    ctrl.Text = "abc"
    End If
    Next

    Saludos

  20. Si tengo mas de una pregunta con option buttons como hago para independizarlos, ya que me quedan relacionados y solo puedo elegir uno de ambas preguntas? es decir elijo la respuesta a la primera pregunta marcando un boton, luego cuando respondo a la segunda pregunta y selecciono el boton se me desmarca de la pregunta anterior...gracias!

Página de comentarios 1 de 2
1 2

Deja una respuesta

Los campos requeridos estan marcados con *.