使列表框项目像选项按钮VBA一样工作

时间:2014-05-18 07:29:47

标签: vba listbox userform

我有一个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项。是否有更好的方法可以使它像选项按钮一样工作而无需在选择另一项之前取消所选项目?

1 个答案:

答案 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