Inhaltsverzeichnisse für Access-Berichte

Zusammenfassung

Ergänzen Sie umfangreiche Berichte durch ein Inhaltsverzeichnis.

Techniken

Berichte

Voraussetzungen

Access 2000 oder höher

Beispieldateien

InVerz.mdb

Karl Donaubauer, Wien

Dem an sich leistungsfähigen Reportgenerator von Access fehlt eine eingebaute Funktionalität für Inhaltsverzeichnisse. Durch die Vielfalt der Einstellungen für Gruppierungen, Zusammenhalten und Seitenumbrüche können die Formatierungsvorgänge in Berichten sehr komplex werden. Eine selbst programmierte Lösung zum Erzeugen von Inhaltsverzeichnissen muss darauf Rücksicht nehmen.

Die Tabelle tblOrte (siehe Bild 1) enthält rund 270 Datensätze mit den Feldern Land, Bundesland und Ort. Die Datenstruktur ist abgeflacht, um die Beispiele in Hinblick auf die Daten einfach zu halten. Im normalisierten Fall müssten das natürlich mehrere Tabellen mit 1:n-Beziehungen sein. Zudem enthält die Tabelle ein Ja/Nein-Feld namens Drucken, das eine einfache Filtermöglichkeit für Tests mit den Inhaltsverzeichnissen bietet.

Die zweite Tabelle tblInhaltsverzeichnis dient dazu, die Information zum Erstellen der Inhaltsverzeichnisse aufzunehmen. Die Tabelle hat eine sehr einfache Struktur (siehe Bild 2). Sie besitzt nur zwei relevante Felder zur Aufnahme der Texteinträge und Seitenzahlen für das Inhaltsverzeichnis.

Bild 1: Die Testdaten in der Tabelle tblOrte

Bild 2: Tabelle für die Daten der Inhaltsverzeichnisse

Die einzige Abfrage qryOrte dient als Datenquelle aller Berichts-Beispiele, um die Daten der Tabelle tblOrte über das bereits erwähnte Ja/Nein-Feld filtern zu können.

Das einzige Formular frmBerichtOeffnen (siehe Bild 3) enthält ein Listenfeld mit den Berichtsnamen und eine Schaltfläche zum öffnen. Der entsprechende Code wird später erläutert.

Bild 3: Formular zum Aufrufen der Berichte

Es gibt mehrere Beispiel-Berichte und ein Standardmodul basInhaltsVerzeichnis, das fast den gesamten Code zur Erzeugung der Inhaltsverzeichnisse enthält.

öffnen Sie das Formular frmBerichtOeffnen, wählen Sie im Listenfeld den ersten Bericht rptOrteLaender1 und öffnen Sie ihn entweder per Doppelklick auf den Listeneintrag oder durch Klick auf die Schaltfläche.

Bild 4: Inhaltsverzeichnis im Berichtskopf

Bild 4 zeigt die erste Seite des Berichtes mit einem einfachen Inhaltsverzeichnis auf Basis der Länder. Bild 5 zeigt eine typische Seite für die Beispiel-Berichte mit Gruppierungen und Gruppenköpfen für die Länder und Bundesländer, wie für solche 1:n-Strukturen üblich.

Bild 5: Bericht mit Gruppierung nach Ländern

Wenn Sie in die Entwurfsansicht des Berichtes wechseln, sehen Sie, dass der Unterbericht rptInhaltsverzeichnis das Inhaltsverzeichnis liefert. Er bezieht seine Daten aus der schon erwähnten Hilfstabelle tblInhaltsverzeichnis, die dynamisch per Code geleert und gefüllt wird.

Wie funktioniert nun die Sache im Detail Die ersten Schritte erfolgen im Code hinter der Schaltfläche des Formulars (s. Quellcode 1).

Die erste wichtige Codezeile ist jene mit dem DELETE. Sie löscht zunächst alle alten Einträge in der Tabelle tblInhaltsverzeichnis.

Dann wird die globale Boolean-Variable blnTOC auf True gesetzt.

Quellcode 1: Vorbereitungen zum Erstellen des Inhaltsverzeichnisses

Private Sub btnStartReport_Click()
    On Error GoTo myError
    If IsNull(Me!lstBerichte) Then Exit Sub
    Dim strReport As String
    strReport = Me!lstBerichte
    CurrentDb.Execute "DELETE FROM tblInhaltsverzeichnis"
    blnTOC = True
    DoCmd.OpenReport strReport, acViewPreview, , , acHidden
    DoCmd.Close acReport, strReport
    blnTOC = False
    DoCmd.OpenReport strReport, acViewPreview
myExit:
    Exit Sub
myError:
    MsgBox "Ausnahme Nr. " & Err.Number & " " _        & Err.Description, vbCritical
    Resume myExit
End Sub

Quellcode 2: Ereignisprozeduren der Berichtsbereiche mit Aufrufen weiterer Prozeduren

Private Sub Gruppenkopf0_Format(Cancel As Integer, _    FormatCount As Integer)
    TOCFormat FormatCount
End Sub
Private Sub Gruppenkopf0_Retreat()
    TOCRetreat
End Sub
Private Sub Report_Open(Cancel As Integer)
    TOCOpen Me.Name, "Land"
End Sub

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

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar