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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA - Excel列表框 - 在向第二个列表框添加项目时查找重复项相关的知识,希望对你有一定的参考价值。

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

错误是:

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

答案

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

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

以上是关于VBA - Excel列表框 - 在向第二个列表框添加项目时查找重复项的主要内容,如果未能解决你的问题,请参考以下文章

Access VBA:比较两个列表框

使用Excel VBA调整列表框以显示比列表框宽度更长的字符串

ms excel vba 填充具有不同列要求的列表框

VBA Excel:列表框自动滚动

Excel VBA - 如何从另一个控件触发列表框单击

VBA Excel - 如何修复列表框表单上的过滤器代码