• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

ComboBox sorteren

Status
Niet open voor verdere reacties.

ExcelAmateur

Terugkerende gebruiker
Lid geworden
25 aug 2010
Berichten
3.333
Hallo helpers,

Ik ben een beetje aan het puzzelen met een stukje code van HVS.
Dit gaat over het gesorteerd vullen van de ComboBox op een Formulier.

Zal wel iets niet goed doen, of de code staat niet op de juiste plaats.
Het lukt mij niet om de ComboBox zonder dubbele te vullen.

Wie wil hier even naar kijken?
 

Bijlagen

  • TestMap_Sorteren_ComboBox.xlsm
    26,6 KB · Weergaven: 49
Laatst bewerkt:
Die Sub Sorteren wordt nergens door aangeroepen, dus doet vrij weinig.

probeer dit eens.

Code:
Private Sub UserForm_Initialize()
Dim v, e
With Blad1.Range("Tabel1[Naam]")
    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 Me.ComboBox1.List = Application.Transpose(.keys)
End With
End Sub
 
SjonR,

Ik had ook gezien dat het niets deed maar wist niet waar het aanlag.
De code vond ik en wilde het eens testen, je moet toch wat doen.

Je code werkt perfect, hartelijk bedankt. :thumb:
 
Aan die code van @SjonR heb je toch niets?
Die sorteert niet.
Code:
Private Sub UserForm_Initialize()
  With CreateObject("System.Collections.ArrayList")
    For Each cl In Blad1.Range("Tabel1[Naam]")
      If Trim(cl) <> "" And Not .contains(cl) Then .Add Trim(cl)
    Next cl
       .Sort
    ComboBox1.List = .toarray()
  End With
End Sub
 
Goedemiddag Harry,

Mijn ( van internet geplukte en aangepaste) code sorteert niet, maar toont wel de unieke waarden. Jouw code sorteert, maar toont ook de dubbele waarden.

Gr.

Sjon
 
Goedemiddag Sjon.

Ik lees nergens dat het unieke waarden moeten zijn.

Kleine aanpassing in de code voor unieke waarden.
Code:
Private Sub UserForm_Initialize()
  With CreateObject("System.Collections.ArrayList")
    For Each cl In Blad1.Range("Tabel1[Naam]")
      If Trim(cl) <> "" And Not .contains(cl[COLOR=#0000ff].Value[/COLOR]) Then .Add Trim(cl)
    Next cl
       .Sort
    ComboBox1.List = .toarray()
  End With
End Sub

Ps. je moet ook niet alles van internet plukken, want die code kan veel korter. :p
 
Magistraal!

Ik pluk jouw codes wel van internet :)
 
Altijd mooi als ik iemand een dienst kan bewijzen, maar dan had het er ongeveer zo uit gezien. :d
Code:
Private Sub UserForm_Initialize()
sn = Blad1.Range("Tabel1[Naam]")
With CreateObject("scripting.dictionary")
 .comparemode = 1  'geen onderscheid tussen hoofd- of kleine letters
    For i = 1 To UBound(sn)
      .Item(sn(i, 1)) = ""
    Next
 ComboBox1.List = .keys
End With
End Sub
 
Laatst bewerkt:
Een langere maar wat eenvoudiger te volgen code.

Code:
Private Sub UserForm_Initialize()
With Blad1.ListObjects(1).DataBodyRange
  ar = .Value
  .Sort .Columns(1), , , , , , , xlYes
  For j = 1 To .Rows.Count
    If InStr(c00, .Cells(j, 1)) = 0 Then c00 = c00 & "|" & .Cells(j, 1)
  Next j
  ComboBox1.List = Split(Mid(c00, 2), "|")
  .Value = ar
End With
End Sub
 
Nu we toch bezig zijn:

omdat de arraylist geen 'key' heeft moeten we .contains(it) gebruiken

Code:
Private Sub UserForm_Initialize()
  sn = Sheets("Blad1").Range("Tabel1[Naam]")
  
  With CreateObject("System.Collections.ArrayList")
    For Each it In sn
      If Not .contains(it) Then .Add it
    Next
    .Sort

    ComboBox1.List = .toarray
  End With
End Sub

of met sortedlist die wel een '.key' heeft

Code:
Private Sub UserForm_Initialize()
  sn = Sheets("Blad1").Range("Tabel1[Naam]")
  
  With CreateObject("System.Collections.sortedList")
    For Each it In sn
      .Item(it) = it
    Next

    ReDim sp(.Count - 1)
    For j = 0 To ubound(sp)
      sp(j) = .getkey(j)
    Next

    ComboBox1.List = sp
  End With
End Sub
 
Laatst bewerkt:
Allen hartelijk bedankt voor de code.

Ik was aan het proberen om de code die HVS geplaatst had bij gast0219, aan de praat te krijgen.

Ben nu aan het proberen om de volgende ComboBox, met het restant wat overblijft na het sorteren, te vullen.
Dit wil echter niet lukken, denk dat dit komt omdat er een tabel gebruikt wordt.

Prettig weekend.
 
In tegendeel:

waar in #6 gebruik gemaakt wordt van een range in de for each lus, wordt in #11 gebruik gemaakt van een array (slechts 1 keer uitgelezen uit het werkblad).
 
De Ts mag er wel wat voor doen om iets te leren zie #8.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan