Unterberichte bergen oft spannende Herausforderungen in sich – vor allem, wenn die Inhalte sich über mehr als eine Seite erstrecken. Die Aufgabe, die ein Leser mir diesmal stellt, hatte allerdings einen anderen Charakter: Er wünschte sich, dass die Benutzer einzelne Unterberichte je nach Anforderung aktivieren oder deaktivieren konnten. Wir suchen also eine Möglichkeit, um festzulegen, welche von verschiedenen Unterberichten im Hauptbericht angezeigt werden und welche nicht. Wie das gelingt, zeigt der vorliegende Beitrag.
Unterberichte ein- und ausblenden
Im ersten Schritt wollen wir uns ansehen, ob sich Unterberichte überhaupt ein- und ausblenden lassen. Dazu erstellen wir vier Unterberichte, die wir einfach rptUnterbericht1, rptUnterbericht2, rptUnterbericht3 und rptUnterbericht4 nennen.
Diese sollen jeweils nur einen Detailbereich mit einem Bezeichnungsfeld enthalten, das den Namen des Unterberichts angibt – siehe Beispiel für den Bericht rptUnterbericht1 in Bild 1.
Bild 1: Einer der vier Unterberichte
In einen Hauptbericht namens rptHauptbericht fügen wir dann die Unterberichte im Detailbereich ein. Das Ergebnis sieht wie in Bild 2 aus. Damit können wir nun herausfinden, ob sich die Unterberichte überhaupt auf einfache Weise ein- oder ausblenden lassen.
Bild 2: Hauptbericht mit den vier Unterberichten
Wenn wir nun in die Seitenansicht wechseln, erscheinen die vier Unterberichte genau so, wie wir sie angeordnet haben (siehe Bild 3).
Bild 3: Anzeige aller vier Unterberichte
Unterberichte ausblenden
Wir beginnen mit dem statischen Umstellen der Sichtbarkeit eines der Unterberichte, indem wir die Eigenschaft Sichtbar des zweiten Unterbericht-Steuerelements namens rptUnterbericht2 auf Nein einstellen und öffnen den Bericht in der Seitenansicht.
Das Ergebnis sieht wie in Bild 4 aus und ist noch nicht zufriedenstellend.
Bild 4: Der zweite Unterbericht wurde ausgeblendet.
Der Unterbericht wird einfach ausgeblendet, aber es bleibt eine leere Stelle, an der sich der ausgeblendete Unterbericht befindet.
Leerraum verhindern
Um den leeren Zwischenraum zwischen dem ersten und dem dritten Unterbericht zu verhindern, stellen wir die Eigenschaft Verkleinerbar des Unterbericht-Steuerelements Untergeordnet2 auf Ja ein.
Danach erhalten wir nach dem Wechseln in die Seitenansicht das Resultat aus Bild 5. Der leere Zwischenraum ist verschwunden und wir finden zwischen dem ersten und dem dritten Unterbericht nur noch die beiden Leerräume zwischen dem ersten und zweiten und dem zweiten und dritten Unterbericht vor.
Bild 5: Ausblendete Berichte, die verkleinerbar sind, schaffen Platz für die darunter befindlichen Steuerelemente.
Das bedeutet wiederum, dass wir, wenn wir beim Ausblenden mehrerer Unterberichte keine Zwischenräume kumulieren wollen, die Unterberichte direkt untereinander anordnen müssen, also etwa so wie in Bild 6.
Bild 6: Unterberichte ohne Zwischenräume
Wenn Sie Zwischenräume zwischen den Unterberichten benötigen, können Sie dort beispielsweise Rectangle-Steuerelemente der gewünschten Größe einfügen. Die Rahmenfarbe der Rectangle-Steuerelemente müssen Sie dann natürlich auf Weiß einstellen, damit man diese nicht sieht.
Die Eigenschaft Verkleinerbar stellen sie genau wie bei den Unterbericht-Steuerelementen auf Ja ein. Wenn Sie dann beispielsweise den ersten Unterbericht ausblenden, indem Sie seine Eigenschaft Sichtbar auf den Wert Nein einstellen, müssen Sie auch das Rectangle-Steuerelement zwischen dem ersten und dem zweiten Unterbericht-Steuerelement ausblenden. Gleiches gilt für den zweiten und dritten Unterbericht und das dazwischen befindliche Rectangle-Steuerelement so weiter.
Wir gehen allerdings der Einfachheit halber davon aus, dass wir keine Platzhalter zwischen den Unterberichten benötigen.
Unterberichte beim Öffnen per Code ausblenden
Wir nehmen nun an, dass der Benutzer vor dem Öffnen des Berichts mit den Unterberichten festgelegt hat, welche der Unterberichte angezeigt und welche ausgeblendet werden sollen. Dann müssen wir ein Ereignis finden, das beim Öffnen des Berichts ausgelöst wird und in dem wir das Ausblenden der gewünschten Unterberichte implementieren können.
Dazu eignet sich die Ereigniseigenschaft Beim Laden. Für diese hinterlegen wir testweise die folgende Ereignisprozedur:
Private Sub Report_Load() Me!rptUnterbericht2.Visible = False Me!rptUnterbericht4.Visible = False End Sub
Und damit erhalten wir genau das gewünschte Ergebnis, wie Bild 7 zeigt.
Bild 7: Bericht mit zwei per VBA ausgeblendeten Unterberichten
Öffnen des Berichts mit ausgeblendeten Unterberichten per Formular
Nun wollen wir dem Benutzer die Möglichkeit geben, vor dem Öffnen des Berichts festzulegen, welche Unterberichte im Bericht angezeigt werden sollen. Dazu legen wir ein Formular an, das die Unterberichte in einem Listenfeld anzeigt.
Dieses Formular sieht in der Entwurfsansicht wie in Bild 8 aus. Es enthält ein Listenfeld namens lstUnterberichte. Für den Unterbericht stellen Sie die Eigenschaft Herkunftsart auf Wertliste ein und geben für die Eigenschaft Datensatzherkunft die folgende Liste ein:
Bild 8: Formular mit Listenfeld zur Auswahl der Unterberichte
"rptUnterbericht1";"Unterbericht 1";"rptUnterbericht2";"Unterbericht 2";"rptUnterbericht3";"Unterbericht 3";"rptUnterbericht4";"Unterbericht 4"
Der erste, dritte, fünfte und siebte Eintrag enthält die Namen der auszuwählenden Unterberichte, die nicht im Listenfeld angezeigt werden sollen, sondern nur zum Referenzieren der Unterbericht-Steuerelemente dienen sollen. Der zweite, vierte, sechste und achte Eintrag enthält die Namen der Berichte, die im Listenfeld angezeigt werden sollen.
Damit die Einträge mit ungeradem Index nicht angezeigt werden, sondern nur die mit geradem Index, stellen wir die Eigenschaft Spaltenanzahl des Listenfeldes auf 2 und Spaltenbreiten auf 0cm ein. So wird die erste Spalte ausgeblendet und die zweite auf der verbleibenden Breite angezeigt.
Damit der Benutzer mehrere Einträge gleichzeitig markieren kann, stellen wir außerdem die Eigenschaft Mehrfachauswahl auf Einzeln ein. Schließlich blenden wir Elemente wie Datensatzmarkierer, Navigationsschaltflächen und Bildlaufleisten durch Einstellen der gleichnamigen Eigenschaften auf den Wert Nein aus.
Die Schaltfläche Bericht öffnen heißt cmdBerichtOeffnen und erhält die folgende Prozedur für die Ereigniseigenschaft Beim Klicken:
Private Sub cmdBerichtOeffnen_Click() DoCmd.OpenReport "rptHauptbericht1", acViewPreview End Sub
Damit öffnen wir beim Anklicken der Schaltfläche wie in Bild 9 allerdings einfach nur den Bericht in der Seitenansicht. Die Aufgabe, die im Listenfeld ausgewählten Unterberichte anzuzeigen und die übrigen auszublenden, delegieren wir in diesem Fall an das Beim Öffnen-Ereignis des Hauptberichts.
Bild 9: Auswahl der Unterberichte
Die benötigte Prozedur deklariert dann eine Laufvariable namens i und eine Variable zum Referenzieren des ListBox-Steuerelements im aufrufenden Formular:
Private Sub Report_Load() Dim i As Integer Dim lst As ListBox
Dann referenziert sie mit der Variablen lst das Listenfeld lstUnterberichte im Formular frmUnterberichteAuswaehlen:
Set lst = _
Forms!frmUnterberichteAuswaehlen!lstUnterberichte
Anschließend durchläuft sie in einer For Next-Schleife alle Werte von 0 bis zur Anzahl der Listeneinträge minus 1.
Darin prüft sie, ob der entsprechende Eintrag im Listenfeld markiert ist. Falls ja, wird die Eigenschaft Visible des passenden Unterbericht-Steuerelements auf True eingestellt, sonst auf False:
For i = 0 To lst.ListCount - 1 If lst.Selected(i) Then Me("rptUnterbericht" & i + 1).Visible = True Else Me("rptUnterbericht" & i + 1).Visible = False End If Next i End Sub
Wenn wir das Formular nun in der Formularansicht öffnen, ein paar Unterberichte auswählen und auf die Schaltfläche Bericht öffnen klicken, erhalten wir das Ergebnis aus Bild 10. Es funktioniert also wie gewünscht.
Bild 10: Anzeige der ausgewählten Unterberichte
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo