Tipp: SW-Anleitung – Pfiffige Alternative

Microsoft Project – VBA-Erweiterung für übersichtliche Abwesenheitsplanung

Für die Abwesenheitsplanung von Mitarbeitern stellt Microsoft Project eine passgenaue Funktion bereit: Die Defi-nition von "Kalenderausnahmen". Was dieser jedoch fehlt, ist eine zentrale Übersicht, um die Abwesenheiten aller Mitarbeiter gleichzeitig zu sehen. Abhilfe schafft ein per VBA-Code erzeugter Team-Kalender, mit dem Sie Abwesenheiten komfortabel überblicken und verwalten können. Markus Rupprecht stellt die von ihm selbst entwickelte Lösung vor und erklärt, wie Sie den Code installieren.

Um einen realistischen Terminplan zu erstellen, ist es nicht nur notwendig, das Vorhaben in passende Arbeitspakete zu schneiden, deren Aufwand zu schätzen und geeigneten Teammitgliedern zuweisen. Zusätzlich benötigen Sie auch noch Informationen zu Arbeitszeiten und Abwesenheiten der einzelnen Teammitglieder.

Um Abwesenheiten bei der Planung zu berücksichtigen, gibt es verschiedene Ansätze in Microsoft Project, die Renke Holert im Artikel "Microsoft Project – So planen Sie die Abwesenheitszeiten Ihrer Mitarbeiter" (Projekt Magazin, Ausgabe 13/2016) beschrieben und gegeneinander abgewogen hat. Gängige Ansätze sind "Kalenderausnahmen", "administrativen Zeiten" und "Sonderprojekte".

Umständlicher Standard

Mit der Definition von "Kalenderausnahmen" stellt Project eigentlich eine passgenaue Funktion zur Abwesenheitsplanung bereit: Arbeitsfreie Zeiten, wie z.B. Urlaube, Weiterbildungszeiten etc., können Sie über den Dialog "Arbeitszeit ändern" im Ressourcenkalender der jeweiligen Mitarbeiter eintragen (Bild 1). Diese Ausnahmen im Arbeitszeitkalender berücksichtigt Microsoft Project bei der Terminplanung automatisch.

Bild 1: Arbeitsfreie Zeiten lassen sich über den Standard Dialog "Arbeitszeit ändern" im Ressourcenkalender eintragen.
Bild vergrößern

Leider hat diese Funktion einen entscheidenden Haken: Sie bietet keine zentrale Übersicht, um die Abwesenheiten aller Mitarbeiter gleichzeitig zu sehen. Mögliche Engpässe bei Urlaubsanträgen sind daher nur schwer erkennbar. Zudem ist es umständlich, Abwesenheiten mit dieser Funktion zu pflegen. Viele Projektleiter verzichten daher darauf, Abwesenheiten als Kalenderausnahmen zu planen.

VBA-Lösung: Team-Kalender sorgt für Überblick

An diesem Punkt setzt die hier vorgestellte Lösung an: Sie erweitert die Benutzerschnittstelle von Project per VBA-Code um einen Teamkalender, der alle Abwesenheiten der Teammitglieder übersichtlich anzeigt (Bild 2). Gleichzeitig stellt die Lösung einfach zu bedienende Verwaltungsfunktionen zur Verfügung, um Einträge zu erstellen, zu ändern und zu löschen. Entwickelt wurde die Lösung ursprünglich für Microsoft Project 2007. Erfolgreich getestet wurde sie jedoch auch mit Project 2010 und 2013. Wer auf einen integrierten Genehmigungsprozess und benutzerdefinierte Felder verzichten kann, findet mit der vorgestellten VBA-Lösung eine gute Alternative zur Standardfunktion. Die Eingabe über den Standardweg ist weiterhin möglich.

Bild 2: Die VBA-Lösung ergänzt die Standard-Funktion um einen Terminkalender zur Abwesenheitsplanung.
Bild vergrößern

Aufbau des Team-Kalenders

Der per VBA-Code erzeugte Team-Kalender zeigt eine Übersicht aller bekannten Abwesenheiten in einem bestimmten Zeitraum an (Bild 2). Den Zeitraum können Sie durch die Buttons "Back" und "Forward" auf den Vor- bzw. Folgemonat verschieben oder mit Hilfe von zwei weiteren Buttons auf einen beliebigen Starttag festlegen bzw. auf den aktuellen Tag als Starttag umschalten. Standardmäßig wird beim Öffnen des Dialogs immer der Erste des aktuellen Monats als Starttag herangezogen.

Der Datenbereich besteht aus Zeilen für jede in der Project Datei angelegte Ressource. Zusätzlich werden die Basiskalender dargestellt, die bei den Ressourcen hinterlegt sind. So lassen sich Brückentage einfacher erkennen. An oberster Stelle werden die genutzten Basiskalender gelistet, darunter die Ressourcen in der Reihenfolge, in der sie in der Ressourcentabelle gelistet sind. Als Spalten werden 31 Tage dargestellt, wobei Samstage und Sonntage grau hinterlegt sind.

Abwesenheitszeiten editieren

Die Abwesenheiten erscheinen als rote Balken. Wenn Sie mit dem Mauszeiger über den Balken fahren, erscheint der zugehörige Abwesenheitstext, sowie Start- und Enddatum der Abwesenheit. Klicken sie auf einen der Balken, können Sie diese Abwesenheit editieren oder löschen (Bild 3).

Bild 3: Editieren eines Abwesenheitseintrags

Eine neue Abwesenheit erstellen Sie über den Button "Add". Es erscheint ein Eingabedialog (Bild 4), in welchem Sie zunächst die Ressource bzw. auch den Basiskalender auswählen müssen. Anschließend können Sie den Start- und Endtag der Abwesenheit setzen sowie den Grund der Abwesenheit als Kommentar eingeben (z.B. "Urlaub" oder "Seminar" etc.). Der VBA-Code trägt die Abwesenheit dann als Kalenderausnahme in den angegebenen Kalender ein und zeigt sie im Übersichtsfenster als neuen Balken an, sofern der dargestellte Zeitbereich entsprechend gewählt ist.

Bild 4: Neuanlage eines Abwesenheitseintrags

Die Datumsauswahl erfolgt immer über ein eigenes Fenster (Bild 5), um Fehleingaben von vornherein zu vermeiden. Dort können Sie schnell auf andere Jahre oder Monate umschalten.

Bild 5: Das Datum mithilfe eines Kalenders auswählen.

VBA-Lösung in eigener Datei installieren

Um die vorgestellten VBA-Lösung in Ihrer eigenen Project-Datei zu installieren, können Sie den Code entweder in der Microsoft Project Datei selbst oder in der globalen Vorlagedatei speichern. Ich bevorzuge es, alles unter Kontrolle zu behalten und den von mir genutzten Code lokal in meinen Dateien zu speichern. Das hat zudem den Vorteil, dass die globale Vorlage frei von Code bleibt.

Damit Microsoft Project den VBA-Code nicht automatisch in die globale Vorlage kopiert, schalten Sie zunächst die Option "Der globalen Vorlage neue Ansichten, Tabellen, Filter und Gruppen automatisch hinzufügen" aus. Sie finden diese unter Datei / Optionen / Erweitert im Bereich "Anzeige" (Bild 6).

Bild 6: Damit die globale Vorlage frei von Code bleibt, schalten Sie die Option "automatisch hinzufügen" ab.
Bild vergrößern

Zum Kopieren des VBA-Codes in Ihre eigene (neue oder bestehende) Microsoft Project Datei müssen Sie sowohl diese Datei als auch die mit dem Artikel bereitgestellte Datei "AbsencesModules.mpp" geöffnet haben.

Das Kopieren erledigen Sie im "Organisator", den Sie unter Datei / Informationen erreichen. Wechseln Sie dort in das Register "Module" und wählen Sie unten auf der linken Seite die Quelldatei "AbsencesModules.mpp". Als Zieldatei wählen Sie auf der rechten Seite unten Ihre bestehende oder neu erstellte Project-Datei aus. Markieren Sie anschließend alle Module auf der linken Seite und übernehmen Sie diese mit Kopieren>> in die Zieldatei (Bild 7). Sind die Module kopiert, können Sie den Organisator wieder schließen.

Bild 7: Mit Hilfe des Organisators übertragen Sie die VBA-Module in Ihre eigene Datei.
Bild vergrößern

Start-Button ergänzen

Die Funktionen für den Teamkalender sind zwar jetzt in der Project Datei vorhanden, diese sind jedoch noch nicht direkt über die Registerkarten aufrufbar. Um eine bequeme Bedienung zu ermöglichen, soll deshalb noch ein Start-Button für das Makro integriert werden (Bild 8).

Bild 8: Die neu eingerichtete Schaltfläche "Calendar" zum Starten der Abwesenheitsplanung.
Bild vergrößern

Den Bereich mit dem Start-Button legen Sie durch drei Zeilen Code an, die Sie im VBA Editor einfügen müssen. Bei jedem Laden der Datei wird dadurch ein eigener Bereich mit einem Calendar-Button in der Registerkarte ADD-INS angelegt.

Um den Code einzufügen, öffnen Sie den VBA-Editor mit ALT+F11. Geben Sie dort im Hauptmodul namens "ThisProject (…)" Folgendes ein:

Private Sub Project_open(ByVal pj As Project)
Absences_Module.AddCalendarToolbar
End Sub

Sie können den Code auch wie in Bild 8 gezeigt aus der bereitgestellten Quelldatei "AbsencesModules.mpp" kopieren.

Bild 9: Mit Hilfe des VBA Editors können Sie das Startkommando aus der Quell- in die Zieldatei kopieren.
Bild vergrößern

Schließen Sie nun den VBA Editor, speichern und schließen Sie anschließend die Project Datei. Beim nächsten Start sollte – nachdem Sie die Makro-Sicherheitsmeldung bestätigt haben – im Ribbon "ADD-INS" eine neue benutzerdefinierte Symbolleiste mit dem Button "Calendar" erscheinen (Bild 9), mit der Sie den Team-Kalender aufrufen können.

Ideen für die Weiterentwicklung

Der Autor ist derzeit hauptsächlich in agilen Projekten eingebunden und nutzt die Erweiterung in der vorgestellten Art und Weise nicht und entwickelt diese auch nicht weiter. Bei den Tests zu dem Artikel sind sporadisch "Kein Speicher zur Verfügung" Meldungen erschienen, die jedoch meist nur dann auftauchten, wenn das Kommentarfeld ("Comment") beim Neuanlegen eines Abwesenheitseintrags (Bild 4) leer blieb. Konkrete Verbesserungsideen gibt es eher im Kleinen, wie z.B. die sprachabhängige Darstellung der Wochentage im Date Picker und eine kleine Konfiguration, mit welchem Wochentag der DatePicker beginnen soll.

Haftungsbeschränkung

Mit dem Herunterladen und der Installation des VBA-Codes erkennt der Anwender folgende Nutzungsbedingungen an:

Das Herunterladen, die Installation und die Verwendung des VBA-Codes erfolgen auf eigene Gefahr. Weder der Autor noch das Projekt Magazin übernehmen Gewähr oder Haftung für etwaige Schäden, Folgeschäden oder Ausfälle, die dabei entstehen können. Die Anwender verzichten auf jedwede Ansprüche gegen das Projekt Magazin oder den Autor, die sich aus diesen Vorgängen ergeben können.

 
Tech Link