SCHWERPUNKT

Berichte per VBA bändigen

Weitere Datentypen

Für die anderen Datentypen sieht das im Prinzip ganz ähnlich aus. Enthält das unter Control-Source angegebene Feld einen Datums-/Zeitdatentyp, sorgt der Wert 0 für die Eigenschaft GroupOn ebenfalls dafür, dass die Gruppierung nach dem ganzen Wert erfolgt. Sie können aber auch nach den im Datum enthaltenen Bestandteilen sortieren, also etwa nach dem Jahr. Dazu verwenden Sie für die Eigenschaft GroupOn die folgenden Zahlenwerte:

  • 2: Jahr

  • 3: Quartal

  • 4: Monat

  • 5: Woche

  • 6: Tag

  • 7: Stunde

  • 8: Minute

.

Der Clou ist, dass Sie nicht nur nach den genannten Einheiten gruppieren können, sondern auch nach deren Vielfachen. Sie können also auch jeweils 30 Minuten zusammenfassen. Dazu legen Sie einfach das gewünschte Vielfache mit der Eigenschaft GroupInterval fest.

Im folgenden Beispiel sorgen zwei Gruppierungen und eine Sortierung dafür, dass die Bestellungen der Nordwind-Datenbank nach Datum sortiert und nach Jahren und Monaten gruppiert werden – wobei jeweils zwei Monate zusammengefasst werden sollen.

Den Aufbau des Berichts finden Sie in Bild 5. Damit die Ausgabe wie in Bild 6 aussieht, stellen Sie die Eigenschaften der einzelnen Gruppierungsebenen mit der Prozedur aus Listing 3 ein.

Bild 5: Bericht zur Anzeige von Bestellungen in Gruppierungen von je zwei Monaten.
Bild 5: Bericht zur Anzeige von Bestellungen in Gruppierungen von je zwei Monaten.
Bild 6: Gruppierung von Bestellungen nach Jahren und Monaten in Intervallen von je zwei Monaten.
Bild 6: Gruppierung von Bestellungen nach Jahren und Monaten in Intervallen von je zwei Monaten.

Private Sub Report_Open(Cancel As Integer)
'Äußere Gruppierung: Jahre
With Me.GroupLevel(0)
'Gruppierung nach Bestelldatum
.ControlSource = "Bestelldatum"
'Gruppierungseinheit: Jahre
.GroupOn = 2
'Gruppierungsintervall: 1
.GroupInterval = 1
'Zusammenhalten: nein
.KeepTogether = 0
End With
'Innere Gruppierung: Monate
With Me.GroupLevel(1)
'Gruppierung wiederum nach dem Bestelldatum...
.ControlSource = "Bestelldatum"
'... hier allerdings nach Monaten...
.GroupOn = 4
'... und zwar in Zweier-Intervallen.
.GroupInterval = 2
'Zusammenhalten: mit ersten Detaildatensatz
.KeepTogether = 2
End With
End Sub

Wichtig ist in diesem Zusammenhang, dass die Gruppierungen in der Reihenfolge der Abarbeitung von 0 bis n durchnummeriert werden. Etwas Fummelarbeit ist die Ausgabe der betroffenen Monate, also etwa „Juli/August“. Der dazu verwendete Ausdruck für die Eigenschaft Steuerelementinhalt des entsprechenden Textfeldes lautet folgendermaßen:

=Format("1." & Wenn(Monat([Bestelldatum]) Mod 2=0;Monat([Bestelldatum])-1;Monat([Bestelldatum])) & "." & Jahr([Bestelldatum]);"mmmm") & "/" & Format("1." & Wenn(Monat([Bestelldatum]) Mod 2=0;Monat([Bestelldatum]); Monat([Bestelldatum]+1)) & ." & Jahr([Bestelldatum]);" mmmm")

Der Ausdruck verwendet das Bestelldatum des ersten Datensatzes der Gruppierung und prüft, ob die Monatszahl gerade oder ungerade ist. Als erster der zwei Monate soll immer ein ungerader Monat genannt werden, damit die Monate Januar/Februar, März/April und so weiter zusammen ausgegeben werden. Für die Gruppierung erledigt Access dies automatisch, aber für die Überschrift im Gruppenkopf ist das nicht selbstverständlich.