GRUNDLAGEN

Ereignisreiche Berichte

Beispiel: Anzahl Datensätze je Bereich


Der Bericht aus Bild 3 gruppiert Artikel nach Kategorien. Er soll für jede Kategorie und für jede Seite die Anzahl der enthaltenen beziehungsweise gedruckten Artikel ausgeben. Dazu verwendet er jeweils den folgenden Ausdruck: =Anzahl([Artikel-Nr])

Bild 3: Ausgabe der Anzahl von Artikeln je Kategorie und Seite.
Bild 3: Ausgabe der Anzahl von Artikeln je Kategorie und Seite.

In der Berichtsvorschau zeigt sich dann der Unterschied zwischen Theorie und Praxis: Im Kategoriefuß zeigt der Bericht die Anzahl der enthaltenen Artikel ohne Probleme an, aber im Seitenfuß gibt es einen Fehler. Manche Dinge funktionieren in Berichten einfach nicht so, wie man sie plant. Und bevor man stundenlang im Internet nach dem Grund sucht, beschäftigt man sich lieber mit einer Alternative. Diese bezieht wiederum, wer hätte es gedacht, das Ereignis Beim Drucken ein.

Leeren Sie die Eigenschaft Steuerelementinhalt des Textfeldes im Seitenfuß des Berichts und fügen stattdessen zwei Ereignisprozeduren in den Bericht ein. Die erste wird durch das Ereignis Bei Seite des Berichts ausgelöst und stellt den Wert des Textfeldes auf 0 ein, die zweite tritt beim Ereignis Beim Drucken des Detailbereichs in Aktion und erhöht den Wert dieses Textfeldes um 1. Die beiden Ereignisprozeduren finden Sie in Listing 3.

Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)
Me!txtAnzahlArtikelSeite = Me!txtAnzahlArtikelSeite + 1
End Sub
Private Sub Report_Page()
Me!txtAnzahlArtikelSeite = 0
End Sub

FormatCount und PrintCount


Diese beiden Parameter FormatCount und Print Count der Ereignisprozeduren Beim Formatieren
beziehungsweise Beim Drucken enthalten die Anzahl der Aufrufe der jeweiligen Ereignisprozedur. Dies ist vor allem für das Ereignis Beim Formatieren interessant, denn es tritt recht häufig auf – nämlich immer dann, wenn ein Bereich (das gilt sowohl für den Detailbereich als auch für die Kopf- und Fußbereiche) nicht mehr auf die aktuelle Seite passt und auf der nächsten Seite gedruckt werden soll.

Wenn Sie im Ereignis Beim Formatieren einen Zähler verwenden, müssen Sie in geeigneter Weise auf die Möglichkeit reagieren, dass der Bereich mehrmals für den gleichen Datensatz aufgerufen wird – indem Sie etwa den Wert des Parameters FormatCount prüfen und den Zähler nur im ersten Durchlauf erhöhen:


If FormatCount = 1 Then
i = i + 1 'irgendetwas zählen
End If