Sortieren im Kombobox

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Sortieren im Kombobox
von: Franz W.
Geschrieben am: 07.12.2003 09:52:24

Guten Morgen Fachleute,

ich hab noch nicht sehr viel Ahnung von Komboboxen, darum hab ich da eine Frage:

Ich habe eine Namensliste in einer Tabelle, die nach den verschiedensten Kriterien sortiert wird, nur nicht alphabetisch. Diese Namensliste lese ich jetzt in eine Kombobox ein (mittels "ListFillRange").

In der Kombobox sollten die Namen aber immer alphabetisch sortiert sein, egal wie die Namen in der Tabelle grade sortiert sind. Gibt es da eine Möglichkeit?

Vielen Dank schon mal für Eure HIlfe und beste Grüße
Franz

Bild


Betrifft: AW: Sortieren im Combobox
von: Nepumuk
Geschrieben am: 07.12.2003 11:02:41

Hallo Franz,
das geht so nicht. Wenn du eine ComboBox / ListBox mit ListFillRange, oder in einem UserForm mittels RowSource füllst, ist der Inhalt der Box ein Abbild der Tabelle und daher nicht sortierbar. Da musst die Box entweder mit der AddItem - Methode oder über die List - Eigenschaft füllen.
Hier mal ein Beispiel, wie das sortieren in der ListBox eines UserForms funktioniert:
Option Explicit
Private Sub CommandButton1_Click()
    Call sortieren(0, ListBox1.ListCount - 1)
End Sub
Private Sub sortieren(Untergrenze As Long, Obergrenze As Long)
    Dim index1 As Long, index2 As Long, Element As String, Zwischenspeicher As String
    index1 = Untergrenze
    index2 = Obergrenze
    Zwischenspeicher = Val(ListBox1.List(((Untergrenze + Obergrenze) / 2) \ 1))
    Do
        Do While Val(ListBox1.List(index1)) < Val(Zwischenspeicher)
            index1 = index1 + 1
        Loop
        Do While Val(Zwischenspeicher) < Val(ListBox1.List(index2))
            index2 = index2 - 1
        Loop
        If index1 <= index2 Then
            Element = ListBox1.List(index1)
            ListBox1.List(index1) = ListBox1.List(index2)
            ListBox1.List(index2) = Element
            index1 = index1 + 1
            index2 = index2 - 1
        End If
    Loop Until index1 > index2
    If Untergrenze < index2 Then Call sortieren(Untergrenze, index2)
    If index1 < Obergrenze Then Call sortieren(index1, Obergrenze)
End Sub
Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 50 To 1 Step -1
        ListBox1.AddItem i
    Next
End Sub


Code eingefügt mit: Excel Code Jeanie

Gruß
Nepumuk


Bild


Betrifft: AW: Sortieren im Combobox
von: Franz W.
Geschrieben am: 07.12.2003 11:20:06

Hallo Nepumuk,

vielen Dank für Deine Hilfe, ich bin dran, das für mich umzusetzen, dauert aber ein bisschen. Habe die Idee, das so oder so ähnlich umzubauen und zusammenzusetzen, mal schauen ob ich's hinkriege, melde mich dann wieder:


Private Sub cmbSuchen_GotFocus()
   Call sortieren(0, cmbSuchen.ListCount - 1)
   Dim i As Integer
    For i = 50 To 1 Step -1
        ListBox1.AddItem i
    Next
End Sub



Vielen Dank einstweilen und Grüße
Franz


Bild


Betrifft: Nachfrage
von: Franz W.
Geschrieben am: 07.12.2003 12:12:13

Hallo Nepumuk,

hab grad noch an was anderem rum, drum erst jetzt meine Frage: seh ich dass richtig in Deinem Beispiel, dass die ListBox1 schon mit Werten gefüllt ist, die dann sortiert werden??? Und sollte ich das richtig kapiert haben, wie kommen in dem Beispiel die Werte in die Liste, wo ist die Quelle für die Werte?

Vielen DAnk schon mal und Grüße
Franz

P.S.: Ich bemüh mich ja redlich, aber ich bitte vielmals um Nachsicht, sollte das aus Deinem Code bereits hervorgehen :-()


Bild


Betrifft: AW: Nachfrage
von: Nepumuk
Geschrieben am: 07.12.2003 12:19:41

Hallo Franz,
das geschieht im UserForm_Initialize - Ereignis.
Gruß
Nepumuk


Bild


Betrifft: Danke, mache weiter
von: Franz W.
Geschrieben am: 07.12.2003 12:21:26




Bild


Betrifft: AW: Danke, mache weiter
von: Franz W.
Geschrieben am: 07.12.2003 13:32:57

Hallo Nepumuk,

da ist ja ganz schön was drin für mich!!! Bin schwer am kämpfen. Komme aber glaub ich langsam weiter. Kämpfe jetzt grad allerdings mit folgendem Problem:

Ich habe die Listbox 4-spaltig gemacht und versuche einen 4-spaltigen Zellenbereich mit dem Namen "Suchliste" einzulesen wie folgt:


Private Sub UserForm_Initialize()
        ListBox1.List = Range("Suchliste")
End Sub



Und jettz kommt die Fehlermeldung: " Eigenschaft List konnte nicht gesetzt werden. Index des Eigenschaftsfeldes ungültig. " Die Meldung kommt schon bei der Call-Anweisung in:


Private Sub CommandButton1_Click()
    Call sortieren(0, UserForm1.ListBox1.ListCount - 1)
    UserForm1.Show
End Sub


Kommentiere ich die Call-Zeile aus, dann kommt die Fehlermeldung eben bei der zweiten Zeile. Hat also anscheinend nichts mit dem Sortieren zu tun?!?

Was mache ich da falsch, bitte?

Grüße
Franz


Bild


Betrifft: Danke, ich hab's
von: Franz W
Geschrieben am: 07.12.2003 16:47:26

Hallo Nepumuk,

ich hab's, es muss heißen:


Private Sub UserForm_Initialize()
        ListBox1.List = Range("Suchliste").Value
End Sub



Was so ein kleiner Wörtchen ausmacht *ggg*

Grüße
Franz


Bild


Betrifft: AW: Sortieren im Kombobox
von: Thomas Risi
Geschrieben am: 07.12.2003 11:27:47

Hallo Franz

Auf meiner Webseite (Beispiele) sind einige Möglichkeiten beschrieben.

Gruß
Thomas

Risi Thomas Softwareentwicklung




Bild


Betrifft: AW: Sortieren im Kombobox
von: Franz W.
Geschrieben am: 07.12.2003 11:34:49

Hallo Thomas,

vielen Dank, werd ich anschauen...

Beste Grüße
Franz


Bild

Beiträge aus den Excel-Beispielen zum Thema " Sortieren im Kombobox"