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

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 1/2007.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erweitern Sie den Terminplan aus Ausgabe 3/2006 um die flexible Anzeige von Zeiträumen.

Techniken

Formulare, VBA, bedingte Formatierung

Voraussetzungen

Access 2000 und höher

Beispieldatei

Zeitplan2.mdb

Shortlink

441

Zeitpläne mit Access erstellen, Teil 2

Karl Donaubauer, Wien

In Ausgabe 3/2006 hat Access im Unternehmen im Artikel „Zeitpläne mit Access erstellen“ gezeigt, wie man mit reinen Access-Bordmitteln einen grafischen Monatsplan entwickeln kann. Aufgrund zahlreicher Leseranfragen machen wir diesen Monatsplan nun etwas flexibler: etwa, um größere oder kleinere Zeitintervalle anzuzeigen oder eine Kalenderwochenansicht zu präsentieren.

Die veränderte Oberfläche

Der Aufbau der Datenbankstruktur ist gegenüber dem Artikel aus [1] unverändert. Geändert haben sich nur die Oberfläche und der Code des Zeitplan-Formulars. Abb. 1 zeigt die aktuelle Version des Formulars.

Abbildung1.tif

Abb. 1: Zeitplan mit Einstellung auf kompletten Monat

Die Beispiel-Datenbank ist begrenzt auf Zeiträume von einem einzelnen Tag bis zu einem Monat, also maximal 31 Tagen.

Der Hauptgrund dafür ist, dass im Plan kurze Texte in jedem Feld lesbar sein sollten, damit der Gast-, Kunden-, Veranstaltungsname oder sonstige mit dem Zeitplan verwaltete Informationen noch gut zu erkennen sind.

Wenn Sie sehr große Bildschirme oder sehr hohe Auflösungen haben, können Sie den maximal darstellbaren Zeitraum mit etwas Anpassungsarbeit, aber bei unveränderten Prinzipien, natürlich auf zwei oder drei Monate erweitern.

Abb. 2 zeigt im Ausschnitt den oberen Rand mit den neuen, vielfältigen Einstellmöglichkeiten für den Zeitraum.

Abbildung2.tif

Abb. 2: Erweiterte Zeitauswahl und Anzeigen

Wenn Sie die erste Version kennen, werden Ihnen sofort die Anzeige des Wochentags und der Kalenderwoche (bei jedem Montag) auffallen. Die Wochentage sind vor allem zur schnelleren Orientierung hinzugefügt, die Kalenderwoche hingegen, weil in vielen Branchen vorwiegend mit diesem Zeitraster gearbeitet wird.

Über diesen beiden Anzeigeelementen befinden sich die erweiterten Steuerelemente zur Auswahl des darzustellenden Zeitraums und zur Naviga-tion.

Hier wurde zu Demonstrationszwecken bewusst etwas übertrieben. Suchen Sie sich die für Ihre Praxis passenden Möglichkeiten aus und machen Sie die weniger in Betracht kommenden Steuerelemente einfach unsichtbar.

Die Kombinationsfelder links zur Auswahl von Jahr und Monat waren bereits in der ersten Version des Plans vorhanden. Gleich daneben finden Sie nun eine Optionsgruppe, in der Sie auswählen können, ob eine einzelne Kalenderwoche dargestellt werden soll oder zwei oder drei Kalenderwochen.

Rechts davon gibt es zwei Datumsfelder, in denen immer die Grenzdaten des aktuell eingestellten Zeitraums angezeigt werden. Sie können in diese Textfelder auch direkt ein Start- und Enddatum eingeben und damit einen beliebigen Zeitraum (von maximal 31 Tagen) abseits von Monats- oder Wochenintervallen darstellen. Daneben gibt es noch zwei Schaltflächen zum Rückwärts- und Vorwärtsblättern. Spielen Sie am besten zuerst mit den verschiedenen Steuerelementen.

Der erweiterte Code

Listing 1 zeigt die Prozedur, die durch das Ereignis Beim Öffnen des Formulars ausgelöst wird.

Listing 1: Diese Routine wird beim Öffnen des Terminformulars ausgelöst.

Private Sub Form_Open(Cancel As Integer)

     procFormat

     Me!cboMonat = Month(Date)

     cboMonat_AfterUpdate

     'grpKW_AfterUpdate

     procFill

End Sub

Darin wird zunächst die Sub procFormat aufge-rufen, die mit Hilfe der bedingten Formatierung (FormatConditions) für die spätere Einfärbung der Kalendereinträge sorgt.

Sie ist unverändert gegenüber der alten Kalenderversion und wird daher nicht nochmal erläutert. Danach wird das Monats-Kombinationsfeld mit dem Monat des aktuellen Datums gefüllt.

Dadurch wird der aktuelle Monat beim Öffnen des Formulars dargestellt. Möchten Sie hingegen als Grundeinstellung die aktuelle Kalenderwoche sehen, so müssen Sie nur diese Zeile auskommentieren und dafür die nächste Codezeile aktivieren.

Sie ruft die AfterUpdate-Prozedur der Optionsgruppe auf, in der ausgewählt werden kann, wie viele Wochen darzustellen sind. Dort wird bei fehlender Angabe die aktuelle Kalenderwoche eingesetzt. Abschließend wird die zentrale Sub procFill aufgerufen, die den Kalender mit Daten füllt (Listing 2).

Listing 2: Die Routine procFill füllt das Kalenderformular mit Daten und färbt die Steuerelemente ein (erster Teil).

Sub procFill()

     Dim db As DAO.Database

     Dim rsPlan As DAO.Recordset, rsDat As DAO.Recordset

     Dim ctl As Control

     Dim strSQL As String

     Dim dteComp As Date

     Dim i As Long, lngColor As Long, lngLeft As Long, lngWidth As Long

     Dim lngStart As Long, lngEnd As Long, lngDays As Long

     Set db = CurrentDb

     db.Execute "DELETE FROM tblPlan", dbFailOnError

     db.Execute "INSERT INTO tblPlan (RowCaption1) SELECT RmBez FROM tblRaum", _
dbFailOnError

     lngLeft = 645

     lngWidth = 510

     lngStart = Me!txtVon

     lngEnd = Me!txtBis

     lngDays = lng7End - lngStart + 1

     If lngDays < 28 Then

         lngWidth = lngWidth * 31 / lngDays

     End If

     strSQL = _
"SELECT a.RmBez, a.RSStart, a.RSEnde, a.RSId, a.RSStatus, b.KDNachname" & _

     " FROM tblReservierung AS a LEFT JOIN tblKunde AS b ON a.KDId = b.KDId" & _

     " WHERE a.RSStart<=" & lngEnd & _

     " And a.RSEnde >" & lngStart & _

     " ORDER BY a.RSStart, a.RSEnde"

     Set rsPlan = db.OpenRecordset("tblPlan", dbOpenDynaset)

     Set rsDat = db.OpenRecordset(strSQL, dbOpenDynaset)

     For i = 1 To 31

         Me("cptItem" & i).Caption = ""

         Me("cpt2Item" & i).Caption = ""

         Me("cptItem" & i).BackColor = vbWhite

         Me("cpt2Item" & i).BackColor = vbWhite

         Me("cptKW" & i).Value = Null

         Me("cptWD" & i).Caption = ""

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.