如何在 excel VBA 中同时选择多个列表框

How to multiselect more than one listbox simultaneously in excel VBA

场景

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

目前我可以同时 select 两个列表框,因为我将 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

当前问题

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

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

当我切换到 Multiselect 时,它的作用如下,没有任何同步 selection

你必须:

  • 使用 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() 以配对列表框可见元素