Thema Datum  Von Nutzer Rating
Antwort
21.04.2017 09:49:02 The_Materialist
Solved
21.04.2017 11:13:05 The_Materialist
NotSolved
21.04.2017 11:25:00 Gast36559
NotSolved
21.04.2017 11:33:42 Gast75587
NotSolved
Rot Sortieren einer ComboBox
21.04.2017 15:55:57 The_Materialist
NotSolved
21.04.2017 17:31:06 Gast76473
NotSolved

Ansicht des Beitrags:
Von:
The_Materialist
Datum:
21.04.2017 15:55:57
Views:
797
Rating: Antwort:
  Ja
Thema:
Sortieren einer ComboBox
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Public Sub sort_allComboboxes()
Dim box As MSForms.Combobox
Dim idx As Integer
 
For idx = 1 To frmFilter.FilterCol.Count
      Set box = frmFilter.FilterCol.Item(idx).Filter
      sort_ComboBox box
      Set box = frmFilter.FilterCol.Item(idx).Options
      sort_ComboBox box
Next idx
 
End Sub
Public Sub QuickSort( _
                      ByRef ArrayToSort As Variant, _
                      ByVal Low As Long, _
                      ByVal High As Long)
Dim vPartition As Variant, vTemp As Variant
Dim i As Long, j As Long
  If Low > High Then Exit Sub  ' Rekursions-Abbruchbedingung
  ' Ermittlung des Mittenelements zur Aufteilung in zwei Teilfelder:
  vPartition = ArrayToSort((Low + High) \ 2)
  ' Indizes i und j initial auf die äußeren Grenzen des Feldes setzen:
  i = Low: j = High
  Do
    ' Von links nach rechts das linke Teilfeld durchsuchen:
    Do While ArrayToSort(i) < vPartition
      i = i + 1
    Loop
    ' Von rechts nach links das rechte Teilfeld durchsuchen:
    Do While ArrayToSort(j) > vPartition
      j = j - 1
    Loop
    If i <= j Then
      ' Die beiden gefundenen, falsch einsortierten Elemente
austauschen:
      vTemp = ArrayToSort(j)
      ArrayToSort(j) = ArrayToSort(i)
      ArrayToSort(i) = vTemp
      i = i + 1
      j = j - 1
    End If
  Loop Until i > j  ' Überschneidung der Indizes
  ' Rekursive Sortierung der ausgewählten Teilfelder. Um die
  ' Rekursionstiefe zu optimieren, wird (sofern die Teilfelder
  ' nicht identisch groß sind) zuerst das kleinere
  ' Teilfeld rekursiv sortiert.
  If (j - Low) < (High - i) Then
    QuickSort ArrayToSort, Low, j
    QuickSort ArrayToSort, i, High
  Else
    QuickSort ArrayToSort, i, High
    QuickSort ArrayToSort, Low, j
  End If
End Sub
Sub sort_ComboBox(box As MSForms.Combobox)
If box.ListCount = 0 Then
Else
Dim l() As String
Dim value As String
Dim idx As Integer
Dim i As Integer
ReDim l(0 To box.ListCount - 1) As String
 
frmFilter.EnableEvents = False
 
value = box.value
box.value = Null
 
For i = 0 To box.ListCount - 1
      l(i) = box.List(i)
Next i
Call QuickSort(l, 0, box.ListCount - 1)
 
Do While box.ListCount > 0
    box.RemoveItem (0)
Loop
 
For idx = LBound(l) To UBound(l)
      box.AddItem (l(idx))
Next idx
 
      If IsElement(box, value) Then
            box.value = value
      ElseIf box.Style = 0 Then
            box.value = value
      Else
            box.value = Null
      End If
       
frmFilter.EnableEvents = True
       
End If
 
End Sub

 

Soa das klappt jetzt. In der UserForm frmFilter befinden sich die ComboBoxen die sortiert werden sollen. Die Klasse FilterLine besteht aus 3 ComboBoxen : Filter, Operator und Option. Solange sortiert wird, wird die Eigenschaft frmFilter.EnableEvents auf False gestellt, bei allen _Change Events wird zuerst überprüft ob EnableEvents True ist sonst wird nichts ausgeführt. 

 

Bei Fragen einfach melden.

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
21.04.2017 09:49:02 The_Materialist
Solved
21.04.2017 11:13:05 The_Materialist
NotSolved
21.04.2017 11:25:00 Gast36559
NotSolved
21.04.2017 11:33:42 Gast75587
NotSolved
Rot Sortieren einer ComboBox
21.04.2017 15:55:57 The_Materialist
NotSolved
21.04.2017 17:31:06 Gast76473
NotSolved