我有一个VBA用户表单,其中包含一个包含8个项目的列表框。它被定义为多选列表框。 第2项和第3项相互依赖,因此它们不能一起选择。 为了做到这一点,我写道:
If ListBox1.Selected(3) = True Then
ListBox1.Selected(2) = False
ElseIf ListBox1.Selected(2) = True Then
ListBox1.Selected(3) = False
End If
它确实有效但不是很好。如果我选择第2项而不是第3项则罚款。但是如果我之后尝试选择第2项而不是我需要首先取消选择第3项而不是选择第2项。是否有更好的方法可以使它像选项按钮一样工作而无需在选择另一项之前取消所选项目?
答案 0 :(得分:1)
好问题 - 这对List Box来说并不简单,因为Change事件不会告诉你哪个项目实际发生了变化!
下面通过存储最后选择的两个中的哪一个来解决这个问题。
'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