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

Monatskalender als Bericht (korrigiert)

Oft gefragt und selten gesehen wird der Monatskalender in Berichtsform. Im vorliegenden Beitrag erfahren Sie, wie Sie per Bericht einen Monatskalender ausgeben knnen. Voraussetzung dafr ist die Tabelle tblKalendertage des Beitrags Tabelle mit Kalenderdaten (ansehen).

Korrekturen

Der Bericht zur Anzeige der Monatsbersicht zeigte den falschen Tag zum Datum an. Die Beispieldatenbank sowie der nachfolgende Code wurden dahingehend angepasst.

Beispieldatenbank

Die Beispieldatenbank enthlt eine Tabelle mit Kalenderdaten fr 2003 und 2004 sowie einen Bericht zur Anzeige der Daten eines ausgewhlten Monats. Das Datum, das in dem anzuzeigenden Monat liegt, wird beim Aufruf per ffnungsargument bergeben:

DoCmd.OpenReport "rptKalender", View:=acViewPreview, OpenArgs:="1.1.2004"

Der Bericht zeigt daraufhin ein Kalenderblatt wie in Abbildung 1 an.

Abbildung 1: Kalenderblatt im Bericht

Kalenderblatt in Bericht anzeigen

Um dieses Kalenderblatt zu erzeugen, bentigen Sie lediglich die Steuerelemente zur Anzeige der Beschriftung im oberen Bereich des Kalenders sowie ein Textfeld, dass an das Feld Datum der Datenherkunft des Berichts, der Tabelle tblKalenderdaten, gebunden ist.

Mit diesem mssen Sie allerdings ordentlich jonglieren. Nachfolgend sehen Sie zunchst den kompletten Code, der im Klassenmodul des Berichts unterzubringen ist:

Option Compare Database

Dim Anzeigedatum As Date

Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)

    If Month(Datum) = Month(Anzeigedatum) And Year(Datum) = Year(Anzeigedatum) Then

        Me.txtTag.Left = (Weekday(Datum, vbMonday) - 1) * 650

        If Weekday(Datum, vbMonday) <> 7 Then

            Me.MoveLayout = False

        End If

    Else

        Cancel = True

    End If

End Sub

Private Sub Report_Open(Cancel As Integer)

    Dim ErsterTag As Date

    Dim LetzterTag As Date

    ErsterTag = Date - Day(Now()) + 1

    LetzterTag = DateSerial(Year(Date), Month(Date) + 1, 0)

    If Not IsNull(Me.OpenArgs) Then

        Anzeigedatum = Me.OpenArgs

    Else

        Anzeigedatum = Date

    End If

    Dim Kriterium As String

    Kriterium = "Datum >= " & CDbl(ErsterTag) & " AND Datum <= " & CDbl(LetzterTag)

    Me.Filter = Kriterium

    Me.FilterOn = True

End Sub

Private Sub Seitenkopfbereich_Format(Cancel As Integer, FormatCount As Integer)

    Me!txtMonatUndJahr = Format(Anzeigedatum, "MMMM") & " " & Format(Anzeigedatum, "YYYY")

End Sub

Beim ffnen des Berichts wird zunchst der anzuzeigende Monat ermittelt. Wenn kein Datumswert ber das ffnungsargument bergeben wurde, wird der aktuelle Monat angezeigt.

Beim Formatieren des Seitenkopfbereiches werden dem Textfeld txtMonatUndJahr der Monat und das Jahr des anzuzeigenden Datums bergeben.

Der Clou liegt in der Prozedur Beim Formatieren des Detailbereichs. Dort wird zunchst ermittelt, an welcher horizontalen Position sich der erste anzuzeigende Tag befindet. Dazu wird die Nummer des Wochentages ermittelt und ein entsprechender Wert fr die Eigenschaft Links des Steuerelements berechnet.

Auerdem wird immer, wenn der Tag kein Sonntag ist, also nicht ganz rechts liegt, das Springen in die nchste Zeile unterbunden. Dazu setzen Sie die Eigenschaft MoveLayout auf den Wert False. Nur, wenn die aktuelle Zeile beim Sonntag angekommen ist, hat MoveLayout den Wert True und das kommende Datum wird in der nchsten Zeile angezeigt - natrlich wieder ganz links.

© 2003-2015 André Minhorst Alle Rechte vorbehalten.