Seitenzahl und Gesamtzahl eines Berichts in Access anzuzeigen, ist im Allgemeinen kein Problem. Schwieriger ist es schon, einzelne Gruppierungen innerhalb eines Berichts mit Seitenzahlen zu versehen … und ganz schwierig, wenn es gilt, die Gesamtseitenzahl der Gruppierung zu ermitteln.
Beispiel: Gruppierungen, die nur auf einer Seite stehen, sollen den Eintrag „Seite 1/1“ erhalten, während andere, die mehrere Seiten (bsw. 3 Seiten) benötigen mit „Seite 1/3“, „Seite 2/3“, „Seite 3/3“ versehen werden.
So kann’s gehen …
'*******************************************************************
' SEITENZAHLEN GRUPPIERT AUSGEBEN
'*******************************************************************
' Teil 1: Seitenzahl-Vorbereitung:
' 1. Im Seitenfuß muss ein Bezeichnungsfeld "SeitenVonBis" angelegt werden
' 2. Im Fußbereich muss ein Feld vorhanden sein, das formatierbar ist.
' Am Besten die normalen Seitenzahlen drinnen lassen und unsichtbar machen.
' In diesem Feld werden die Seiten von 1 bis n ausgebeben.
' 3. Eigenschaften: Bereich zusammenhalten
'Seitenzahlen gruppiert ausgeben (Teil 1)
Private mx(1 To 1000, 1 To 2) As Integer
'max. 1000 Seiten (verkleinern wenn man kann!)
Private mxBeginPage As Integer 'Beginn der neuen Seite der Gruppe
Private mxMaxPage As Integer 'Schluss-Seite der Gruppe
Private mxGroup As Variant
'*******************************************************************
'Teil 2: Seitenzahlen gruppiert ausgeben
Private Sub Seitenfußbereich_Format(Cancel As Integer, FormatCount As Integer)
Dim iMx As Integer
Dim nMx As Integer
If Me.Page > mxMaxPage Then
'Die max. Seitenzahl festhalten.
mxMaxPage = Me.Page
End If
If Me.Page < mxBeginPage Then
'Tritt ein, wenn Access alle Seiten formatiert hat und wieder
'zur ersten Seite wechselt.
mxMaxPage = mxMaxPage + 1
End If
If mxBeginPage = 0 Then
'Könnte auch bei TReport_Open initialisiert werden.
mxBeginPage = 1
End If
' =========> Hier muss der Wert, der die Gruppe bestimmt als Feld angegeben werden.
If Not Me.[ID] = mxGroup Then
'Tritt ein, wenn die Gruppe das erste Mal wechselt.
For iMx = mxBeginPage To mxMaxPage - 1
nMx = nMx + 1
mx(iMx, 1) = nMx
mx(iMx, 2) = mxMaxPage - mxBeginPage
Next iMx
mxGroup = Me.[ID] ' =========> Jetzt die Gruppe gleichsetzen
mxBeginPage = mxMaxPage
End If
'Hier die Zahlen in einem Bezeichnungsfeld anzeigen:
Me!SeitenVonBis.Caption = "Seite "& mx(Me.Page, 1) & _
" von "& mx(Me.Page, 2)
End Sub
'*************************** Seitenzahlen ENDE ***************************