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
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:
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 |