SCHWERPUNKT

Berichte per VBA bändigen

Berichtsbereiche referenzieren

Auch die einzelnen Berichtsbereiche kann man referenzieren. Das macht Sinn, wenn man beispielsweise einen Bereich ein- oder ausblenden oder eine Eigenschaft ändern möchte. Der Verweis auf einen Berichtsbereich erfolgt über die Section-Auflistung eines Berichts. Dabei kommen für die Standardbereiche Zahlenwerte oder Konstanten in Frage, während man die Gruppenköpfe und -füße nur mit Zahlenwerten referenzieren kann. Den Detailbereich machen Sie etwa mit folgenden Anweisungen unsichtbar:
Me.Section(0).Visible = False
Me.Section(acDetail).Visible = False

Für die übrigen Bereiche verwenden Sie die folgenden Konstanten:

  • Berichtskopf: acHeader (1)

  • Berichtsfuß: acFooter (2)

  • Seitenkopf: acPageHeader (3)

  • Seitenfuß: acPageFooter (4)

Die Zahlenwerte für die einzelnen Gruppierungsbereiche sehen folgendermaßen aus: Der Kopfbereich der ersten Gruppierungsebene erhält den Zahlenwert 5, der entsprechende Fußbereich den Zahlenwert 6. Die Kopf- und Fußbereiche der übrigen Gruppierungsebenen werden entsprechend durchnummeriert.

Neben der Konstanten und dem Zahlenwert gibt es eine weitere Möglichkeit, einen Berichtsbereich zu referenzieren. Dabei handelt es sich um den Wert der Eigenschaft Name des jeweiligen Bereichs. Den Namen können Sie nach Ihren eigenen Wünschen anpassen, die standardmäßig vergebenen Namen reichen allerdings meist aus (Bild 1).

Bild 1: Der Name der einzelnen Bereiche eines Berichts kann angepasst werden.
Bild 1: Der Name der einzelnen Bereiche eines Berichts kann angepasst werden.

Über den Namen können Sie auf einen Bereich so zugreifen, als ob es sich dabei um ein Steuerelement des Berichts handelt. Die Bereichsnamen werden sogar von IntelliSense unterstützt (Bild 2). Die Routine aus Listing 1 zeigt, wie Sie die Namen und Höhen aller vorhandenen Berichtsbereiche im Direktfenster ausgeben können.

Bild 2: Referenzieren eines Berichtsbereichs über den Bereichsnamen.
Bild 2: Referenzieren eines Berichtsbereichs über den Bereichsnamen.

Auch die Gruppierungsebenen eines Berichts bieten eine weitere Möglichkeit des Zugriffs, nämlich über die GroupLevel-Auflistung. Die folgende Anweisung gibt etwa den Namen des Feldes aus, nach dem die erste Gruppierungsebene gruppiert wird:

Debug.Print Me.GroupLevel(0).ControlSource

Doch Vorsicht: Die Gruppierungsebenen sind keinesfalls mit den Berichtsbereichen identisch und haben völlig andere Eigenschaften und Methoden.

Private Sub Report_Open(Cancel As Integer)
Dim i As Integer
On Error Resume Next
For i = 0 To 24
Debug.Print Me.Section(i).Name, Me.Section(i).Height
Next i
End Sub