 |
| MS Project: Kalender und
Checklisten optimieren |
|
Probleme mit dem Projektkalender gehören
der Vergangenheit an, wenn Sie sich mit MS Projekt eingehender beschäftigen.
|
|
(August 2001)
|
Inhalt dieses
Artikels:
Kalender-Manager | Umwandlung
Arbeitstage | Feiertagsberechnung
| Checklisten-Manager
| Anlegen von Checklisten
| Alle
Screenshots auf einen Blick | Alle
Listings auf einen Blick
Quelle: VBA
Magazin
|
|
| |
|
MS Project 2000 ist ein leistungsfähiges Werkzeug zum Verwalten
von verschiedensten Projekten. Schwächen zeigt das Projektmanagement-Tool,
wenn Informationen zu einzelnen Vorgängen eines Projektes wie
Checklisten oder Berichte gespeichert werden sollen. Auch der Kalender
ist verbesserungsfähig - projektfreie Zeiten wie Feiertage
oder Betriebsferien müssen manuell eingepflegt werden. Doch
das lässt sich ändern. In diesem Beitrag lernen Sie einen
Kalender-Manager und eine Checklistenverwaltung kennen, die Project
und Excel gemeinsam nutzt.
Der Projekt- und Ressourcenkalender stammt aus der ersten Project-Version
und erlaubt weder Text- noch Termineinträge. Urlaubstage, Fehlzeiten,
Feiertage und projektbedingte Ausfallzeiten müssen als boolsche
Komponente (frei oder nicht frei), eingetragen werden. Genauere
Informationen zum freien Tag lassen sich nicht speichern.
Eigentlich hätte Microsoft den Kalender von Project mit einer
Importschnittstelle für Feiertage ausstatten können, so
wie es der Kommunikations-Manager von Outlook anbietet. Da die Lösung
mit einer Textdatei arbeitet, ist sie schon in Outlook unbefriedigend.
In Project reicht eine einfache Aufzählung von Feiertagen nicht
aus, um in globalen Projekten freie Tage in Projekt- und Ressourcenkalender
zu implementieren. Deshalb ist es kein Verlust, dass Project über
diese Schnittstelle nicht verfügt. An eine gemeinsame Kalenderverwaltung
für die zeit- und terminlastigen Applikationen Outlook und
Project ist auch deshalb nicht zu denken, weil die Programmstrukturen
zu unterschiedlich sind.
|
Der
Kalender-Manager
|
 |
| |
|
| Der Kalender-Manager ist eine ausbaufähige
Lösung, die das zeitraubende Eintragen freier Tage in den
Projektkalender automatisiert: |
 |
Alle freien Projekttage werden in einer Vorgangstabelle erfasst
oder per Importschnittstelle aus Datenquellen wie Access oder
Excel integriert. |
 |
Die Feiertage werden berechnet und in den Kalender übertragen.
Dieser Vorgang lässt sich jederzeit revidieren und wiederholen.
Die Gaußsche Osterformel macht es möglich, die beweglichen
Feiertage zu berechnen. |
 |
Über ein Formular werden alle freien Tage des Projektkalenders
in einer Liste angeboten. Der Vorteil besteht darin, dass die
Information über den Grund der Freistellung erhalten bleibt. |
 |
Für weitere Kalenderoptionen wird ein direkter Zugriff
auf die Kalenderfunktionen über den Menübefehl Extras/
Arbeitszeit ändern angeboten. |
| Die Plattform für den Kalender-Manager ist
ein eigenes Projekt, das neben den VBA-Prozeduren und Formularen
in der Vorgangstabelle die Liste der projektfreien Tage enthält: |
 |
Verwenden Sie das neue Projekt, das mit dem Start von Project
aktiv wird. Die globale Vorlagendatei Global.mpt eignet
sich nicht, weil sie keinen Zugriff auf Tabelleninhalte erlaubt. |
 |
Tragen Sie in die Tabelle Eingabe in der Ansicht Balkendiagramm
die Tage ein, die in den verwalteten Projekten als freie Tage
gewertet werden (zum Beispiel Betriebsferien, Bild 1).
Die Tage sollten einzeln mit der Dauer 1ft (fortlaufender
Tag) erfasst werden, als Überschriften und Zwischenüberschriften
sind Meilensteine mit der Dauer 0t erlaubt. Feiertage
müssen nicht erfasst werden, da der Kalender-Manager sie
selbst berechnet. Die Einträge können auch aus Excel-Mappen
oder Access-Datenbanken importiert werden. |
 |
Um das Formular zu erzeugen, wechseln Sie in den VBA-Editor
und fügen auf einem neuen Formular ein Kombinationsfeld
zur Auswahl des Jahres, eine Liste für die freien Tage
und die Schaltflächen ein, die für die Verwaltung
der Datumseinheiten benötigt werden (Bild 2). Der
aktuelle Projektkalender wird in einem Textfeld angezeigt, die
Zuweisung oder Änderung erfolgt in Project über Extras/Arbeitszeit
ändern.
|
 |
Formatieren Sie das Listenelement im Eigenschaften-Fenster
vierspaltig, weisen Sie der ersten Spalte über die Eigenschaft
ColumnWidths eine Breite von 30 Pt zu, setzen
Sie diesen Wert später auf 0 Pt. Die übrigen
Spalten werden je 50 Pt breit. Schalten Sie die Eigenschaft
MultiSelect auf Status 1 (fmMultiSelectMulti),
um eine Mehrfachauswahl in der Liste zu ermöglichen. |
 |
Zeigen Sie das Codefenster des Formulars an, und deklarieren
Sie die globalen Variablen, die in allen Prozeduren benötigt
werden:
Option Explicit
Dim selTage()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim jahr As Integer
Dim kal As String
Dim FTListe()
Die Ereignisprozedur des Initialize-Ereignisses (Listing
1)
übernimmt die Aufgabe, die Bezeichnung des Projektkalenders
(meist Standard) in die Beschriftung zu schreiben und das
DropDown-Element mit einer Jahreszahlenreihe zu füllen.
Die Berechnung der freien Tage überlassen Sie der Funktion
FreieTage_Berechnen (Listing
2), die auch von anderen Elementen benötigt wird.
Ihr wird das aktuelle Jahr als Argument übergeben. Sie
durchsucht die Vorgangsliste des Makroprojekts nach freien
Tagen und schreibt diese über eine Array-Variable in
das vierspaltige Listenfeld des Formulars. In der ersten Spalte
steht die UniqueID des Tasks, ein eindeutiges Kennzeichen
(im Unterschied zur ID, die ständig wechselt). In den
weiteren Spalten werden Wochentag, Datum und Bezeichnung erfasst.
Mit dem Einlesen der Liste werden die projektfreien Tage mit
Hilfe der Methode BaseCalendarEditDays in den Projektkalender
geschrieben. Der Methode werden als Argumente der Kalendername,
Start- und Enddatum sowie der Boolesche Wert für Default
übergeben, wobei False den jeweiligen Tag als
arbeitsfreie Zeit kennzeichnet.
Nach dem Öffnen des Formulars kann die Liste mit den
Einträgen aus der Vorgangstabelle gefüllt werden.
Die freien Tage werden automatisch im Projektkalender gekennzeichnet.
|
|
|
|
Freie Tage in Arbeitstage umwandeln
|
 |
| |
|
|
Alle weiteren Kalenderaufgaben übertragen Sie in die Schaltflächen
auf dem Formular. Sie dienen dazu, markierte Einträge aus der
Liste in Arbeitstage umzuwandeln oder einfach den Kalender aufzurufen.
Änderungen im Kalender haben jedoch keine Auswirkungen auf
die Freie-Tage-Liste, weder in der Vorgangstabelle noch im Formular.
Um alle freien Tage aus der Tabelle zu löschen und gleichzeitig
im Kalender auf den Status von Arbeitstagen zurückzusetzen,
werden einfach alle Einträge in der Liste des Formulars markiert
und zur Berechnung freigegeben.
Zur Aktivierung des Projektkalenders des Formulars benutzen Sie
die Methode BaseCalendars der Application-Klasse.
Nach dem Schließen des Kalenders muss die Liste der freien
Tage wieder aktualisiert werden.
Die Schaltfläche Fertig beendet den Kalender-Manager
kommentarlos, da alle Aktivitäten von Schaltflächenereignissen
abgedeckt sind:
|
|
| Die
Feiertagsberechnung |
 |
| |
|
|
Um die Feiertage des ausgewählten Jahres in den Kalender eintragen
zu können, müssen die Datumswerte berechnet werden. Die
kirchlichen Feiertage lassen sich über die Gaußsche Osterformel
ermitteln. Sie gibt das Datum des Ostersonntags aus, der maßgeblich
für alle beweglichen Feiertage ist. Für die festen Feiertage
benutzen Sie die Funktion DateSerial.
Der Code muss in der Ereignisprozedur des Click-Ereignisses der
Schaltfläche Feiertage -> Kalender stehen.
Der Kalender-Manager wird als Projekt aufgerufen und trägt
die berechneten Feiertage in seine Vorgangstabelle ein. Um den Projektkalender
eines anderen Projekts zu verwalten, aktivieren Sie es und starten
die Prozedur im Projekt Pptools.mpp.
|
|
| Der
Checklisten-Manager |
 |
| |
|
|
In größeren Projekten oder Projekten mit langen Vorgangslisten
verlieren Projektmanager schnell die Übersicht über Details,
wenn diese nicht näher beschrieben oder im Projekt festgehalten
sind. Leider bietet Project außer einer Notizfunktion und
der Möglichkeit, Hyperlinks in der Indikatorenspalte zu setzen,
keine weiteren Dokumentationsschnittstellen.
Der Checklisten-Manager setzt auf die Hyperlinkfunktion auf und
bietet die Möglichkeit, zu jedem einzelnen Vorgang eine Excel-Tabelle
zu generieren, die den Vorgangsnamen als Dateibezeichnung erhält
und per Hyperlink dynamisch mit dem Projekt verbunden ist. Die Checklisten
werden zentral verwaltet, um beispielsweise prüfen zu können,
ob die einzelnen Punkte termingerecht abgearbeitet wurden.
Um alle Checklisten eines Projekts verwalten zu können, müssen
diese direkt in die Vorgänge eingebunden werden. Der Hyperlink
in der ersten Spalte reicht also nicht aus, da er nur den direkten
Aufruf zulässt. Für die an den Vorgang gebundene Checkliste
wird ein zusätzliches Feld vom Typ Text angelegt, in
dem Pfad und Dateiname der Checkliste hinterlegt werden. Über
den Menübefehl Extras/Anpassen/ Felder wird das Textfeld
manuell erzeugt, es stehen bis zu 30 Textfelder zur Auswahl. Der
Checklisten-Manager wird etwas mehr Funktionalität bieten:
 |
Sie können den Speicherort für die Checklisten per
Formular einstellen und ändern. |
 |
Da die Textfelder häufig schon für andere Informationen
benutzt werden, zeigt das Programm alle benutzten Textfelder
an und ermöglicht die Auswahl eines freien Textfeldes. |
 |
Das aktuell belegte Textfeld wird ständig im Formular
angezeigt. |
|
|
|
Das erste Formular besteht aus einer zweispaltigen Liste für
den Vorgangsnamen und die verbundene Checkliste, einem Bezeichnungsfeld
für den Namen des aktuellen Vorgangs und einem Textfeld, in
dem der Checklistenpfad eingetragen wird. Bild 6 zeigt dessen
Aufbau.
Die Ereignisprozedur UserForm_Initialize (Listing
8) überträgt die Bezeichnung des markierten Vorgangs
in das Formular und sucht über die Funktion TFSuchen
nach dem Textfeld, das als Platzhalter für die Checkliste bestimmt
wurde. Da die Liste dieser CustomFields sehr umfangreich ist, ist
es besser, für die CustomFieldGetName-Methode die numerische
FieldId an Stelle der Konstante anzugeben.
|
|
|
Nach dem ersten Aufruf des Formulars muss das Textfeld bestimmt
werden. Dazu wird über die Schaltfläche Checklisten-Textfeld
ein weiteres Formular geöffnet (Listing
9), das die Auswahl eines Textfeldes erlaubt und das gewählte
Feld als Beschriftung der Schaltfläche verwendet. Das Formular
erzeugt ein neues Feld mit der Bezeichnung Checklisten, das
für alle Vorgänge einheitlich ist.
Über die Schaltflächen dieses Formulars werden die Textfelder
umbenannt oder die Benennungen werden entfernt. Diese Aktionen lassen
sich auch über den Menübefehl Extras/Felder anpassen
durchführen
|
|
| Checklisten
anlegen |
 |
| |
|
|
Um eine neue Checkliste anzulegen, markieren Sie zunächst
den Vorgang in der Vorgangstabelle. Nach Aufruf des Checklisten-Managers
erzeugt dieser per Klick auf die Schaltfläche Neue Checkliste
einen neuen Eintrag im Textfeld Checklisten. Ein weiteres
Formular bietet die Möglichkeit, den Namen der Excel-Datei
und einen Beschreibungstext für den Hyperlink festzulegen.
Durch Anklicken der Schaltfläche OK wird die neue Checkliste
erzeugt. Dazu aktiviert die Prozedur eine neue oder die bereits
bestehende Instanz von Excel und fügt einen Hyperlink ein,
der den Anwender zum Projekt zurückbringt.
Für den Aufruf von Excel muss dessen Objektbibliothek über
den Menübefehl Extras/Verweise eingebunden sein. Haben
Sie den Verweis eingerichtet, stehen die im weiteren Verlauf der
Prozedur benötigten Befehle für die Checkliste zur Verfügung.
Zeichnen Sie die Aktivitäten auf, legen Sie über die Elemente
aus der Symbolleiste Formular Kontrollkästchen an und
gestalten Sie die Excel-Checkliste nach Ihren Vorstellungen. Der
Code wird in die Project-Prozedur eingebunden, so dass Project jede
neue Checkliste nach dem gleichen Muster in Excel produziert.
Der Hyperlink in der ersten Spalte (Indikatoren) der Vorgangstabelle
in Project erhält die Verknüpfung mit der neuen Checkliste:
InsertHyperlink Name:=vhptext, _
Address:=xlob.ActiveWorkbook.FullName, _
SubAddress:="", ScreenTip:=""
Die Prozedur für die neue Checkliste und die Click-Prozeduren
für die Schaltflächen Checkliste aktivieren und
Checkliste löschen finden Sie übrigens auf der
Heft-CD des VBA Magazins Ausgabe 3/2001.
Die beiden vorgestellten Tools für Project sind mit einer Menü-
und Symbolleistensteuerung ausgestattet, und eine Open- sowie
eine BeforeClose-Prozedur sorgen dafür, dass die Steuerung
mit der Mappe aktiviert beziehungsweise deaktiviert wird. Einer
Erweiterung um zusätzliche nützliche Projekt-Tools steht
damit nichts mehr im Wege.
|
|
|
Fazit: In diesem Beitrag haben Sie zwei
Beispiele kennen gelernt, mit denen Sie die Funktionalität
von Project sinnvoll ergänzen können. Deren Organisation
in einer eigenen PAT-Datei erlaubt es, die Funktionalität in
jedem beliebigen Projekt verfügbar zu machen und einzusetzen.
|
|
| Ignatz Schels, der Autor dieses Artikels ist Technik-Informatiker,
Journalist und Buchautor für Office-Themen, Visual Basic und
VBA. Er konzipiert und leitet Seminare mit den Schwerpunkten Office,
Excel, Project, Internet und VBA-Programmierung und schreibt individuelle
VBA-Lösungen. Sie erreichen ihn unter info@schels.de. |
Dieser
Beitrag wurde uns mit freundlicher Genehmigung des VBA Magazins überlassen. |
|
| Das VBA Magazin ist d a s
Fachmagazin für Office- und Datenbankentwickler. Es liefert aktuelle
Trends, Praxisberichte und technisches Know-how rund um die Programmierung
mit Microsoft Access, Microsoft Office und allen übrigen Produkten,
die Visual Basic for Applications enthalten. Mit dem XML Supplement bietet
es seinen Lesern brandneue Informationen zu diesem Standard, der täglich
an Bedeutung gewinnt. Das VBA Magazin ist eine Publikation für Entwickler
und Entscheider. Aufgrund der Verbreitung von Office und von Access sind
die VBA-Programmierer laut Umfrage von Microsoft die weltweit größte
Entwicklergruppe. Mit der Lizenzierung von VBA an andere Hersteller, die
VBA als Programmiersprache in ihre Anwendungen einfügen, wächst
sie ständig an. Das VBA Magazin erscheint im Computerfachverlag Cordula
Lochmann, der auch Veranstalter der ViBAT, Europas größter VBA-Entwicklerkonferenz
ist. |
Kommentare zu diesem Artikel:
|