获取多选框中最后选中的项目
Get the last selected item in multiselect box
我在我的 Excel 文件中添加了一个来自 Active X 控件的列表框,并使它成为一个带有复选框的多 select 框。
我还在 VB 脚本中针对此列表框添加了一个 select 离子变化事件。
Sub lstMultiSelectBox_Change()
If blnCheck = False Then
CheckAll
End If
End Sub
现在我正在努力寻找最后检查的项目。有了这些信息,我想在此列表框中实现 Select All 和 Un Select All 功能。
为了使ListBox1_Change
事件返回最后选择的列表框值,可以使用解决方案。它可以检测所选值,与其在列表中的位置无关:
- 在列表框所在的 sheet 模块顶部(在声明区域)创建一个
Private
变量:
Private colS As New Collection
- 然后复制下一个适配的事件代码:
Private Sub ListBox1_Change()
Dim i As Long
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
If colS.Count = 0 Then
colS.Add ListBox1.List(i), ListBox1.List(i)
Else
If Not itExists(colS, ListBox1.List(i)) Then
colS.Add ListBox1.List(i), ListBox1.List(i)
End If
End If
Else
If itExists(colS, ListBox1.List(i)) Then
colS.Remove ListBox1.List(i): Exit Sub
End If
End If
Next i
If colS.Count > 0 Then MsgBox colS(colS.Count)
End Sub
如果您希望它仅在所选值为“Select 全部”时触发,请将最后一个事件代码行替换为类似以下内容:
If colS.Count > 0 Then
If colS(colS.Count) = "Select All" then
'do whatever you need in such a case
'but, if you try selecting all of lines, in order to avoid the event
'being triggered again, you should use 'Application.EnableEvents = False`, before selecting and 'Application.EnableEvents = True` after
End If
End If
最简单的解决方案应该是第一条评论中建议的解决方案:
If Listbox1.Selected(1) = True Then
'do whatever you need
End If
但是,为了使其正常工作,行“Select All”应该是列表的第二行...
我在我的 Excel 文件中添加了一个来自 Active X 控件的列表框,并使它成为一个带有复选框的多 select 框。
我还在 VB 脚本中针对此列表框添加了一个 select 离子变化事件。
Sub lstMultiSelectBox_Change()
If blnCheck = False Then
CheckAll
End If
End Sub
现在我正在努力寻找最后检查的项目。有了这些信息,我想在此列表框中实现 Select All 和 Un Select All 功能。
为了使ListBox1_Change
事件返回最后选择的列表框值,可以使用解决方案。它可以检测所选值,与其在列表中的位置无关:
- 在列表框所在的 sheet 模块顶部(在声明区域)创建一个
Private
变量:
Private colS As New Collection
- 然后复制下一个适配的事件代码:
Private Sub ListBox1_Change()
Dim i As Long
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
If colS.Count = 0 Then
colS.Add ListBox1.List(i), ListBox1.List(i)
Else
If Not itExists(colS, ListBox1.List(i)) Then
colS.Add ListBox1.List(i), ListBox1.List(i)
End If
End If
Else
If itExists(colS, ListBox1.List(i)) Then
colS.Remove ListBox1.List(i): Exit Sub
End If
End If
Next i
If colS.Count > 0 Then MsgBox colS(colS.Count)
End Sub
如果您希望它仅在所选值为“Select 全部”时触发,请将最后一个事件代码行替换为类似以下内容:
If colS.Count > 0 Then
If colS(colS.Count) = "Select All" then
'do whatever you need in such a case
'but, if you try selecting all of lines, in order to avoid the event
'being triggered again, you should use 'Application.EnableEvents = False`, before selecting and 'Application.EnableEvents = True` after
End If
End If
最简单的解决方案应该是第一条评论中建议的解决方案:
If Listbox1.Selected(1) = True Then
'do whatever you need
End If
但是,为了使其正常工作,行“Select All”应该是列表的第二行...