获取多选框中最后选中的项目

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事件返回最后选择的列表框值,可以使用解决方案。它可以检测所选值,与其在列表中的位置无关:

  1. 在列表框所在的 sheet 模块顶部(在声明区域)创建一个 Private 变量:
Private colS As New Collection
  1. 然后复制下一个适配的事件代码:
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”应该是列表的第二行...