【问题标题】:VBA - Excel Listbox - Look for Duplicates when Adding Items to Second ListboxVBA - Excel 列表框 - 将项目添加到第二个列表框时查找重复项
【发布时间】:2019-04-17 09:47:18
【问题描述】:

所以我是 VBA 编码的表单方面的新手,我似乎在这方面有点挣扎。

我所做的是遵循本教程:

https://www.excel-easy.com/vba/examples/multiple-list-box-selections.html

我已经以适合我需要的方式对其进行了调整,但现在我遇到了一两个问题,我不知道如何解决。

教程中的代码将两个列表框添加到表单中,然后添加按钮将项目从第一个列表框复制到第二个列表框,删除按钮从第二个列表框删除项目。

问题是您可以多次添加特定项目,并且考虑到我想使用第二个列表框中的值,这是一个问题,因为我只需要唯一值。

下面的代码是我到目前为止想出的,但我收到了一个错误:

Private Sub btn_Add_Filter_Click()

    For i = 0 To lbx_Filters_List.ListCount - 1

        If lbx_Filters_List.Selected(i) = True Then

            For X = 0 To lbx_Filters.ListCount

                If Not IsError(lbx_Filters.List(X)) Then

                    mVal = 0

                    If lbx_Filters.List(X) <> "" And lbx_Filters.List(X) = lbx_Filters_List.List(i) Then

                        myVal = 1

                    End If

                End If

                 If myVal = 0 Then

                    lbx_Filters.AddItem _
                    lbx_Filters_List.List(i)

                 End If

            Next X

        End If

    Next i

End Sub

我第二次尝试从第一个列表框中添加相同的项目时发生错误,发生的情况是第二个 for 循环将循环一次,在第二个循环中它会在此行引发错误:

If Not IsError(lbx_Filters.List(X)) Then

错误是:

无法获取列表属性。无效的属性数组索引

【问题讨论】:

  • 嗨。抛出错误时 X 和 lbx_Filters.List(X) 的值是多少?
  • 看看SO Question
  • @LuisCurado 谢谢你的回复。我现在才回到这个问题。 x=1在执行时,我无法获得 lbx_Filters.List(X) 的值,因为这会引发错误。
  • @GMalc 感谢您的回复和链接。我遇到过这篇文章,但问题是,有了这个,“列表”需要已经完成。将会发生的事情是,用户会将第一个列表框中的项目添加到第二个列表框中,然后可能决定再次删除一个。据我所知,所提供的解决方案依赖于完整的列表/集合/数组,而不是随着我们进行动态更新。
  • 你能在出错前检查 lbx_Filters 的长度吗?您可以使用 lbx_Filters.ListCount 的值创建一个 var

标签: excel vba listbox


【解决方案1】:

我最终(在上面的 cmets 的帮助下)解决了这个问题。感谢所有提供帮助的人。

Private Sub btn_Add_Filter_Click()

    Dim Size As Integer
    Size = lbx_Filters.ListCount
    Dim ListBoxContents() As String
    Dim ListBoxC() As Variant

    Dim i As Integer, y As Integer, X As Integer, myVal As Integer, lItem As Integer

    myVal = 0

    For i = 0 To lbx_Filters_List.ListCount - 1

        If lbx_Filters_List.Selected(i) = True Then

            If Size > 0 Then

                For lItem = 0 To lbx_Filters.ListCount - 1

                    For X = 0 To lbx_Filters_List.ListCount - 1

                        If Not IsError(lbx_Filters_List.List(X)) And lbx_Filters.List(lItem) = lbx_Filters_List.List(i) Then

                            myVal = 1

                        End If

                    Next X

                Next lItem

            End If

            If myVal = 0 Then

                lbx_Filters.AddItem _
                lbx_Filters_List.List(i)

            End If

        End If

    Next i

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多