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:
644
Rating: Antwort:
  Ja
Thema:
Sortieren einer ComboBox
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
' copied from: https://msdn.microsoft.com/de-ch/library/bb979305.aspx at 21.4.17 10:20:00
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