Sicherlich kennen Sie die Situation: In einem Formular haben Sie einige Datensätze gefiltert und möchten nun auf dieser Basis Adressetiketten drucken.
Ein entsprechender Bericht für den Druck der Etiketten liegt zwar vor, wie aber wird nun erreicht, dass der Bericht exakt die gleichen Datensätze druckt, die momentan im Formular angezeigt werden?
Die Lösung ist einfacher, als es zunächst scheint: Wenn Sie mit der formularbasierten Suche arbeiten oder eine andere Filterfunktion benutzen, stellt Access die Eigenschaft „Filter“ des Formulars auf die Filterkriterien ein und aktiviert die Filterung über die Eigenschaft „Filter On“.
Erfreulicherweise kann beim Öffnen eines Berichtes über „DoCmd.OpenReport“ ein Filterkriterium angegeben werden, dessen Syntax der Eigenschaft „Filter“ entspricht.
Es ist also nur notwendig, bei „DoCmd.OpenReport“ den Inhalt der Eigenschaft „Filter“ des Formulars anzugeben.
Eine kleine Stolperfalle ist allerdings zu beachten: Wenn der Filter deaktiviert wird, löscht Access nicht etwa die Kriterien in der Eigenschaft „Filter“, sondern schaltet lediglich die Filterung über „FilterOn = False“ aus.
Sie müssen also dafür sorgen, dass der Bericht bei deaktiviertem Filter ohne zusätzlichen Parameter bzw. ohne Filterkriterien aufgerufen wird:
Private Sub btnPrintSelected_Click()
strReport = „Kundenetiketten“
If Me.FilterOn Then
DoCmd.OpenReport strReport, acViewPreview, , Me.Filter
Else
DoCmd.OpenReport strReport, acViewPreview
End If
End Sub
In diesem Beispiel wird der Bericht „Kundenetiketten“ über eine Schaltfläche ETIKETTEN DRUCKEN aus einem Formular „Kunden“ heraus geöffnet.
Über die Eigenschaft „FilterOn“ prüfen wir zu nächst, ob ein Filter aktiviert ist.
Wenn ja, übergeben wir als Parameter den Inhalt der Eigenschaft „Filter“ des Formulars.
Etwas komplizierter wird es, wenn Sie eine im Formular per Filter definierte Sortierung ebenfalls an den Bericht übergeben möchten. Das ist nicht per Parameter möglich.
Sie können den Bericht aber „on the fly“ wie folgt modifizieren:
strReport = „Kundenetiketten/Auswahl“
DoCmd.OpenReport strReport, acViewDesign
Set R = Reports(strReport)
R.Filter = Me.Filter
R.FilterOn = Me.FilterOn
R.OrderBy = Me.OrderBy
R.OrderByOn = Me.OrderByOn
DoCmd.Save acReport, strReport
DoCmd.OpenReport strReport, acViewPreview
Hier wird der Bericht zunächst im Entwurfsmodus geöffnet. Anschließend setzen wir eine Referenz auf den Bericht in einer Objektvariable und können so direkt auf alle Eigenschaften zugreifen. Das nutzen wir, um die Einstellungen bezüglich Filter und Sortierung aus dem Formular in den Bericht zu übertragen. Danach wird der Bericht gespeichert und angezeigt.
Bitte beachten Sie, dass je doch eine im Bericht eingestellte Sortierung Vorrang hat!
Die Speicherung er folgt zur Vermeidung der Abfrage „Änderungen speichern?“ beim Schließen des Berichtes.
Es empfiehlt sich deshalb, hier mit einer anders benannten Kopie des ursprünglichen Berichtes zu arbeiten, da dieser sonst immer nur die Datensätze der letzten Filterung ausgeben würde.