Zeilenvorschub in Berichten steuern

Es gibt einige Möglichkeiten, den Zeilenvorschub bei der Ausgabe in Berichten zu steuern. Dazu gehört die Eigenschaft MoveLayout, die Sie in entsprechenden Ereignissen eines Berichts setzen können, um die Ausgabe des Detailbereichs zu steuern. Ein schönes Beispiel dazu ist die Ausgabe eines Monatskalenders, bei dem jeweils eine Zeile eine Woche abbildet und jede neue Woche in einer weiteren Zeile beginnt.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1706_BerichtsausgabeSteuern.accdb.

Vorbereitungen

Als Beispiel für die Eigenschaften eines Berichts, um mehrere Datensätze in einer Zeile anzuzeigen oder einen Zeilenvorschub zu bewirken, verwenden wir eine Tabelle namens tblDatumswerte. Diese soll im Feld Datumswert einige hundert Datumswerte enthalten, mit denen wir im Bericht komfortabel experimentieren können. Der Entwurf dieser Tabelle ist einfach gehalten und umfasst neben dem obligatorischen (und hier noch nicht einmal nötigen) Primärschlüsselfeld noch das Feld Datumswert (siehe Bild 1).

Entwurf der Datumstabelle

Bild 1: Entwurf der Datumstabelle

Diese Tabelle füllen wir mit der Prozedur DatumsangabenSchreiben, welche Sie im Modul mdlTools der Beispieldatenbank finden. Die Prozedur sieht wie in Listing 1 aus und durchläuft eine Schleife, in der jeweils ein Datensatz zur Tabelle hinzugefügt wird, bis 1.001 Datumsangaben in der Tabelle liegen. Die Schleife läuft über eine Datumsvariable namens datCurrent, der Startwert ist der 1.1.2017, der Endwert ist dieses Datum plus 1.000.

Public Sub DatumsangabenSchreiben()
     Dim db As DAO.Database
     Dim datCurrent As Date
     Dim datStart As Date
     Set db = CurrentDb
     datStart = "1.1.2017"
     db.Execute "DELETE * FROM tblDatumswerte", dbFailOnError
     For datCurrent = datStart To datStart + 1000
         db.Execute "INSERT INTO tblDatumswerte(Datumswert) VALUES(" & Format(datCurrent, "\#yyyy\-mm\-dd\#") & ")", dbFailOnError
     Next datCurrent
End Sub

Listing 1: Füllt die Tabelle tblDatumswerte mit 1.000 Datensätzen

Das Ergebnis sieht in der Tabelle wie in Bild 2 aus.

Gefüllte Datumstabelle

Bild 2: Gefüllte Datumstabelle

Datum im Bericht

Nun wollen wir den Bericht erstellen, für den wir vorerst die folgende Vorgabe festlegen wollen: Er soll in einer Zeile sieben Datumsangaben anzeigen und dann in der nächsten Zeile mit den Datumsangaben fortfahren. Um die Wochentage et cetera kümmern wir uns vorerst nicht.

Als Erstes legen wir einen neuen Bericht namens rptKalender an, dem wir als Datenherkunft die Tabelle tblDatumswerte hinzufügen. Dann ziehen Sie das Feld Datumswert aus der Feldliste in den Detailbereich des Berichtsentwurfs und entfernen das Bezeichnungsfeld dieses Steuerelements. Schieben Sie das Steuer-element dann nach ganz links oben. ändern Sie seine Größe so, dass es sieben Mal nebeneinander in den Bericht passt (siehe Bild 3).

Einfügen des Feldes zur Anzeige des Datums

Bild 3: Einfügen des Feldes zur Anzeige des Datums

Wenn Sie den Bericht nun in der Seitenansicht öffnen, werden die Datumswerte natürlich alle untereinander angezeigt (siehe Bild 4). Bevor wir dafür sorgen, dass sieben Datensätze je Zeile angezeigt werden, entfernen wir noch die alternierenden Hintergrundfarben und die Textrahmen. Stellen Sie dazu für den Detailbereich die Eigenschaft Alternative Hintergrundfarbe auf den gleichen Wert ein wie die Eigenschaft Hintergrundfarbe sowie die Eigenschaft Rahmenart des Textfeldes auf den Wert Transparent.

Bericht in der herkömmlichen Ansicht mit einem Datensatz je Zeile

Bild 4: Bericht in der herkömmlichen Ansicht mit einem Datensatz je Zeile

Mehrere Datensätze pro Zeile

Nun kümmern wir uns um die Wiederholung der Datensätze pro Zeile. Dazu fügen Sie für den Detailbereich des Berichts eine Ereignisprozedur für das Ereignis Beim Formatieren hinzu (siehe Bild 5).

Einfügen einer Ereignisprozedur für Beim Formatieren

Bild 5: Einfügen einer Ereignisprozedur für Beim Formatieren

In einem ersten Versuch stellen wir in dieser Prozedur die Eigenschaft MoveLayout auf den Wert False ein:

Private Sub Detailbereich_Format(Cancel As Integer, _
        FormatCount As Integer)
    Me.MoveLayout = False
End Sub

Dies führt uns bereits in die richtige Richtung, aber noch nicht vollständig: Wie Bild 6 zeigt, erfolgt nun kein Zeilenwechsel mehr. Allerdings werden nun alle Datensätze der Tabelle übereinander abgebildet. Wir sorgen nun im nächsten Schritt dafür, dass die Elemente immer eine Position weiter nach rechts rücken.

Alle Datensätze werden übereinander geschrieben.

Bild 6: Alle Datensätze werden übereinander geschrieben.

Dazu behelfen wir uns der Einstellung der Eigenschaft Left, welche den Abstand eines Steuerelements vom linken Rand angibt. Wir führen eine modulweit zugängliche Variable namens intPosition ein, welche die Position des Textfeldes für den aktuellen Datensatz speichern soll. Dieser Wert wird immer beim Aufruf der Beim Formatieren-Ereignisprozedur um eins erhöht. Da dies wie in Listing 2 immer zu Beginn der Prozedur geschieht, lautet dieser Wert beim ersten Durchgang also beispielsweise 1. Wenn intPosition größer als 7 wird, soll es wieder auf den Wert 1 eingestellt werden. Immer nach der Ermittlung des aktuellen Wertes für intPosition stellt die Prozedur die Eigenschaft Left ein, und zwar auf die über die Eigenschaft Width ermittelte Breite multipliziert mit intPosition – 1.

Dim intPosition As Integer
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
     Me.MoveLayout = False
     intPosition = intPosition + 1
     If intPosition > 7 Then
         intPosition = 1
     End If
     Me!Datumswert.Left = Me!Datumswert.Width * (intPosition - 1)
End Sub

Listing 2: Die Datensätze sollen nun auf sieben Positionen aufgeteilt werden.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar