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.