Berichte im Telefonbuchstil (Access 97, 2000)
Veröffentlicht am 16.12.2003
Durch den Einsatz von VBA-Ereignisprozeduren können Sie diesen Komfort auch in Ihren Berichten zur Verfügung stellen.
Ein Telefonbuch enthält üblicherweise im Kopfbereich den ersten und letzten Eintrag der aktuellen Seite. Dies erleichtert das Auffinden bestimmter Einträge erheblich.
Als Beispiel dient ein Bericht, in dem Artikelnamen aufgelistet werden. Der Name des ersten und letzten Artikels einer Seite sollen jeweils im Seitenkopf ausgegeben werden. Plazieren Sie zu diesem Zweck im Kopfbereich ein Textfeld für den jeweils ersten Eintrag. Der Steuerelementinhalt-Eigenschaft weisen Sie einfach den Namen des gewünschten Feldes zu (in diesem Fall also Artikelname).
In einem zweiten Textfeld namens txtArrayBis soll Access den letzten Eintrag der Seite anzeigen. Diese Information ist etwas schwieriger zu ermitteln. Access muß dazu die gesamten letzten Artikelnamen der einzelnen Seiten in einem ersten Formatierungsdurchgang ausfindig machen und in einem Zeichenketten-Array abspeichern. Die Deklaration dieses Arrays nehmen Sie im Deklarationsbereich des Berichtsmoduls vor. Zusätzlich definieren Sie eine weitere Variable, die den ersten Formatierungsdurchgang vom eigentlichen Ausdruck unterscheidet:
Private ErsterDurchgang As Boolean
Private aryFirmaBis() As String
Sobald der Bericht geöffnet wird, muss der Inhalt der Variablen ErsterDurchgang auf True gesetzt werden. Dies bedeutet, dass der erste Formatierungsvorgang noch bevorsteht. Die Beim Öffnen-Ereignisprozedur hat dementsprechend den folgenden Aufbau:
Private Sub Report_Open(Cancel As Integer)
ErsterDurchgang = True
End Sub
Das Füllen des Arrays übernimmt die Beim Formatieren-Ereignisprozedur, die an den Seitenfuß geknüpft ist:
Private Sub Seitenfuß_Format(Cancel As Integer, FormatCount As Integer)
If ErsterDurchgang Then
ReDim Preserve aryFirmaBis(Me.Page)
aryFirmaBis(Me.Page) = Me!Firma
End If
End Sub
Damit der Liste auch der allerletzte Eintrag des Berichts hinzugefügt wird, muß der Berichtsfuß ebenfalls an eine Ereignisprozedur geknüpft werden. Zusätzlich setzt diese Prozedur die Variable ErsterDruchgang auf False, um das Ende des Formatierungsdurchlaufs zu kennzeichnen:
Private Sub Berichtsfuß_Format(Cancel As Integer, FormatCount As Integer)
If ErsterDurchgang Then
ReDim Preserve aryFirmaBis(Me.Page)
aryFirmaBis(Me.Page) = Me!Firma
ErsterDurchgang = False
End If
End Sub
Beim nächsten Formatierungsdurchgang (bei dem die Seiten schließlich auch ausgedruckt werden) wird das entsprechende Element aus dem Array ermittelt und dem Textfeld txtArtikelBis zugewiesen. Die Ereignisprozedur Beim Formatieren des Seitenkopfes, in dem sich die Überschriften befinden, hat damit den folgenden Aufbau:
Private Sub Seitenkopf_Format(Cancel As Integer, FormatCount As Integer)
If Not ErsterDurchgang Then
Me!txtFirmaBis = aryFirmaBis(Me.Page)
End If
End Sub
