Listenfelder sind ganz ähnlich Kombinationsfeldern. Allerdings kann man bei Listenfelder
eine Mehrfachauswahl ermöglichen. Diese Einstellungen findet man in den Eigenschaften
des Listenfelds unter dem Reiter 'Andere'. Nun hat ein Listenfeld keinen Rückgabewert
mehr und man kann sich in Abfragen oder in VBA nicht mehr darauf beziehen. Um
die Werte wiederzubekommen, kann man sich durch die ItemsSelected bewegen. Mit
ItemsSelected sind alle Einträge gemeint, die markiert sind. Um den Wert der
gebundenen Spalte zu bekommen, kann man ItemData verwenden. Bei einem anderen
Wert muss mit Column() zu erst die Spalte gewählt werden und danach die Zeile.
Hier ein Beispiel für
eine Abfrage mit Mehrfachauswahl:
Dim strSQL As String Dim strKrit As String Dim itm As Variant strSQL = "SELECT * FROM Tabelle" '//Für jeden Eintrag For Each itm In Me!Liste.ItemsSelected '//SQL-Syntax zusammenschustern strKrit = strKrit & "," & Me!Liste.ItemData(itm) Next itm '//SQL-Syntax zusammenschustern '//Mid() ist notwendig, da vor dem 1. Wert ein Komma steht, welches abgeschnitten werden muss If Len(strKrit) <> 0 Then strSQL = strSQL & " Where Feld In(" & Mid(strKrit, 2) & ")" End If
Um zum Beispiel einen Datensatz zu markieren, der in der 3. Spalte einem Wert entspricht kann man folgenden Code verwenden:
Dim i As Long '//Durchlaufe alle Listeneinträge For i = 0 To Me!Liste.ListCount '//Column fängt bei 0 an zu zählen, deswegen Spalte 2 '//Bei Spaltenüberschriften muss man mit i + 1 arbeiten, da die Überschrift als Zeile mitzählt If Me!Liste.Column(2, i) = "Wert" Then '//Die Selected-Eigenschaft gibt an, ob ein Datensatz markiert ist Me!Liste.Selected(i) = True End If Next i