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).
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).
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