VBA组合框与条件重复

VBA组合框与条件重复,vba,combobox,conditional,duplicate-removal,Vba,Combobox,Conditional,Duplicate Removal,嘿,我写了这个宏,它可以编译,但没有达到它的目标 Private Sub UserForm_Initialize() Dim r As Range With CreateObject("Scripting.Dictionary") .CompareMode = vbTextCompare For Each r In Sheets("Ticket").Range("e2:e200") If (Not IsEmpty(r.Value)) * (Not .exists(

嘿,我写了这个宏,它可以编译,但没有达到它的目标

Private Sub UserForm_Initialize()
Dim r As Range
With CreateObject("Scripting.Dictionary")
    .CompareMode = vbTextCompare
    For Each r In Sheets("Ticket").Range("e2:e200")
        If (Not IsEmpty(r.Value)) * (Not .exists(r.Value)) Then
            Me.Trade.AddItem r.Value
            .Add r.Value, Nothing
        End If
    Next
End With

Dim s As Range
Dim t As Range
With CreateObject("Scripting.Dictionary")
    .CompareMode = vbTextCompare
    For Each s In Sheets("Ticket").Range("c2:c200")
    For Each t In Sheets("Ticket").Range("e2:e200")
        If (Not IsEmpty(s.Value)) * (Not .exists(s.Value)) And t.Value = UCase(Trade.Value) Then
            Me.Client.AddItem s.Value
            .Add s.Value, Nothing
         End If
        Next
        Next
End With

End Sub
第一部分工作得很好,它从没有重复的列E中选择值,并将其放入组合框中。问题在第二部分。 如果列E上的值是我在combobox1中选择的值,我想选择列C中的值,但不重复。
Thk you

用户表单初始化:

Private Sub UserForm_Initialize()

    Dim varItem As Variant
    Dim strUnq As String

    For Each varItem In Sheets("Ticket").Range("E2:E200").Value
        If Len(varItem) > 0 And InStr(1, "|" & strUnq & "|", "|" & varItem & "|", vbTextCompare) = 0 Then strUnq = strUnq & "|" & varItem
    Next varItem

    If Len(strUnq) > 0 Then Me.Trade.List = Split(Mid(strUnq, 2), "|")

End Sub
对于交易变更事件:

Private Sub Trade_Change()

    Dim rngFound As Range
    Dim strFirst As String
    Dim strTemp As String
    Dim strUnq As String

    Me.Client.Clear
    If Me.Trade.ListIndex = -1 Then Exit Sub    'Nothing selected

    With Sheets("Ticket").Range("E2:E200")
        Set rngFound = .Find(Me.Trade.Text, .Cells(.Cells.Count), xlValues, xlWhole)
        If Not rngFound Is Nothing Then
            strFirst = rngFound.Address
            Do
                strTemp = .Parent.Cells(rngFound.Row, "C").Text
                If Len(strTemp) > 0 And InStr(1, "|" & strUnq & "|", "|" & strTemp & "|", vbTextCompare) = 0 Then strUnq = strUnq & "|" & strTemp
                Set rngFound = .Find(Me.Trade.Text, rngFound, xlValues, xlWhole)
            Loop While rngFound.Address <> strFirst
            Set rngFound = Nothing
        End If
    End With

    If Len(strUnq) > 0 Then Me.Client.List = Split(Mid(strUnq, 2), "|")

End Sub
Private Sub-Trade_Change()
暗淡的rngFound As范围
Dim strFirst作为字符串
将strTemp设置为字符串
作为字符串的Dim strUnq
我,客户,明白了
如果Me.Trade.ListIndex=-1,则退出子项“未选择任何内容”
附页(“票证”)。范围(“E2:E200”)
设置rngFound=.Find(Me.Trade.Text、.Cells(.Cells.Count)、xlValues、xlWhole)
如果不是,那么rngFound什么都不是
strFirst=rngFound.Address
做
strTemp=.Parent.Cells(rngFound.Row,“C”).Text
如果Len(strTemp)>0且InStr(1,“|”&strUnq&“|”、“|”&strTemp&“|”、”vbTextCompare)=0,则strUnq=strUnq&“|”&strTemp
设置rngFound=.Find(Me.Trade.Text、rngFound、xlValues、xlWhole)
在rngFound.Address strFirst时循环
设置rngFound=Nothing
如果结束
以
如果Len(strUnq)>0,则Me.Client.List=Split(Mid(strUnq,2),“|”)
端接头