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.
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.
Ablauf
- Klick auf den Überschrifts-Button
SortColumn("Feldname")wird aufgerufen- Diese übergibt Form, Feldname und ActiveControl an
ToggleSort() 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.




