我使用循环在userform上填充ComboBox,它会添加所有"名称"在表的第一列中,具有相同的"类型"在第二栏。
我不想详细说明,但它可能是相同的" name"多次发生。我不希望循环添加那些重复的值。
我在其他论坛上找到了一些解决方案,但那些看起来非常过时,我觉得这应该很容易解决。 (这些"过时的"解决方案就像30多个句子代码,我不觉得我需要它)
有人可以帮我进一步解决这个问题吗?
这是填充循环:
With resourceSheet.ListObjects("Table3")
For x = 2 To .ListRows.Count + 1
If .Range(x, 2) = cType Then
'cbname is the combobox
cbName.AddItem .Range(x, 1)
End If
Next x
End With
答案 0 :(得分:3)
试试这个:
' Create Dictionary object
Dim obj As Object
Set obj = CreateObject("Scripting.Dictionary")
With resourceSheet.ListObjects("Table3")
For x = 2 To .ListRows.Count + 1
If .Range(x, 2) = cType Then
' If name doesn't exist in the Dictionary object yet, add the name to the listbox and the Dictionary object
If IsEmpty(obj.Item(.Range(x, 1) & "")) Then
'cbname is the combobox
cbName.AddItem .Range(x, 1)
obj.Item(.Range(x, 1) & "") = .Range(x, 1)
End If
End If
Next x
End With
字典对象允许您将名称用作键。如果密钥不存在,则将名称添加到列表框并添加密钥。下次遇到相同的名称时,该密钥已经存在,因此它可以移动到下一行。
答案 1 :(得分:3)
这些"过时"解决方案就像30多个句子代码,我不觉得我需要那个
虽然您已经有了答案,但这是另一个使用集合的选项
Sub Sample()
Dim Col As New Collection, itm As Variant
With resourceSheet.ListObjects("Table3")
For x = 2 To .ListRows.Count + 1
If .Range(x, 2) = cType Then
On Error Resume Next
Col.Add .Range(x, 2).Value, CStr(.Range(x, 2).Value)
On Error GoTo 0
End If
Next x
End With
For Each itm In Col
cbName.AddItem itm
Next
End Sub