Berichte per VBA steuern

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

Berichte sind in vielerlei Hinsicht Formularen ähnlich, doch durch die fehlende Interaktion ist ihr Funktionsumfang auch geringer. Man sagt, die Steuerung per VBA biete daher bei Berichten auch nicht so viele Möglichkeiten. Das trifft nur begrenzt zu. Der vorliegende Artikel zeigt, welche Möglichkeiten die Steuerung von Berichten mit VBA offeriert.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1904_BerichtePerVBA.accdb.

In der Beitragsreihe “Ereignisreiche Berichte” (ab Ausgabe 12/2005) haben Sie bereits erfahren, welche Ereignisse Berichte bereitstellen und für welche Zwecke sie sich einsetzen lassen. Neben diesen Ereignissen liefern Berichte einige Eigenschaften und Methoden, ohne die so manche Aufgabe nicht zu lösen wäre. Im vorliegenden Beitrag erfahren Sie, worum es sich dabei dreht und wie Sie die Eigenschaften und Methoden verwenden.

Steuerelemente und Berichtsbereiche referenzieren

Wenn Sie den Wert eines Steuerelements lesen oder schreiben möchten, greifen Sie wie in Formularen darauf zu: entweder über die entsprechende Auflistung, inklusive Objektname, oder, wenn die Referenz aus dem gleichen Objekt heraus erfolgt, mit dem Schlüsselwort Me.

Für die Variante mit dem Objektnamen gibt es mehrere Möglichkeiten, unter anderem die folgenden:

Reports.Item("rptBeispiel").Controls("ctlBeispiel")
Reports!rptBeispiel!ctlBeispiel

Mit dem Schlüsselwort Me sieht der Zugriff etwa folgendermaßen aus:

Me!ctlBeispiel

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 allerdingsmeist aus (siehe 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 (siehe Bild 2).

Referenzieren eines Berichtsbereichs über den Bereichsnamen per IntelliSense

Bild 2: Referenzieren eines Berichtsbereichs über den Bereichsnamen per IntelliSense

Die Routine aus Listing 1 zeigt, wie Sie die Namen und Höhen aller vorhandenen Berichtsbereiche im Direktfenster ausgeben können.

Private Sub Report_Open(Cancel As Integer)
     Dim i As Integer
     On Error Resume Next
     For i = 0 To 24
         Debug.Print "Name des Bereichs: " & Me.Section(i).Name
         Debug.Print "Höhe des Bereichs: " & Me.Section(i).Height
     Next i
End Sub

Listing 1: Ausgabe der Berichtsbereiche und deren Höhe

Das Ergebnis dieser Prozedur nach dem öffnen eines Berichts sieht etwa wie folgt aus:

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