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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在excel VBA中同时多选多个列表框相关的知识,希望对你有一定的参考价值。

脚本

我有两个名为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

答案

你必须:

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

以上是关于如何在excel VBA中同时多选多个列表框的主要内容,如果未能解决你的问题,请参考以下文章

excel多选选项列表VBA不在密码保护表上运行

Access VBA 如何根据多选列表框中的选择过滤记录集?

当未从多个选择框之一中选择项目时,基于 Access 中的多个“多个选择列表框”的 VBA 查询

我的(Vba)代码仅适用于列表中的1个变量,并且在列表框中使用多个变量时仅返回空白

使用下拉列表框进行多选

Access - 使用多选列表框 VBA 从表单值更新查询