Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Combobox Inhalt sortieren

Combobox Inhalt sortieren
Jockel
Hallo
ich lade mit folgendem Code eine Combobox:
Private Sub CommandButton8_Click()
Dim objDic As Object
Dim Bereich As Range
Dim Zelle As Range
Set objDic = CreateObject("Scripting.Dictionary")
With Sheets("Makros")
Set Bereich = .Range(.Range("A17"), .Range("A17").End(xlDown))
End With
For Each Zelle In Bereich
objDic(Zelle.Value) = 0
Next
ComboBox1.List = objDic.keys
End Sub

Nun möchte ich den Inhalt der Combobox noch sortieren, finde aber keine Sortier-Eigenschaft.
Kann mir da jemand weiter helfen ?
Danke
Jockel
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Sortier-Eigenschaft
07.01.2011 12:56:11
Rudi
Hallo,
die gibt's auch nicht.
oDict.keys in ein Array, das sortieren und dann der Liste zuweisen.
Suche nach QuickSort.
Gruß
Rudi
AW: Sortier-Eigenschaft
07.01.2011 13:05:15
Jockel
Hi,
wie findet da der Aufruf statt ? Habe beim googeln sowas gefunden:
QuickSort objDic
Das funktioniert aber nicht.
Danke
Jockel
Anzeige
AW: Sortier-Eigenschaft
07.01.2011 13:11:46
Rudi
Hallo,
ich hab doch geschrieben einem Array zuweisen
arrKeys=ODict.Keys
QuickSort arrKeys
Combobox1.List=arrKeys
Gruß
Rudi
AW: Sortier-Eigenschaft
07.01.2011 13:22:34
Jockel
Hi,
Sorry, ich bin aber nicht so fit in VBA. Dazu benötige ich aber noch die Function quickSort ?
Ohne die geht es doch nicht , oder verstehe ich das ganz falsch ?
Gruß
Jockel
Anzeige
AW: Sortier-Eigenschaft
07.01.2011 13:24:56
Rudi
Hallo,
natürlich brauchst du die.
Sub QuickSort(ByRef VA_array, Optional V_Low1, Optional V_high1)
On Error Resume Next
Dim V_Low2, V_high2, V_loop As Integer
Dim V_val1, V_val2 As Variant
If IsMissing(V_Low1) Then
V_Low1 = LBound(VA_array, 1)
End If
If IsMissing(V_high1) Then
V_high1 = UBound(VA_array, 1)
End If
V_Low2 = V_Low1
V_high2 = V_high1
V_val1 = VA_array((V_Low1 + V_high1) / 2)
While (V_Low2  V_val1 And _
V_high2 > V_Low1)
V_high2 = V_high2 - 1
Wend
If (V_Low2  V_Low1) Then Call _
QuickSort(VA_array, V_Low1, V_high2)
If (V_Low2 

Gruß
Rudi
Anzeige
AW: Sortier-Eigenschaft
07.01.2011 14:36:13
Jockel
Hi,
sorry, aber das Sortieren funtioniert immer noch nicht. Ich habe vergessen zu erwähnen., das die Combobox auf einer UserForm sitzt. kann es daran liegen ? Was ist daran falsch ?
Private Sub CommandButton8_Click()
Dim objDic As Object
Dim ODict As Object
Dim Bereich As Range
Dim Zelle As Range
Set objDic = CreateObject("Scripting.Dictionary")
With Sheets("Makros")
Set Bereich = .Range(.Range("A17"), .Range("A17").End(xlDown))
End With
For Each Zelle In Bereich
objDic(Zelle.Value) = 0
Next
arrKeys = ODict.Keys
QuickSort arrKeys
ComboBox1.List = arrKeys
'ComboBox1.List = objDic.Keys 'Unikate der ComboBox zuweisen
End Sub

Anzeige
AW: Sortier-Eigenschaft
07.01.2011 17:21:29
Christian
Rudi,
du fütterst das Dictionary objDic mit deinen Werten und anschließend willst du ODict sortieren. Fällt dir was auf?
Gruß
Christian
ich meinte natürlich Jockel, nicht Rudi (oT)
07.01.2011 17:29:33
Christian
AW: Sortier-Eigenschaft
07.01.2011 17:53:06
Jockel
Hi Christian,
das heist , ich muss objDic sortieren (QuickSort objDic) ?
Jockel
Anzeige
nee ...
07.01.2011 19:09:41
Christian
schreibe:
arrKeys = objDic.Keys
statt:
arrKeys = ODict.Keys
Gruß
Christian
Super, vielen Dank, jetzt klappts owT
07.01.2011 19:45:38
Jockel
;
Anzeige
Anzeige

Infobox / Tutorial

Combobox Inhalt sortieren in VBA


Schritt-für-Schritt-Anleitung

Um den Inhalt einer Combobox in Excel VBA zu sortieren, kannst du die folgenden Schritte befolgen:

  1. Erstelle ein Dictionary: Verwende ein Scripting.Dictionary, um die Werte zu speichern. Dies ermöglicht dir, nur einzigartige Werte zu behalten.

    Dim objDic As Object
    Set objDic = CreateObject("Scripting.Dictionary")
  2. Fülle das Dictionary: Lade die Werte aus einem bestimmten Bereich in das Dictionary.

    Dim Bereich As Range
    Dim Zelle As Range
    With Sheets("Makros")
       Set Bereich = .Range(.Range("A17"), .Range("A17").End(xlDown))
    End With
    For Each Zelle In Bereich
       objDic(Zelle.Value) = 0
    Next
  3. Sortiere die Keys: Übertrage die Keys des Dictionaries in ein Array und sortiere dieses Array. Du kannst dafür eine QuickSort-Funktion verwenden.

    Dim arrKeys As Variant
    arrKeys = objDic.Keys
    QuickSort arrKeys
  4. Weise die sortierten Keys der Combobox zu: Setze die sortierten Werte in die Combobox.

    ComboBox1.List = arrKeys
  5. QuickSort Funktion: Stelle sicher, dass du die QuickSort-Funktion in deinem Modul hast, um die Werte im Array zu sortieren.

    Sub QuickSort(ByRef VA_array, Optional V_Low1, Optional V_high1)
       ' Implementierung der QuickSort-Logik
    End Sub

Häufige Fehler und Lösungen

  • Fehler: ODict anstelle von objDic verwenden
    Wenn du versuchst, ODict.Keys zu verwenden, anstatt objDic.Keys, wirst du einen Fehler erhalten. Achte darauf, dass du das richtige Dictionary referenzierst.

  • Fehler: Sortierung funktioniert nicht
    Stelle sicher, dass die QuickSort-Funktion richtig implementiert ist und dass das Array nicht leer ist, bevor du versuchst, es zu sortieren.

  • Fehler: Combobox auf UserForm
    Wenn die Combobox auf einer UserForm sitzt, vergewissere dich, dass du die richtige Referenz zur Combobox verwendest (z.B. Me.ComboBox1.List).


Alternative Methoden

Eine alternative Methode, um die Werte einer Combobox zu sortieren, besteht darin, die Werte direkt in einer Excel-Tabelle zu sortieren, bevor du sie in die Combobox lädst. Du könntest die Sort-Methode verwenden, um die Daten in einem Bereich zu sortieren und anschließend die Werte in die Combobox zu laden.

With Sheets("Makros")
    .Range("A17:A" & LastRow).Sort Key1:=.Range("A17"), Order:=xlAscending, Header:=xlNo
End With
ComboBox1.List = Application.Transpose(Sheets("Makros").Range("A17:A" & LastRow).Value)

Praktische Beispiele

Hier ist ein einfaches Beispiel, das die oben beschriebenen Schritte zusammenführt:

Private Sub CommandButton8_Click()
    Dim objDic As Object
    Set objDic = CreateObject("Scripting.Dictionary")

    Dim Bereich As Range
    Dim Zelle As Range
    With Sheets("Makros")
        Set Bereich = .Range(.Range("A17"), .Range("A17").End(xlDown))
    End With

    For Each Zelle In Bereich
        objDic(Zelle.Value) = 0
    Next

    Dim arrKeys As Variant
    arrKeys = objDic.Keys
    QuickSort arrKeys
    ComboBox1.List = arrKeys
End Sub

Sub QuickSort(ByRef VA_array, Optional V_Low1, Optional V_high1)
    ' Implementierung der QuickSort-Logik
End Sub

Tipps für Profis

  • Verwende ein Dictionary für einzigartige Werte: Das Scripting.Dictionary ist ideal, um doppelte Werte zu vermeiden, was besonders nützlich ist, wenn du mit großen Datenmengen arbeitest.

  • Optimierung der Sortierfunktion: Überlege, die QuickSort-Funktion zu optimieren oder eine andere Sortiermethode zu verwenden, wenn du mit sehr großen Arrays arbeitest, um die Leistung zu verbessern.

  • Fehlerbehandlung einfügen: Implementiere Fehlerbehandlungsroutinen, um mögliche Laufzeitfehler zu erfassen und zu behandeln, besonders beim Arbeiten mit Benutzerformularen.


FAQ: Häufige Fragen

1. Wie kann ich die Combobox mit Werten aus mehreren Spalten füllen?
Du kannst mehrere Spalten in ein Array laden und die Werte dann in einer kombinierten Liste in der Combobox anzeigen.

2. Was muss ich tun, wenn die QuickSort-Funktion nicht funktioniert?
Überprüfe die Implementierung der QuickSort-Funktion und stelle sicher, dass sie korrekt und vollständig ist. Außerdem solltest du sicherstellen, dass du die richtigen Parameter übergibst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige