VBA删除列表框重复项

Ros*_*rio 1 excel vba duplicates listboxitem

我正在尝试从另一个具有重复项的工作表中添加名称列表。在列表框中,我想要具有唯一的名称,而不是重复的名称。以下代码不会对它们进行重复排序,而是会出错。任何帮助表示赞赏。

Dim intCount As Integer
Dim rngData As Range
Dim strID As String
Dim rngCell As Range
dim ctrlListNames as MSForms.ListBox
Set rngData = Application.ThisWorkbook.Worksheets("Names").Range("A").CurrentRegion

'declare header of strID and sort it
strID = "Salesperson"
rngData.Sort key1:=strID, Header:=xlYes
'Loop to add the salesperson name and to make sure no duplicates are added
For Each rngCell In rngData.Columns(2).Cells
    If rngCell.Value <> strID Then
        ctrlListNames.AddItem rngCell.Value
        strID = rngCell.Value
    End If
Next rngCell
Run Code Online (Sandbox Code Playgroud)

Sid*_*out 5

方式一

用它来删除重复项

Sub Sample()
    RemovelstDuplicates ctrlListNames
End Sub

Public Sub RemovelstDuplicates(lst As msforms.ListBox)
    Dim i As Long, j As Long
    With lst
        For i = 0 To .ListCount - 1
            For j = .ListCount - 1 To (i + 1) Step -1
                If .List(j) = .List(i) Then
                    .RemoveItem j
                End If
            Next
        Next
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

方式2

创建一个唯一的集合,然后将其添加到列表框中

Dim Col As New Collection, itm As Variant

For Each rngCell In rngData.Columns(2).Cells
    On Error Resume Next
    Col.Add rngCell.Value, CStr(rngCell.Value)
    On Error GoTo 0
Next rngCell

For Each itm In Col
    ctrlListNames.AddItem itm
Next itm
Run Code Online (Sandbox Code Playgroud)