visual variable propiedades programar optionbutton opcion limpiar formulario con como boton alternar vba listbox userform

variable - Hacer que los elementos del cuadro de lista funcionen como botones de opción VBA



msgbox excel variable (1)

Tengo un formulario de usuario de VBA con un cuadro de lista que contiene 8 elementos. Se define como un cuadro de lista de selección múltiple. El ítem 2 y el ítem 3 dependen uno del otro, por lo que no se pueden seleccionar juntos. Para hacer eso escribí:

If ListBox1.Selected(3) = True Then ListBox1.Selected(2) = False ElseIf ListBox1.Selected(2) = True Then ListBox1.Selected(3) = False End If

Funciona pero no muy bien. Si elijo el elemento 2 y el artículo 3 está bien. pero si intento elegir el elemento 2 después de lo necesario, primero debo deseleccionar el ítem 3 y luego elegir el ítem 2. ¿Hay una mejor manera de hacerlo para que funcione como botones de opción sin la necesidad de cancelar el ítem seleccionado antes de seleccionar otro?


Buena pregunta: ¡esto no es trivial con el cuadro de lista ya que el evento de cambio no le dice qué elemento realmente ha cambiado!

Lo siguiente funciona alrededor de esto almacenando cual de los dos fue seleccionado al final.

''Member fields Private fListBoxItem2PreviouslySelected As Boolean Private Sub ListBox1_Change() With ListBox1 If fListBoxItem2PreviouslySelected Then If .Selected(3) Then .Selected(2) = False fListBoxItem2PreviouslySelected = False End If Else If .Selected(2) Then .Selected(3) = False fListBoxItem2PreviouslySelected = True End If End If End With End Sub ''Just used for testing purposes Private Sub UserForm_Initialize() Dim i As Long: For i = 0 To 10: ListBox1.AddItem i: Next End Sub