使列表框项像选项按钮VBA一样工作
我有一个VBA用户表单,其中有一个包含8项的列表框。其定义为多选列表框。 项目2和项目3相互依赖,因此不能同时选择它们。 为了做到这一点,我写了:使列表框项像选项按钮VBA一样工作,vba,listbox,userform,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项
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。有没有更好的方法可以让它像选项按钮一样工作,而无需在选择其他项之前取消所选项?好问题-对于列表框来说,这不是一个小问题,因为更改事件不会告诉您哪个项实际已更改 下面通过存储这两个选项中最后选择的选项来解决此问题
'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
对我来说还是一样的。我应该把第一行放在哪里?:Private FlistboxItem2先前被选为Boolean@user1040563第一行在模块顶部附近独立运行。你确定它不起作用吗?我创建了一个新的用户表单,在中删除了一个列表框,将其设置为MultiSelect=fmMultiSelectMulti,然后上面的操作完全允许:既不允许第2项也不允许第3项,或者:第3项但不允许第2项,或者:第2项但不允许第3项,或者:不允许第2项和第3项。您还应该注意,Selected()是以0为基数的,因此第一个项目被选中(0),etcIt可以工作!我把第一行放错地方了,谢谢@user1040563变量本身称为“字段”,可用于存储过程之外的信息,以便以后可以再次使用,等等。欢迎使用-很高兴它能工作