Select Case in der Praxis

Wer VBA-Bedingungen schreibt, greift fast automatisch zu If…Then…ElseIf. Das funktioniert, wird aber bei mehr als zwei, drei Zweigen schnell unübersichtlich – und fehleranfällig, weil jede Zeile den Prüfausdruck wiederholt. Select Case ist die Alternative: kompakter, lesbarer und in vielen Fällen auch schneller. Dieser Beitrag zeigt die Grundform, alle Varianten der Case-Klausel und drei Praxismuster, die über das hinausgehen, was die meisten VBA-Entwickler kennen.

Die Grundform

Select Case prüft einen Ausdruck gegen eine Reihe von Werten. Trifft ein Case-Zweig zu, führt VBA die darin enthaltenen Anweisungen aus und springt danach direkt zu End Select – es gibt kein Durchfallen wie in manchen anderen Sprachen:

Select Case intWochentag
    Case 1
        strName = "Montag"
    Case 2
        strName = "Dienstag"
    Case 3
        strName = "Mittwoch"
    Case Else
        strName = "(anderer Tag)"
End Select

Der Ausdruck hinter Select Case wird genau einmal ausgewertet. Das ist ein Vorteil gegenüber einer If…ElseIf-Kette, in der wir denselben Ausdruck in jeder Zeile wiederholen müssten.

Bei aufwendigen Funktionsaufrufen spart das nicht nur Tipparbeit, sondern auch Rechenzeit.

Case Else als Sicherheitsnetz

Der Case Else-Zweig fängt alles auf, was keiner der vorangehenden Case-Klauseln entspricht. Er ist optional, aber in der Praxis fast immer empfehlenswert – er macht explizit, was passiert, wenn ein unerwarteter Wert auftaucht. Das gilt besonders für Eingaben von Benutzern oder Werte aus Datenbanken, die sich jederzeit ändern können.

Wer sicher ist, dass alle möglichen Werte abgedeckt sind, kann Case Else als Wachposten nutzen – mit einer Fehlermeldung, die auf den Programmierfehler hinweist:

Case Else
    Err.Raise vbObjectError + 1001, _
        "StatusText", "Unbekannter Status: " & intStatus

Mehrere Werte in einer Case-Klausel

Eine Case-Klausel kann mehrere Werte aufnehmen, durch Komma getrennt. Das spart Zweige, wenn dieselbe Aktion für verschiedene Werte gelten soll:

Select Case intWochentag
    Case 1, 2, 3, 4, 5
        strTyp = "Werktag"
    Case 6, 7
        strTyp = "Wochenende"
End Select

Die Werte müssen nicht aufeinanderfolgend sein. Case 1, 3, 5, 7 ist genauso gültig. Bei aufeinanderfolgenden Werten gibt es allerdings eine elegantere Lösung – den To-Bereich.

Bereiche mit To

Mit Case 1 To 5 prüfen wir, ob der Wert zwischen 1 und 5 liegt – beide Grenzen eingeschlossen. Das funktioniert auch mit Strings und Datumsangaben. Das Wochentagbeispiel von eben wird damit noch kompakter:

Select Case intWochentag
    Case 1 To 5
        strTyp = "Werktag"
    Case 6 To 7
        strTyp = "Wochenende"
End Select

Bereiche, Einzelwerte und Is-Vergleiche lassen sich in derselben Case-Klausel mischen. Ein Beispiel: Case 1 To 5, 10, Is > 100 trifft auf die Werte 1 bis 5, auf 10 und auf alles über 100 zu.

Vergleiche mit Is

Manchmal brauchen wir keine exakten Werte, sondern Schwellenwerte. Dafür gibt es das Schlüsselwort Is in Kombination mit einem Vergleichsoperator. Ein typisches Beispiel ist die Bewertung einer Punktzahl:

Public Function Bewertung(ByVal lngPunkte As Long) As String
    Select Case lngPunkte
        Case Is >= 90
            Bewertung = "sehr gut"
        Case Is >= 75
            Bewertung = "gut"
        Case Is >= 50
            Bewertung = "befriedigend"
        Case Is >= 25
            Bewertung = "ausreichend"
        Case Else
            Bewertung = "mangelhaft"
    End Select
End Function

Wichtig ist die Reihenfolge: VBA prüft die Case-Klauseln von oben nach unten und nimmt den ersten Treffer. Wer Case Is >= 25 an den Anfang stellt, bekommt für 95 Punkte nur „ausreichend“, weil diese Klausel bereits zutrifft. Die Reihenfolge muss also vom engsten zum weitesten Kriterium laufen.

Select Case mit Strings

Select Case funktioniert nicht nur mit Zahlen. Strings werden nach den Regeln verglichen, die Option Compare vorgibt – in Access-Modulen also standardmässig ohne Berücksichtigung der Gross-/Kleinschreibung:

Access, SQL und Cloud Automation

Unser exklusives Angebot für Dich!

VB-Entwickler
12,50 € im Monat*

(Gilt für den Abschluss eines Jahres-Abonnements.)

Hier geht’s weiter →

Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.

PayPal VISA Mastercard SEPA
Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →