Hallo, ich filtere ein Formular mit 4 Listenfeldern wie folgt und habe dazu Fragen.
Der Code funktioniert.
Private Sub Kombinationsfeld1_AfterUpdate()
Dim strFilter As String
If IsNull(Me.Kombinationsfeld1) Then
'Filter aufheben wenn Kombinationsfeld leer
Me.Filter = ""
Me.FilterOn = False
Else
'mehrwertige Felder desswegen .Value ansprechen
strFilter = "abrechnung.Value = " & Me.Kombinationsfeld1
Me.Filter = strFilter
Me.FilterOn = True
End If
End Sub
Private Sub Befehl_Filtern_Click()
Dim ctl1 As Control, ctl2 As Control, ctl3 As Control, ctl4 As Control
Dim varItem As Variant
Dim strFilter1 As String, strFilter2 As String, strFilter3 As String, strFilter4 As String, strTotalFilter As String
Set ctl1 = Me!Kombinationsfeld1 ' Name des ersten Listenfelds
Set ctl2 = Me!Kombinationsfeld2 ' Name des zweiten Listenfelds
Set ctl3 = Me!Kombinationsfeld3 ' Name des dritten Listenfelds
Set ctl4 = Me!Kombinationsfeld4 ' Name des dritten Listenfelds
' Filter für Kombinationsfeld1
If ctl1.ItemsSelected.Count > 0 Then
strFilter1 = "abrechnung IN ("
For Each varItem In ctl1.ItemsSelected
strFilter1 = strFilter1 & "'" & ctl1.ItemData(varItem) & "', "
Next varItem
strFilter1 = Left(strFilter1, Len(strFilter1) - 2) & ")"
End If
' Filter für Kombinationsfeld2
If ctl2.ItemsSelected.Count > 0 Then
strFilter2 = "stadt3 IN ("
For Each varItem In ctl2.ItemsSelected
strFilter2 = strFilter2 & "'" & ctl2.ItemData(varItem) & "', "
Next varItem
strFilter2 = Left(strFilter2, Len(strFilter2) - 2) & ")"
End If
' Filter für Kombinationsfeld3
If ctl3.ItemsSelected.Count > 0 Then
strFilter3 = "fachrichtung IN ("
For Each varItem In ctl3.ItemsSelected
strFilter3 = strFilter3 & "'" & ctl3.ItemData(varItem) & "', "
Next varItem
strFilter3 = Left(strFilter3, Len(strFilter3) - 2) & ")"
End If
' Filter für Kombinationsfeld4
If ctl4.ItemsSelected.Count > 0 Then
strFilter4 = "angebote IN ("
For Each varItem In ctl4.ItemsSelected
strFilter4 = strFilter4 & "'" & ctl4.ItemData(varItem) & "', "
Next varItem
strFilter4 = Left(strFilter4, Len(strFilter4) - 2) & ")"
End If
' Alle Filter mit AND verknüpfen
If strFilter1 <> "" And strFilter2 <> "" And strFilter3 <> "" And strFilter4 <> "" Then
strTotalFilter = strFilter1 & " AND " & strFilter2 & " AND " & strFilter3 & " AND " & strFilter4
ElseIf strFilter1 <> "" Then
strTotalFilter = strFilter1
ElseIf strFilter2 <> "" Then
strTotalFilter = strFilter2
ElseIf strFilter3 <> "" Then
strTotalFilter = strFilter3
ElseIf strFilter4 <> "" Then
strTotalFilter = strFilter4
End If
' Filter auf das Formular anwenden
If strTotalFilter <> "" Then
Me.Filter = strTotalFilter
Me.FilterOn = True
Else
Me.Filter = ""
Me.FilterOn = False
End If
End Sub
Private Sub FilteraufhebenAlle_Click()
Me.Kombinationsfeld1 = Null ' Kombinationsfeld zurücksetzen
Me.Kombinationsfeld2 = Null ' Kombinationsfeld zurücksetzen
Me.Kombinationsfeld3 = Null ' Kombinationsfeld zurücksetzen
Me.Kombinationsfeld4 = Null ' Kombinationsfeld zurücksetzen
Me.Kombinationsfeld4 = Null ' Kombinationsfeld zurücksetzen
Me.Filter = "" ' Filterstring leeren
Me.FilterOn = False ' Filter ausschalten
End Sub
Kann jemand hier Fehler erkennen?
Wozu steht in der folgende Zeile eine "- 2"?
strFilter1 = Left(strFilter1, Len(strFilter1) - 2) & ")"
Sieht jemand eine Lösung, die so gemachte Filterung mit einem Button von AND auf ODER umzuschalten? Müsste das über die folgende Zeile gehen derart, dass man da vielleicht eine Bedingung einbaut, die mit einem Umschaltknopf gesetzt wird?
strTotalFilter = strFilter1 & " AND " & strFilter2 & " AND " & strFilter3 & " AND " & strFilter4
Ich übergebe dann die Filterung an einen Bericht. Dazu sollen die angezeigten ID's ausgelesen werden und den Bericht weiter gegeben werden. Das funktioniert auch.
Private Sub Auswahldrucken_Click()
Dim strFilter As String
strFilter = Me.Filter
' Prüfen, ob ein Filter gesetzt ist
If Me.FilterOn And Len(strFilter) > 0 Then
DoCmd.OpenReport "ber_liste", acViewPreview, , strFilter
Else
' Wenn kein Filter aktiv, den Bericht ungefiltert öffnen
DoCmd.OpenReport "ber_liste", acViewPreview
End If
End Sub