Berichte zur Laufzeit anpassen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

André Minhorst, Duisburg

Wenn Sie Ihren Anwendern wahren Luxus gönnen möchten, spendieren Sie ihnen doch einfach mal die einfache Möglichkeit, einen Bericht nach eigenen Wünschen zu gruppieren, ohne sich gleich in Access einarbeiten zu müssen. Das brauchen Sie nicht, da Sie lieber zahllose unterschiedliche Berichte mit allen denkbaren Gruppierungs- und Sortierungskombinationen programmieren Und was passiert, wenn sich das Corporate Design Ihres Kunden einmal ändert Im vorliegenden Beitrag lernen Sie, wie Sie mit ein wenig VBA das Maximum aus einem einzigen Bericht herausholen können.

Der vorliegende Beitrag verwendet die in einem weiteren Beitrag dieser Ausgabe beschriebene Musterlösung Einnahmen-überschussrechnung mit Access als Beispieldatenbank. Dabei wird besonderes Augenmerk auf das Formular frmAuswertung und den Bericht rptAuswertungVBA gerichtet.

Hinweis

Sie finden die Beispieldatenbank in Versionen für Access 97 (Eü97.mdb), Access 2000 und höher (Eü2000.mdb) auf der beiliegenden Heft-CD.

Bevor Sie per VBA auf Berichtsbereiche oder darin enthaltene Steuerelemente zugreifen können, müssen Sie diese zunächst einmal mit Namen kennen. Dazu verwenden Sie die Prozedur aus Quellcode 1.

Die Prozedur gibt alle Section-Elemente des Berichtes mit dem angegebenen Namen aus. Die Ausgabe sieht beispielsweise wie in Bild 1 aus.

Mit der Kenntnis der Namen der einzelnen Bereiche eines Berichts können Sie beispielsweise einen Bereich ein- oder ausblenden. Wenn Sie dies zur Laufzeit tun möchten, benötigen Sie optimalerweise ein Formular, das alle Berichtsbereiche anzeigt und Steuerelemente zum Einstellen der gewünschten Eigenschaften bereitstellt.

Eine weitere interessante Information ist die Gruppierungsebene. Diese und weitere Informationen erhalten Sie mit der Prozedur aus Quellcode 2. Achten Sie bei ihrer Verwendung darauf, dass der gewünschte Bericht auch geöffnet ist.

Bild 1: Ausgabe der Bereiche eines Berichts

Obwohl das Einrichten von Gruppierungen über den herkömmlichen Weg nicht besonders kompliziert ist, erfordert es doch ein gewisses Maß an Know-how. Das können Sie von den Endanwendern Ihrer Datenbank natürlich nicht erwarten, sofern diese nicht über Access-Kenntnisse verfügen. Um die Anwender dennoch zufrieden zu stellen, haben Sie zwei Möglichkeiten:

Public Function BerichtsbereicheAusgeben(Bericht As _    String)
    On Error Resume Next
    Dim i As Integer
    i = 0
    Do While Err.Number = 0
        Debug.Print i, Reports(Bericht).Section(i).Name
        i = i + 1
    Loop
End Function

Quellcode 1

Public Sub GruppierungsinformationenAusgeben _    (Berichtsname As String)
    On Error Resume Next
    Dim i As Integer
    Dim rpt As Report
    Set rpt = Reports(Berichtsname)
    i = 0
    Do While Not Err.Number > 0
        Debug.Print i, _            rpt.GroupLevel(i).ControlSource, _            rpt.GroupLevel(i).GroupFooter, _            rpt.GroupLevel(i).GroupHeader
        i = i + 1
    Loop
End Sub

Quellcode 2

  • Sie erstellen für jede Konfiguration einen eigenen Bericht. Der Nachteil dabei ist, dass grundlegende änderungen wie zum Beispiel des Layouts in allen Berichten durchgeführt werden müssen.
  • Sie erstellen einen Bericht, dessen Aussehen vom Benutzer dynamisch angepasst werden kann. Dazu stellen Sie dem Benutzer ein Formular zur Verfügung, mit dem er die Gruppierung, Filter und so weiter auswählen kann.
  • Da die erste Variante eher konventionell ist, lernen Sie hier die zweite Methode kennen. Dazu erstellen Sie zunächst ein Formular, mit dem Sie den Zeitraum sowie die Gruppierungen auswählen können.

    Das Formular hat zwei Funktionen. Es dient der Auswahl eines Zeitraums für die auszugebenden Geschäftsvorfälle sowie der Festlegung von Gruppierungsoptionen.

    Das Formular soll wie in Bild 2 aussehen. Der obere Bereich dient zum Festlegen des anzuzeigenden Zeitraums. Im unteren Bereich kann festgelegt werden, nach welchen Kriterien überhaupt gruppiert werden soll und in welcher Reihenfolge. Für das Gruppierungskriterium kann außerdem das Gruppierungsintervall festgelegt werden.

    Die beiden Schaltflächen mit den Pfeilen dienen dem Vertauschen der Reihenfolge der Gruppierungskriterien. Man hätte auch einfach ein Textfeld zum Eintragen von Zahlen zur Angabe der Reihenfolge verwenden können, aber das Auge isst schließlich auch mit.

    Wenn Sie mehr als zwei unterschiedliche Gruppierungen verwenden möchten, wird die Programmierung natürlich etwas aufwändiger.

    Für weitere Informationen sehen Sie sich den Entwurf des Formulars und die darin verwendeten Prozeduren an.

    Auswertung des Formulars

    Die Einstellung des gewünschten Zeitraums im Bericht erfolgt über die Zuweisung einer entsprechenden WhereCondition beim Aufruf des Formulars.

    Bild 2: Berichtsoptionen einstellen per Formular

    Wesentlich interessanter ist die Einstellung der Gruppierungen anhand der im Formular festgelegten Informationen.

    Bild 3: Der Bericht rptAuswertung_Rohfassung in der Entwurfsansicht

    Der vorliegende Bericht rptAuswertungVBA soll zwischen null und zwei Gruppierungsebenen aufweisen, die mit dem im vorherigen Kapitel beschriebenen Formular festgelegt werden.

    Es gibt zwei Möglichkeiten, einen Bericht dynamisch zu gruppieren:

  • Der Bericht wird in der Entwurfsansicht geöffnet. Dort werden die Gruppierungen und sämtliche benötigten Steuerelemente per VBA hinzugefügt.
  • Der Bericht wird bereits im Vorfeld mit den notwendigen Gruppierungsebenen und den erforderlichen Steuerelementen ausgestattet. Zur Laufzeit werden nur noch die Felder festgelegt, nach denen gruppiert werden soll, und die Steuerelemente mit Beschriftungen versehen.
  • Die erste Möglichkeit ist sehr viel programmieraufwändiger als die zweite. Jedes Steuerelement muss zentimetergenau eingesetzt werden und der Zeitaufwand für die Anpassung des Berichtes zur Laufzeit ist im Vergleich zur zweiten Lösung sehr hoch. Der wichtigste Punkt aber ist, dass der Bericht definitiv in der Entwurfsansicht geöffnet werden muss. Das ist aber beispielsweise in einer .mde-Datenbank nicht möglich. Daher wird nachfolgend die zweite Variante beschrieben.

    Hinzufügen von Gruppierungen

    Der erste Schritt besteht darin, die gewünschte Menge Gruppierungsebenen anzulegen und diese mit den entsprechenden leeren Steuerelementen zu versehen. Gleichzeitig können Sie die Gruppenköpfe und Gruppenfüße farblich oder auf andere Weise optisch hervorheben.

    Wenn Sie die nachfolgenden Schritte nachvollziehen möchten, verwenden Sie den Bericht rptAuswertung_Rohfassung aus der Musterlösung.

    Der Bericht zeigt die einzelnen Geschäftsvorfälle mit den Netto- und Bruttoumsätzen und einigen weiteren Zahlen an (siehe Bild 3). Im Berichtsfuß werden die Beträge addiert.

    Nun fügen Sie dem Bericht drei Sortierungen beziehungsweise Gruppierungen hinzu. Wie diese angeordnet sind, zeigt Abb. 4.

    Tab. 1 zeigt, welche der Einträge im Dialog Sortieren und Gruppieren einen Gruppenkopf und einen Gruppenfuß enthalten müssen. Die Einträge befinden sich in der gleichen Reihenfolge wie in Bild 4.

    Der linke Teil des Berichts mit den Gruppierungen sieht nun wie in Bild 5 aus.

    Bild 4: Manuell angelegte Gruppierungen

    Bild 5: Frisch gruppiert ist halb gewonnen …

    Hinweis

    Möglicherweise fragen Sie sich, warum nun doch Gruppierungen nach festen Werten angelegt werden. Der Grund ist, dass Sie ja nach irgendetwas gruppieren müssen, damit Sie die Gruppierungen nachher per Code anpassen können. Theoretisch könnten Sie auch in allen Ebenen nach dem Datum oder anderen Feldern der Datenherkunft gruppieren.

    Feld/Ausdruck

    Gruppenkopf

    Gruppenfuß

    GeschaeftsvorfallartID

    ja

    ja

    Datum

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    Testzugang

    eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar