Endlosformulare in MS Access sortieren – mit einem Klick

Sortierpfeile gibt es überall – im Datei-Explorer, in Excel, auf Webseiten. Nur in Access nicht. Also bauen wir sie uns selbst: komfortables Spalten-Sortieren für Endlosformulare mit zwei Funktionen, CommandButton-Überschriften und Icons aus den MSysResources.

Wer kennt sie nicht – die kleinen Sortierpfeile in Spaltenüberschriften: im Datei-Explorer, in Excel, auf Webseiten, in fast jedem modernen Programm. Nur in Access? Fehlanzeige. Was Access nicht kann, bauen wir uns eben selbst.

Abbildung 1: So cool kann ein Endlosformular aussehen.

Was brauchen wir dafür?

  • Die Hauptfunktion ToggleSort() regelt alles: Sortierrichtung umschalten, Icons setzen.
  • Die Wrapper-Funktion SortColumn() ruft die Hauptfunktion auf und übergibt die Parameter.
  • Ein paar CommandButtons als Spaltenüberschriften.
  • Drei Icons, um die Sortierrichtung anzuzeigen.

Warum zwei Funktionen?

Ganz einfach: Statt für jede Spaltenüberschrift ein eigenes Click-Event zu bauen, nutzen wir eine zentrale Funktion im Formular. Beim Klick übergeben wir nur den Feldnamen an SortColumn(), und diese kümmert sich um den Rest.

Abbildung 2: Die Überschriften als CommandButtons in der Entwurfsansicht.

Ablauf

  1. Klick auf den Überschrifts-Button
  2. SortColumn("Feldname") wird aufgerufen
  3. Diese übergibt Form, Feldname und ActiveControl an ToggleSort()
  4. ToggleSort() sortiert die gewünschte Spalte (ASC/DESC) und ändert das Icon entsprechend

Die Funktionen

1. Die Hauptfunktion: ToggleSort()

Public Sub ToggleSort(frm As Form, columnName As String, sortControl As Control)

    Dim currentSort As String   ' aktuelle Sortierung des Formulars
    Dim newSort     As String   ' Sortier-String für das Formular
    Dim sortDir     As String   ' Sortierrichtung (ASC/DESC)
    Dim sortPicture As String   ' Name des Bildes (MSysResources) für den Button
    Dim ctrl        As Control  ' um durch die CommandButtons zu laufen

    Application.Echo False

    ' aktuelle Sortierung holen
    currentSort = Nz(frm.OrderBy, "")

    ' Standard: aufsteigend, wenn noch keine Sortierung gesetzt ist
    sortDir = "ASC"
    sortPicture = "sort_ASC"

    ' prüfen, ob bereits sortiert wird
    If InStr(1, currentSort, "[" & columnName & "] DESC", vbTextCompare) > 0 Then
        sortDir = "ASC"
        sortPicture = "sort_ASC"
    ElseIf InStr(1, currentSort, "[" & columnName & "] ASC", vbTextCompare) > 0 Then
        sortDir = "DESC"
        sortPicture = "sort_DESC"
    ElseIf InStr(1, currentSort, "[" & columnName & "]", vbTextCompare) > 0 Then
        ' nur Spaltenname ohne Richtung: absteigend annehmen
        sortDir = "DESC"
        sortPicture = "sort_DESC"
    End If

    ' neue Sortierung setzen
    newSort = "[" & columnName & "] " & sortDir
    frm.OrderBy = newSort
    frm.OrderByOn = True

    ' Icons aller Sort-Buttons zurücksetzen
    For Each ctrl In frm.Controls
        If ctrl.ControlType = acCommandButton And Left(ctrl.Name, 8) = "cmdSort_" Then
            ctrl.Picture = "sort_X"
        End If
    Next ctrl

    ' Icon für das aktive Control setzen
    sortControl.Picture = sortPicture

    Application.Echo True

End Sub

2. Die Wrapper-Funktion: SortColumn()

Private Function SortColumn(sColumn As String)
    Call ToggleSort(Me, sColumn, Me.ActiveControl)
End Function

Die Icons – woher?

Noch nie von MSysResources gehört? Dann wird’s Zeit: Systemobjekte einblenden (Rechtsklick → Navigationsoptionen) – und da liegt die versteckte Icon-Goldgrube. Die Icons lassen sich austauschen, mach dein Access-Design einzigartig.

  • ▶️ sort_X → neutral
  • 🔼 sort_ASC → aufsteigend
  • 🔽 sort_DESC → absteigend

Warum Buttons statt Labels für die Überschriften? Nur CommandButtons können Icons, Mouseover-Effekte und ein geändertes Cursor-Symbol – Labels können das alles nicht.

Fazit

Mit minimalem Aufwand bringst du komfortables Sortieren in deine Access-Formulare: einmal implementieren, überall verwenden – ohne VBA-Wildwuchs, beliebig viele Spalten, komplett wartbar. Die ausführliche Beschreibung und alle Hinweise findest du wie gewohnt gut dokumentiert direkt im Code.

Download

Komfortables Sortieren von Endlosformularen in MS Access – mit ToggleSort(), einer Wrapper-Funktion und Icons aus den MSysResources. Einmal implementieren, überall nutzen.