Tipp 2.18 - Ereignisse beim Formularfilter

Wie kann ich die integrierten Eigenschaften beim Formularfilter ausnutzen?

Sobald Sie einen Filter in Ihrem Formular anwenden, wird zur Filterung Ihrer Daten auch das Filter-Ereignis im Formular ausgeführt. In bestimmten Fällen kann es wünschenswert sein, das Standardverhalten des Filterbefehls zu verändern, vielleicht um bestimmte Steuerelemente auszublenden oder um dem Benutzer eine Nachricht anzuzeigen.

Microsoft Access teilt Ihnen durch das Filter-Ereignis (Bei Filter) nicht nur mit, dass ein Filter eingetreten ist, sondern auch, welcher Filter ausgewählt wurde. Ausgerüstet mit diesen Informationen können Sie den Filter abfangen und dessen Verhalten, falls gewünscht, verändern.

Wählen Sie die Option Formularbasierter Filter oder Spezialfilter/-Sortierung, erhält der Parameter FilterType des Ereignisses Filter einen Wert, der angibt, wie der Filter angewendet werden soll. Wählen Sie die Option Formularbasierter Filter, entspricht dieser Wert der Konstante acFilterByForm, wählen Sie jedoch die Option Spezialfilter/-Sortierung, dann wird der Parameter der Konstante acFilterAdvanced gleichgesetzt. Das nachfolgende Beispiel veranschaulicht die Verwendung beider Konstanten:

Beispiel

Beispiel:

' Welcher Filter wurde ausgewählt?
Private Sub Form_Filter(Cancel As Integer, FilterType As Integer)
 
    Select Case FilterType
        ' Formularbasierter Filter
        Case acFilterByForm
            MsgBox "Bitte wählen Sie nun Ihre Filteroptionen!", vbInformation, "Hinweis"
        ' Spezialfilter/-Sortierung
        Case acFilterAdvanced
            MsgBox "Sie sind nicht berechtigt, in diesem Formular" & _
            vbCrLf & "einen Spezialfilter aufzurufen!", vbInformation, "Hinweis"
            'Abbruch des Befehls
            Cancel = True
    End Select
 
End Sub

Dieses Beispiel wertet die Filterart im Ereignis Filter aus. Wurde die Option Formularbasierter Filter ausgewählt, wird eine Meldung angezeigt, und die Filterung verläuft wie gewöhnlich. Wählt der User dagegen die Option Spezialfilter/-Sortierung, wir ihm mitgeteilt, dass dies nicht möglich ist und das Filtern wird abgebrochen.

Sie können nicht nur überprüfen, welcher Filter und ob der Filter aufgerufen wurde, sondern auch den Vorgang abfangen, wenn der Filter angewendet wird. Hierfür nutzen Sie einfach das ApplyFilter-Ereignis (Bei angewendetem Filter) des Formulars:

Beispiel

Beispiel:

' Soll der Filter angewendet werden?
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
 
    Dim sMsg As String
 
    sMsg = "Sie haben folgende Kriterien ausgewählt:" & vbCrLf
    sMsg = sMsg & Me.Filter & vbCrLf & vbCrLf
    sMsg = sMsg & "Möchten Sie den Filter nun ausführen?"
 
    ' Wurde der Filter eingeschaltet
    If ApplyType = acApplyFilter Then
        If MsgBox(sMsg, vbQuestion + vbYesNo, "Filter - Frage") = vbNo Then
            ' Falls nein, Abbruch der Filtereinstellungen und
            ' Neuanzeige des Filterformulars
            Cancel = True
        End If
    End If
 
End Sub

Dieses Beispiel wertet den Parameter ApplyType aus. Ist der Wert gleich 1 (acApplyFilter), wird eine Meldung angezeigt und der User gefragt, ob er den Filter anwenden möchte. Falls Nein bestätigt wird, wird der Filter nicht angewendet und das Filterformular erneut angezeigt.