Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
840to844
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
840to844
840to844
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

QuickSort ... kleines Problem mit ComboBox.

QuickSort ... kleines Problem mit ComboBox.
05.02.2007 22:14:32
proxima05
Hallo,
über den folgenden Code sortiere ich ein Daten-Array und schreibe es alphabetisch in eine ComboBox (Anzeige dort dreispaltig). Jetzt habe ich aber zwei unschöne Nebeneffekte festgestellt (denen ich bei einspaltiger Darstellung Herr geworden bin, bisher bei mehrspaltiger D. nicht so richtig):
[1] In die Liste der ComboBox werden auch leere Datenfelder aus dem Array übertragen und merkwürdigerweise oberhalb der sortierten Daten angezeigt. Ich hätte gerne, dass die leeren Datenfelder gar nicht erst in die ComboBox übertragen werden.
[2] Unter die alphabetisch sortierten Daten werden ein weiteres Mal diejenigen alphabetisch sortiert angehängt, die in der ersten Spalte des Array stehen (Spalte zwei und drei werden in der Anzeige aber unterschlagen). Woran liegt das und wie kann man es verhindern?
Hier der Code:

Private Sub Userform_Activate()
Dim i As Integer
Dim varArrav
With Worksheets("Cash Flow")
varArrav = .Range("AF19:AH33")
UserForm3.ComboBox1.ColumnCount = 3
UserForm3.ComboBox1.ColumnWidths = "40 pt;50 pt;40 pt"
ComboBox1.List = varArrav
ComboBox1.ListIndex = 0
End With
Call QuickSort(1, UBound(varArrav), varArrav)
ComboBox1.List = varArrav
'schreiben (Daran liegt es wahrscheinlich, dass mehrfach, inkl. Leerzeilen
'in die ComboBox geschrieben wird; in einer einspaltigen Darstellung klappte
'es jedoch)
For i = LBound(varArrav) To UBound(varArrav)
If varArrav(i, 1) <> "" Then
UserForm3.ComboBox1.AddItem (varArrav(i, 1))
End If
Next i
End Sub


Private Sub QuickSort(lngUgrenze As Long, lngOgrenze As Long, varFeld)
Dim lngIndex1 As Long, lngIndex2 As Long, varElement As Variant, varSpeicher As Variant, intSpalte As Integer
lngIndex1 = lngUgrenze
lngIndex2 = lngOgrenze
varSpeicher = varFeld(((lngUgrenze + lngOgrenze) / 2) \ 1, 1) 'der Wert hinter dem Komma ist die Spalte die sortiert wird
Do
Do While varFeld(lngIndex1, 1) < varSpeicher 'der Wert hinter dem Komma ist die Spalte die sortiert wird
lngIndex1 = lngIndex1 + 1
Loop
Do While varSpeicher < varFeld(lngIndex2, 1) 'der Wert hinter dem Komma ist die Spalte die sortiert wird
lngIndex2 = lngIndex2 - 1
Loop
If lngIndex1 <= lngIndex2 Then
For intSpalte = 1 To 3 '3 Spalten übertragen
varElement = varFeld(lngIndex1, intSpalte)
varFeld(lngIndex1, intSpalte) = varFeld(lngIndex2, intSpalte)
varFeld(lngIndex2, intSpalte) = varElement
Next
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
End If
Loop Until lngIndex1 > lngIndex2
If lngUgrenze < lngIndex2 Then Call QuickSort(lngUgrenze, lngIndex2, varFeld)
If lngIndex1 < lngOgrenze Then Call QuickSort(lngIndex1, lngOgrenze, varFeld)
End Sub

Wäre klasse, wenn da jemand helfen könnte.
Danke & Gruß
Ralph

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: QuickSort ... kleines Problem mit ComboBox.
06.02.2007 00:43:44
fcs
Hallo Ralph,
passe deine Initialisiierungs-Prozedur wir folgt an. Dann sollte es funktionieren.
Gruß
Franz

Private Sub Userform_Activate()
Dim i As Integer
Dim varArrav
With Worksheets("Cash Flow")
varArrav = .Range("AF19:AH33")
End With
Call QuickSort(1, UBound(varArrav), varArrav)
With UserForm3
.ComboBox1.ColumnCount = 3
.ComboBox1.ColumnWidths = "40 pt;50 pt;40 pt"
.ComboBox1.List = varArrav
'Leereinträge aus Tabelle Spalte AF in Combobox-Auswahlliste löschen
For i = .ComboBox1.ListCount - 1 To 0 Step -1
If .ComboBox1.List(i, 0) = "" Then
.ComboBox1.RemoveItem (i)
End If
Next i
.ComboBox1.ListIndex = 0
End With
End Sub

Anzeige
AW: QuickSort ... kleines Problem mit ComboBox.
06.02.2007 09:51:58
proxima05
Hallo Franz,
danke für Deine Antwort ... damit klappt es hervorragend.
Trotzdem bin ich noch über einen Punkt gestossen. Die gefüllte Liste in der ComboBox wird, wenn sie aufgeklappt wird, nicht mehr mit einer Bildlaufleiste angezeigt. Bei einigen wenigen Einträgen nicht weiter problematisch, aber da die Liste wächst ist es unschön, wenn sich eine lange "Schriftrolle" nach unten öffnet .... lässt sich das ändern?
Danke & Gruß
Ralph
AW: noch ein kleines Problem ...
06.02.2007 10:07:51
proxima05
Franz,
außer den beschriebenen Bildlaufleisten habe ich noch die Schwierigkeit, dass beim Öffnen des UF die ComboBox gleich mit dem ersten Dateneintrag angezeigt wird .... ich habe schon mit .Clear versucht, aber das Textfeld der ComboBox bleibt nicht leer.
Noch eine Idee?
Danke
Ralph
Anzeige
AW: noch ein kleines Problem ...
06.02.2007 10:12:00
fcs
Hallo Ralph zum2.
ändere in der Activate-Prozedur die Zeile
.ComboBox1.ListIndex = 0
in
.ComboBox1.ListIndex = -1
oder lösche die Zeile komplett
Gruß
Franz
AW: QuickSort ... kleines Problem mit ComboBox.
06.02.2007 10:08:27
fcs
Hallo Ralph,
bei Comboboxen kannst du mit der Eigenschaft "ListRows" festlegen wie viele Einträge beim Anklicken der Combobox maximal angezeigt werden sollen - Standard sind 8 Reihen. Wird die Zahl der wählbaren Einträge größer dann wird automatisch ein vertikaler Scroll-Balken eingeblendet.
Gruß
Franz
AW: QuickSort ... kleines Problem mit ComboBox.
06.02.2007 14:20:45
proxima05
Franz, ich bin sprachlos! ..... herrlich wie das alles so klappt!
Allerbesten Dank für den Support.
Gruß
Ralph
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige