Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: Thüringer am September 02, 2026, 17:17:01

Titel: Filterung anhand der ID's einem Bericht übergeben
Beitrag von: Thüringer am September 02, 2026, 17:17:01
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
Titel: Re: Filterung anhand der ID's einem Bericht übergeben
Beitrag von: Thüringer am September 02, 2026, 17:22:55
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