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