VBA-Excel列表框-将项目添加到第二个列表框时查找重复项

时间:2019-04-17 09:47:18

标签: excel vba listbox

所以我对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

错误在于:

  

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

1 个答案:

答案 0 :(得分:0)

我最终(在以上评论的帮助下)解决了这个问题。感谢所有协助的人。

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