Gruppierung mit Seitenzahl

Das Anzeigen der Seitenzahl und der Gesamtzahl der Seiten eines Berichts ist kein Hexenwerk. Viel komplizierter wird es, wenn Sie einzelne Gruppierungen innerhalb eines Berichts mit Seitenzahlen versehen möchten – und noch anspruchsvoller ist das Ermitteln der Gesamtseitenzahl der Gruppierung. Access im Unternehmen zeigt, wie das funktioniert.

Ein gutes Beispiel für den Einsatz einer Seitennummerierung gruppierter Daten ist das Kassenbuch aus dem gleichnamigen Artikel mit dem Shortlink 486. Dort zeigt ein Bericht nach Konten getrennt alle Buchungen an und beginnt jeweils eine neue Seite für jedes Konto. Konten können natürlich mehr Einträge enthalten, als auf eine Seite passen. Damit der Leser direkt weiß, dass die aktuelle Seite nicht die letzte Seite für das aktuelle Konto ist, sollten Sie ihn durch die Angabe der Seitenzahl darauf hinweisen – am besten sogar noch durch die passende Gesamtzahl der Seiten dieses Kontos.

So sollen Gruppierungen, die auf nur einer Seite Platz finden, etwa den Eintrag “Seite 1/1” erhalten, während andere mit mehreren Seiten beispielsweise mit “Seite 2/3” versehen werden (s. Abb. 1).

abb001.tif

Abb. 1: Berichte mit Seitenzahlen für die Seiten der enthaltenen Gruppierungen

Page und Pages

Bezogen auf einen kompletten Bericht ist das einfach. Hier reicht die Angabe des folgenden Ausdrucks für die Eigenschaft Steuerelementinhalt eines Textfelds:

="Seite " & [Seite] & "/" & [Seiten]

Die Funktionen Seite und Seiten (unter VBA Page und Pages) lassen sich allerdings von vorhandenen Gruppierungen wenig beeindrucken. Da müssen härtere Geschütze ran – zum Beispiel eine passende VBA-Funktion, die beim Formatieren des jeweiligen Gruppierungsbereichs aufgerufen wird.

Beim Formatieren

Die einzelnen Berichtsbereiche lösen jeweils das Ereignis Beim Formatieren aus – und das je nach der aktuellen Konfiguration einmal oder mehrmals.

Um Gruppierungen mit eigenen Seitenzahlen zu versehen, reicht diese Erkenntnis jedoch nicht aus. Das Wissen, wie die VBA-Funktionen Page und Pages eines Berichts arbeiten, hilft da schon eher weiter – gemixt mit einer weiteren Zutat: Und die lautet, dass Access beim Anzeigen von Berichten nur so viele Seiten im Voraus rendert, wie unbedingt nötig. Sprich: Wenn ein Bericht einfach nur ein paar Datensätze im Detailbereich anzeigen soll, wird auch zunächst nur die erste Seite aufbereitet. Erst beim Blättern zur zweiten Seite stellt Access deren Inhalt zusammen.

Wenn man das auf das Ziel dieses Beitrags ummünzt, nämlich das Nummerieren der Seiten einer Gruppierung und die Angabe der gesamten Seitenzahl dieses Bereichs, dann könnte man zumindest schon einmal die aktuelle Seite einer Gruppierung ausgeben – und zwar, indem man prüft, ob eine Seite die erste Seite einer Gruppierung ist oder eine der folgenden Seiten.

In Access-Berichten gruppiert man Daten nach einem bestimmten Wert der Datenherkunft, im Beispiel ist dies das Feld KontoID. Der Inhalt dieses Feldes ist das Kriterium, dass die Datensätze einer Gruppierung und damit auch der Seiten, auf denen diese ausgegeben werden, vereint. Um herauszufinden, ob eine Seite die erste Seite einer Gruppierung ist, vergleichen Sie einfach den Inhalt des Feldes KontoID mit dem passenden Wert der vorherigen Seite. Ist dieser nicht gleich, ist die Seite die erste Seite, sonst eine der folgenden Seiten.

Im Ereignis Beim Formatieren eines Gruppierungsbereichs erlaubt Access allerdings ausschließlich Zugriff auf den ersten Datensatz der Gruppierung, nicht auf Daten der vorherigen und schon gar nicht auf die Daten der folgenden Seiten.

Also speichern Sie den die aktuelle Gruppe charakterisierenden Wert in einer Variablen zwischen. Die Variable deklarieren Sie modulweit im Klassenmodul des Berichts:

Dim lngKonto As Long

Außerdem brauchen Sie noch eine Variable, in der Sie die aktuelle Seite des gruppierten Bereichs speichern:

Dim intSeiteGruppe As Integer

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar