Excel 组合框中只有唯一的记录(VBA)

Excel 组合框中只有唯一的记录(VBA),excel,vba,Excel,Vba,我有一个组合框,我从Excel表格中添加了一些东西,其中包含了一堆东西。我只想要唯一的记录,我希望在切换到此页面时更新这些记录。 为此,我使用了以下代码: Private Sub MultiPage1_Change() Dim Rand As Long Dim ws As Worksheet Set ws = Worksheets("BD_IR") Dim i As Long Rand = 3 Do While ws.Cells(Rand, 3).Value <> "" And Ra

我有一个组合框,我从Excel表格中添加了一些东西,其中包含了一堆东西。我只想要唯一的记录,我希望在切换到此页面时更新这些记录。 为此,我使用了以下代码:

Private Sub MultiPage1_Change()
Dim Rand As Long
Dim ws As Worksheet
Set ws = Worksheets("BD_IR")
Dim i As Long
Rand = 3
Do While ws.Cells(Rand, 3).Value <> "" And Rand < 65536
    If Me.repereche.ListCount <> 0 Then
        For i = 0 To (Me.repereche.ListCount)
        If Me.repereche.List(i, 0) <> Mid(ws.Cells(Rand, 3).Value, 4, 10) Then
            Me.Controls("repereche").AddItem Mid(ws.Cells(Rand, 3).Value, 4, 10)
        End If
        Next i
    ElseIf Me.repereche.ListCount = 0 Then
        Me.Controls("repereche").AddItem Mid(ws.Cells(Rand, 3).Value, 4, 10)
    End If
    Rand = Rand + 1
Loop
Private Sub MultiPage1_Change()
暗淡如长
将ws设置为工作表
设置ws=工作表(“BD_IR”)
我想我会坚持多久
兰德=3
Do While ws.Cells(Rand,3).Value“”和Rand<65536
如果Me.repreche.ListCount为0,则
对于i=0到(Me.repreeche.ListCount)
如果Me.repreche.List(i,0)Mid(ws.Cells(Rand,3).Value,4,10),那么
控件(“保留”).AddItem Mid(ws.Cells(Rand,3).值,4,10)
如果结束
接下来我
ElseIf Me.repreche.ListCount=0,则
控件(“保留”).AddItem Mid(ws.Cells(Rand,3).值,4,10)
如果结束
兰德=兰德+1
环
这段代码的问题(我不知道问题出在哪里?)是每当我更改页面时,我回到这个组合框所在的页面。。。它添加了更多(不是唯一的)和更多的项目。我哪里错了?

请尝试以下代码:

Dim ws As Worksheet
Dim rCell As Range

Set ws = Worksheets("BD_IR")

'//Clear combobox
repereche.Clear

With CreateObject("Scripting.Dictionary")
    For Each rCell In ws.Range("C3", ws.Cells(Rows.Count, "C").End(xlUp))
        If Not .exists(rCell.Value) Then
            .Add rCell.Value, Nothing
        End If
    Next rCell

    repereche.List = .keys
End With

与集合相比,我更喜欢这样做,因为您可以检查字典中是否存在该值,而不是在出错时使用,并立即将整个集合添加到组合框。

在向组合框添加项目之前,您需要清除组合框。这将阻止每次切换页面时添加“越来越多的项目”。如果需要唯一的记录,请将范围读入数组并将每个项添加到集合对象中——这将允许您仅添加唯一项,因为集合对象拒绝重复项。请参阅示例代码。
Rand
作为变量名,使我认为它应该是一个随机数(如
Rand
工作表函数中所示),代码不错,信息也不错。在这方面,我不知道dictionary对象比collection对象优越。太好了。这是第一个我想要的。非常感谢+1词典在时间上也比集合更有效