Dubbele namen filteren in ComboBox

Status
Niet open voor verdere reacties.

ThomasP1

Gebruiker
Lid geworden
7 jun 2014
Berichten
29
Hallo allemaal,

Ik heb hier een ComboBox in een UserForm in Excel, die data haalt uit een van de rijen uit mijn sheets. Nou staan er heel veel namen in rij die meerdere keren voorkomen. Is er een mogelijkheid dat elke naam er telkens maar 1 keer wordt laten zien in de ComboBox, maar dat ze als het ware wel alle dubbele namen representeren.

Ik hoop dat het een beetje duidelijk is wat ik bedoel, ik ben namelijk totaal niet ervaren in VBA.

Alvast bedankt.
 
Zoiets.
rode gedeeltes aanpassen
Code:
Private Sub UserForm_Initialize()
With Sheets("[COLOR="#FF0000"]uw blad[/COLOR]").Range([COLOR="#FF0000"]"uw range[/COLOR]")
    v = .Value
End With
With CreateObject("scripting.dictionary")
    .comparemode = 1
    For Each e In v
        If Not .exists(e) Then .Add e, Nothing
    Next
    If .Count Then [COLOR="#FF0000"]ComboBox1[/COLOR].List = Application.Transpose(.keys)
End With
End Sub
Doe er anders een vbtje bij
 
Bedankt voor je reactie, maar mijn code ziet er wel iets anders uit.

Code:
Private Sub ComboBox1_DropButtonClick()

'This ComboBox will give a list of all the carrier names. This is done with a loop, that counts from E2 to E201'

Dim a As Integer, EndRow As Integer
EndRow = Sheets("Dataset").Range("E" & Rows.Count).End(xlUp).Row
If Me.ComboBox1.ListCount = 0 Then
For a = 2 To EndRow
Me.ComboBox1.AddItem Sheets("Dataset").Cells(a, "E").Value
Next a
End If

End Sub
 
Haal uw code weg en test het zo eens
Code:
Private Sub UserForm_Initialize()
With Sheets("Dataset").Range("E2:E201")
    v = .Value
End With
With CreateObject("scripting.dictionary")
    .comparemode = 1
    For Each e In v
        If Not .exists(e) Then .Add e, Nothing
    Next
    If .Count Then ComboBox1.List = Application.Transpose(.keys)
End With
End Sub
Of zoals ik al zei post een vbtje met wat dummy gegevens
 
Code:
Private Sub UserForm_Initialize()
dim sn, i as long
sn =Sheets("Dataset").Range("E2:E201")
  with createobject("scripting.dictionary")
    for i = 1 to ubound(sn)
      if sn(i,1) <>"" then .item(sn(i,1)) = sn(i,1)
    next i
     combobox1.list = .keys
   end with
end sub
 
Code:
Private Sub UserForm_Initialize()
  sn =Sheets("Dataset").Range("E2:E201")

  with createobject("scripting.dictionary")
    for j = 1 to ubound(sn)
      if sn(j,1) <>"" then x0=.item(sn(j,1))
    next
   
    combobox1.list = .keys
  end with
end sub
 
Laatst bewerkt:
Die moet ik maar eens testen (x0=), maar ik zie nu al een foutje. :P

Sinds wanneer ga jij bij rijen voor "j".
 
@HSV

immer; i en 1 en l vind ik niet onderscheidend genoeg. Meestal j voor rijen en jj voor kolommen.
Aan een Dictionary item kun je ook niets toewijzen.
 
Hallo, bedankt voor jullie reacties. Ik snap nu alleen niet waar ik deze codes moet plaatsen, aangezien die van mij begint met "Private Sub ComboBox1_DropButtonClick()" en die van jullie met "Private Sub UserForm_Initialize()"

Edit:

Ik zie al hoe jullie dat gedaan hebben, maar ik krijg een foutmelding.

Run-time error '429':
ActiveX component can't create object
 
Laatst bewerkt:
Heb je hier nu iets aan veranderd? Ik krijg nog steeds dezelfde foutmelding namelijk.

Edit:

Heb even snel op internet gezocht. Zou het er heel misschien aan kunnen liggen dat ik een Mac gebruik?
 
Laatst bewerkt:
Kijk eens in het testbestand naar de code van uw userform.
Ik heb de code van Snb erin gezet.
Hier krijg ik geen foutmeldingen.
En het is natuurlijk wel handig om te weten welke foutmelding jij dan krijgt.
Uw eigen code moet je wel verwijderen in het echte bestand.
 
Het zou best eens aan je Mac kunnen liggen.
Meestal zijn de codes Windows versus Mac niet uitwisselbaar.
 
Dat had ik gedaan ja. Mijn foutmelding had ik ook al eerder gegeven, maar hier even opnieuw.

Run-time error '429':
ActiveX component can't create object
 
Je kunt via de VBEditor een actieve verbinding leggen naar dit bestand door "Microsoft Scripting Runtime" bij de Referenties aan te vinken (Extra/referenties... of Tools/References)
 
Bedankt, maar helaas staat 'Microsoft Scripting Runtime' niet bij mij in het lijstje.
 
Alternatief.
Code:
Private Sub UserForm_Initialize()
 sn = Sheets("Dataset").Range("E2:E201")
   For j = 1 To UBound(sn)
      If InStr(c00, sn(j, 1)) = 0 Then c00 = c00 & "|" & sn(j, 1)
    Next
   ComboBox1.List = Split(Mid(c00, 2), "|")
End Sub
 
En hoe doe ik dat dan als ik een 2e ComboBox wil met data uit een andere kolom? Als ik hem kopieer en eronder plak en vervolgens de gegevens aanpas, dan krijg ik ook de gegevens van de eerste ComboBox erbij.

Edit:

Het is me al gelukt.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan