Hoe kan ik data uit 2 tabellen in 2 comboxen alfabetisch rangschikken?

Status
Niet open voor verdere reacties.

Kwabbernoot1980

Gebruiker
Lid geworden
10 aug 2011
Berichten
32
In bijlage vinden jullie een bestand met 2 comboboxen waarvan de data uit 2 verschillende tabellen komt.

Ik wil deze lijst kunnen aanvullen, waarbij de data uit de tabel in de combobox automatisch alfabetisch sorteert.

Ik zit hier al een tijd suf op te piekeren. Hopelijk heeft iemand de oplossing, die volgens mij toch niet zo moeilijk kan zijn!

alvast bedankt.
Dave
 

Bijlagen

Het gemakkelijkst is om de data op het blad te sorteren.
Hier een code om dat niet te willen.
Code:
Private Sub UserForm_Initialize()
 For Each cl In Range("Test")
  If cl > 0 Then
    cl.Name = cl
   End If
  Next

For Each cl In Application.Names
  c01 = c01 & "|" & cl.Name
 Next
ComboBox1.List = Filter(Split(Mid(c01, 2), "|"), "Test", False)
 
For Each cl In Application.Names
  If cl.Name <> "Test" Then
    If cl.Name <> "Testtwee" Then
     cl.Delete
   End If
  End If
Next

For Each cl In Range("Testtwee")
  If cl > 0 Then
    cl.Name = cl
   End If
  Next
c01 = ""
 For Each cl In Application.Names
  c01 = c01 & "|" & cl.Name
 Next
ComboBox2.List = Filter(Split(Mid(c01, 2), "|"), "Test", False)
 
 For Each cl In Application.Names
  If cl.Name <> "Test" Then
   If cl.Name <> "Testtwee" Then
    cl.Delete
   End If
  End If
 Next
End Sub
 

Bijlagen

Bedankt HSV, het werkt!
Ik heb nog wel een vraagje, ik kan namelijk niet goed uit aan de opbouw van deze code...

Hoe kan ik meerdere sheets opnemen in deze code, dus uitbreiden? Bv ik heb nu sheets Test & Test2. Stel dat ik nog Test3, Test4 & Test5 heb. In deze sheets staat dus allemaal data. Bijgevolg ook ComboBox3, ComboBox4 & ComboBox5 en uiteraard ook de nodige CommandButtons. Ik heb het geprobeerd met volgende code, maar krijg dan een foutmelding:

Code:
Private Sub UserForm_Initialize()
 For Each cl In Range("Test")
  If cl > 0 Then
    cl.Name = cl
   End If
  Next

For Each cl In Application.Names
  c01 = c01 & "|" & cl.Name
 Next
ComboBox1.List = Filter(Split(Mid(c01, 2), "|"), "Test", False)
 
For Each cl In Application.Names
  If cl.Name <> "Test" Then
    If cl.Name <> "Testtwee" Then
If cl.Name <> "Testdrie" Then
     cl.Delete
   End If
  End If
End If
Next

For Each cl In Range("Testtwee")
  If cl > 0 Then
    cl.Name = cl
   End If
End If
  Next
c01 = ""
 For Each cl In Application.Names
  c01 = c01 & "|" & cl.Name
 Next
ComboBox2.List = Filter(Split(Mid(c01, 2), "|"), "Test", False)
 
 For Each cl In Application.Names
  If cl.Name <> "Test" Then
   If cl.Name <> "Testtwee" Then
If cl.Name <> "Testdrie" Then
    cl.Delete
   End If
  End If
End If
 Next

For Each cl In Range("Testdrie")
  If cl > 0 Then
    cl.Name = cl
   End If
End If
  Next
c01 = ""
 For Each cl In Application.Names
  c01 = c01 & "|" & cl.Name
 Next
ComboBox3.List = Filter(Split(Mid(c01, 2), "|"), "Test", False)
 
 For Each cl In Application.Names
  If cl.Name <> "Test" Then
   If cl.Name <> "Testtwee" Then
If cl.Name <> "Testdrie" Then
    cl.Delete
   End If
  End If
End If
 Next


End Sub


alvast bedankt voor de hulp!
 
Laatst bewerkt door een moderator:
Je bereik A1:A20 van elk blad heb ik een naam gegeven (Test, Testtwee, Testdrie).
De namen lijken op elkaar zodat de code korter kan (zie rode tekst in de code).
Misschien kan het veel eenvoudiger door je bereik op je bladen te sorteren.

Graag codetags gebruiken.
Code:
Private Sub UserForm_Initialize()
 For Each cl In Range("Test")
  If cl > 0 Then
    cl.Name = cl
   End If
  Next

For Each cl In Application.Names
  c01 = c01 & "|" & cl.Name
 Next
ComboBox1.List = Filter(Split(Mid(c01, 2), "|"), "Test", False)
 
For Each cl In Application.Names
  [COLOR="red"]If Not cl.Name Like "*Test*" Then[/COLOR]    
     cl.Delete
   End If
  Next

For Each cl In Range("Testtwee")
  If cl > 0 Then
    cl.Name = cl
   End If
  Next
c01 = ""
 For Each cl In Application.Names
  c01 = c01 & "|" & cl.Name
 Next
ComboBox2.List = Filter(Split(Mid(c01, 2), "|"), "Test", False)
 
 For Each cl In Application.Names
  If Not cl.Name Like "*Test*" Then
    cl.Delete
   End If
 Next
 
 For Each cl In Range("Testdrie")
  If cl > 0 Then
    cl.Name = cl
   End If
  Next
c01 = ""
 For Each cl In Application.Names
  c01 = c01 & "|" & cl.Name
 Next
ComboBox3.List = Filter(Split(Mid(c01, 2), "|"), "Test", False)
 
 For Each cl In Application.Names
  If Not cl.Name Like "*Test*" Then
    cl.Delete
   End If
 Next
End Sub
 
Laatst bewerkt:
Deze plaatst het ongesorteerde variabele bereik van elk werkblad in een array, sorteert de array en plaatst deze in de respectievelijke combobox. De code werkt enkel indien er evenveel werkbladen als comboboxen zijn en de werkbladen in dezelfde volgorde staan als de comboboxen.
Code:
Private Sub UserForm_Initialize()
For i = 1 To Sheets.Count
With Sheets(i)
    sq = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
End With
For lLoop = 1 To UBound(sq)
    For lLoop2 = lLoop To UBound(sq)
        If UCase(sq(lLoop2, 1)) < UCase(sq(lLoop, 1)) Then
            str1 = sq(lLoop, 1)
            str2 = sq(lLoop2, 1)
            sq(lLoop, 1) = str2
            sq(lLoop2, 1) = str1
        End If
    Next lLoop2
Next lLoop
Me("ComboBox" & i).List = sq
Next
End Sub
 
De code werkt enkel indien er evenveel werkbladen als comboboxen zijn en de werkbladen in dezelfde volgorde staan als de comboboxen.

Hoi Rudi,

Als er meerdere bladen zijn dan comboboxen is dat wel op te lossen met een
'On Error Resume Next'.
Maar de bladen moeten zoals door jou aangegeven wel in volgorde staan.

Mooie code. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan