Thema Datum  Von Nutzer Rating
Antwort
21.04.2017 09:49:02 The_Materialist
Solved
Blau Sortieren einer ComboBox
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
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 11:13:05
Views:
649
Rating: Antwort:
  Ja
Thema:
Sortieren einer ComboBox

Soa ich hab mal versucht eine Lösung zusammen zu suchen:

 

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
  Elsea
    QuickSort ArrayToSort, i, High
    QuickSort ArrayToSort, Low, j
  End If
End Sub
Sub sort_ComboBox(box As MSForms.Combobox)
Dim l() As String
Dim value As String
Dim idx As Integer

ReDim l(box.ListCount) As String

Set l = box.List
Call QuickSort(l, 1, 20)

Do While box.ListCount > 0
    box.RemoveItem (0)
Loop

For idx = LBound(l) To UBound(l)
      box.AddItem (l(idx))
Next idx

box.value = value

End Sub

Das sind drei Routinen die folgendes machen: sort_allComboBoxes looped durch alle Comboboxen in einer userform und ruft sort_combobox auf. Sort_combobox sortiert eine Combobox indem sie die .list eigenschaft aufruft und sie in ein Array speichert und dann mit quicksort sortiert wird. Quicksort sortiert das array. Nach dme sortieren werden alle Elemente aus der Combobox gelöscht und wieder mit dem richtig sortierten Array befüllt. der Ausgewählte Wert wird gespeichert und wieder eingegeben nachdem die Combobox wieder befüllt ist.

 

Jetzt gibt es ein Problem bei dem Aufruf der sort_combobox routine Fehler 424 Objekt erforderlich. Die Combobox ist eine MSForms.ComboBox und sollte deshalb den Typ erfüllen. Die ComboBox existiert und die Zuweisung set box=frmFilter.DefaultFilter funktioniert. Box ist also nicht Nothing. Hat einer eine Idee was das Problem sein könnte?

 

Grüsse


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
Blau Sortieren einer ComboBox
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
21.04.2017 15:55:57 The_Materialist
NotSolved
21.04.2017 17:31:06 Gast76473
NotSolved