如何过滤组合框中的数据 vba

How to filter data in combo Box vba

我遇到了这个问题,我必须将数据过滤到组合框中。该列表应该只有唯一的记录。 这是将记录填充到组合框中的代码:

Private Sub UserForm_Activate()
Dim myrng As Range
Dim cl As Range
Dim sh As Worksheet
Set sh = Worksheets("Product_Master")

        Set myrng = sh.Range("C2:C100000")
        With Me.comBox_Purchase_Product
            .Clear
            For Each cl In myrng.Cells
                If cl.Value <> "" Then
                    .AddItem cl.Value
                End If
            Next cl
        End With
    End sub 

这是我得到的产品...现在我只想要唯一记录并删除所有重复项。

提前致谢。

首先将所有值添加到 dictionary 中。添加时,使用 myDictionary.Exists 测试唯一性。然后从字典中抓取唯一列表以加载到组合框列表中。

Private Sub UserForm_Activate()
    Dim sh As Worksheet
    Set sh = Worksheets("Product_Master")
    
    Dim myrng As Range
    Set myrng = sh.Range("C2:C100000")
    
    Dim Dict As Object
    Set Dict = CreateObject("Scripting.Dictionary")
    
    Dim cl As Range
    For Each cl In myrng.Cells
        If cl.Value <> "" And Not Dict.exists(cl.Value) Then
            Dict.Add cl.Value, 0
        End If
    Next cl

    Me.comBox_Purchase_Product.List = Dict.Keys
End Sub

我建议将事件从 UserForm_Activate 更改为 UserForm_Initialize,因为这样可以避免多次重新 运行 脚本,但它在两个事件中都有效。