Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Lange Memofelder in Berichten umbrechen

Der eine oder andere Grund drfte Anwender dazu bewegen, lange Memofelder in Berichten unterbringen zu wollen. Wenn der Memotext zu lang ist, resultiert das in einem pltzlichen Ende des Textes. Im vorliegenden Beitrag erfahren Sie, wie Sie einen Memotext fr einen Bericht temporr in seine einzelnen Abstze aufteilen und diese per Bericht anzeigen. Dabei wird davon ausgegangen, dass ein einzelner Absatz nicht ber mehr als eine Seite geht und dass Abstze im Memofeld mit Strg + Eingabetaste erzeugt wurden und mit der Zeichenfolge Chr(13) & Chr(10) identisch sind.

Beispieldatenbank

Die Beispieldatenbank enthlt die beiden Tabellen tblMemo und tblMemoTemp. Die erste enthlt den langen Memotext, die zweite wird temporr beim Anlegen des Berichts mit den einzelnen Abstzen des Memofeldes aus der Tabelle tblMemo gefllt. Der Bericht rptMemofelder schlielich zeigt das zerlegte Memofeld an.

Memofeld zerlegen

Der Bericht rptMemofelder verwendet die Tabelle tblMemoTemp als Datenherkunft. Um den Inhalt eines Datensatzes der Tabelle tblMemo zerlegen und in diese Tabelle zu schreiben, verwenden Sie eine Prozedur, die beim ffnen des Berichts ausgelst wird:

Private Sub Report_Open(Cancel As Integer)

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Dim MemoInhalt As String

    Dim posEndeAbsatz As Integer

    Set db = CurrentDb

    Set rst = db.OpenRecordset("tblMemo")

    db.Execute "DELETE * FROM tblMemoTemp"

    MemoInhalt = rst!MemoInhalt

    posEndeAbsatz = InStr(1, MemoInhalt, Chr(13) & Chr(10))

    Do While posEndeAbsatz <> 0

        db.Execute "INSERT INTO tblMemoTemp(MemoTempInhalt) VALUES('" _

            & Mid(MemoInhalt, 1, posEndeAbsatz - 1) & "')"

        MemoInhalt = Mid(MemoInhalt, posEndeAbsatz + 2)

        posEndeAbsatz = InStr(1, MemoInhalt, Chr(13) & Chr(10))

    Loop

    If Len(MemoInhalt) > 0 Then

        db.Execute "INSERT INTO tblMemoTemp(MemoTempInhalt) VALUES('" _

            & MemoInhalt & "')"

    End If

End Sub

Die Prozedur liest zunchst den Inhalt des Feldes MemoInhalt des ersten Datensatzes der Tabelle tblMemo ein, speichert diesen in der Variablen MemoInhalt und lscht den kompletten Inhalt der Tabelle tblMemoTemp.

Diese wird in einer Do While-Schleife wieder gefllt, die den Inhalt der Variablen auf Vorkommen der Zeichenkombination Chr(13) & Chr(10) untersucht. Bei jedem Vorkommen wird der Teil davor als eigener Absatz in die Tabelle tblMemoTemp gespeichert und der Teil dahinter auf weitere Vorkommen untersucht. Wenn kein Zeilenumbruch mehr folgt, wird der verbleibende Teil als letzter Absatz in der Tabelle tblMemoTemp gespeichert und der Inhalt dieser Tabelle im Bericht angezeigt (siehe Abbildung 1).

Dadurch, dass nun mehrere kurze Memo-Texte in mehreren Datenstzen vorliegen, wird der Absatz, der nicht mehr auf die aktuelle Seite passt, automatisch auf die nchste verschoben.

Abbildung 1: Ein langer Memotext kann in Abstzen ber mehrere Berichtsseiten verteilt werden.

© 2003-2015 André Minhorst Alle Rechte vorbehalten.