Navigation

Listenfelder

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