如何在Excel VBA中同时多选一个以上的列表框

时间:2018-09-10 02:32:34

标签: excel vba excel-vba listbox multi-select

场景

我有两个名为openItemListserialNumber的列表框。 serialNumber条目是openItemList每行的唯一编号。这意味着每个openItemList都有一个唯一的serialNumber。但是openItemList在不同的行中可以有重复的值。用户只能理解openItemList,然后选择此项。由于相应的serialNumber也基于openItemList进行选择,因此我的程序正在使用serialNumber作为搜索词标准来查找相关的行数据,并相应地更新正确的行。

当前,我能够同时选择两个列表框,因为我将multiselect属性设置为单个条目。我使用以下代码来实现

Private Sub openItemList_Click()
    serialNumber.ListIndex = openItemList.ListIndex
End Sub

Private Sub openItemList_Scroll()
    serialNumber.TopIndex = openItemList.TopIndex
End Sub

Private Sub serialNumber_Click()
    openItemList.ListIndex = serialNumber.ListIndex
End Sub

Private Sub serialNumber_Scroll()
    openItemList.TopIndex = serialNumber.TopIndex
End Sub

当前问题

现在,我想让用户在列表框中选择多个行,以便用户可以一次更新多个行。当我将两个列表框的属性更改为MultiSelectExtended时,选择依赖项不再起作用。因此,我无法再基于serialNumber搜索相应的行。有人知道如何在更改为MultiSelectExtended模式时同时选择两个列表框吗?

当前,这就是两个列表框的行为。当我选择一个列表框时,另一个列表框的相应值也会突出显示。

enter image description here

当我更改为Multiselect时,它的行为如下所示,没有同时进行选择

enter image description here

1 个答案:

答案 0 :(得分:1)

您必须:

  • 使用Change事件代替Click一个事件

  • 将每个元素Selected属性的两个列表框匹配:

如下:

Private Sub openItemList_Change()
    Dim i As Long
    With openItemList
        For i = 0 To .ListCount - 1
            serialNumber.Selected(i) = .Selected(i)
        Next
    End With
End Sub

还要将openItemList_Scroll()更改为openItemList_MouseDown()以配对列表框可见元素