2014-10-28 2 views
3

루프와 함께 사용자 정의 폼에 ComboBox를 채우고 있습니다. 동일한 "유형"을 가진 테이블의 첫 번째 열에 모든 "이름"을 추가합니다. 두 번째 열에Excel VBA - 중복을 추가하지 않는 ComboBox를 채우는 루프

세부 사항으로 들어가고 싶지는 않지만 동일한 "이름"이 여러 번 나타날 수 있습니다. 루프가 그 중복 값을 추가하는 것을 원하지 않습니다.

나는 다른 포럼에서 몇 가지 해결책을 찾았지만, 나는 매우 구식이되어 보였습니다. 그리고 나는 쉬운 수정이 있어야한다고 생각합니다. (이 "시대에 뒤 떨어진"솔루션은 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

이미 발견 한 구형 솔루션이 무엇인지 알려주실 수 있습니까? 나는 당신이 이미 기각 한 제안을하고 싶지 않을 것입니다. – Dave

+0

저는 솔루션이 30+ 문장 코드라고 생각합니다.이 코드는 제게는 비효율적 인 것처럼 보입니다. 더 짧은 해결책이 있다면 그것을 보길 원합니다. –

답변

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 

사전 객체는 키로서 이름을 사용할 수 있습니다

는 채우기 루프입니다. 키가 존재하지 않으면 목록 상자에 이름을 추가하고 키를 추가합니다. 다음 번에 같은 이름으로 오면 그 키가 이미 있으므로 다음 줄로 넘어갈 수 있습니다.

+0

+1은 완벽하게 작동합니다. –

+0

+1 멋지게 완료되었습니다. –

3

이러한 "구식"솔루션은 내가 이미 답을 가지고 있지만

가 여기 컬렉션

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 
를 사용하여 다른 옵션입니다 필요 같은 느낌하지 않습니다, 30 개 이상의 문장 부호처럼
+0

+1 덕분에이 코드는 @Dave의 대답처럼 나에게 더욱 의미가 있습니다. 이런 식으로 생각하지 않았다. –

관련 문제