Nov 172019
 

Ausgangslage und Problemstellung:

In Microsoft Project ist es möglich Felder bzw. Spalten mit Formeln miteinander in Beziehung zu setzen. Diese Formeln lassen sich in benutzerdefinierten Feldern eingeben. Mit Hilfe einer verschachtelten Wenn-Funktion lassen sich passende Werte automatisiert ausgeben: in der einen Textspalte in einer bestimmten Zeile gibt man einen Wert ein, oder wählt diesen aus einem Pull-Down-Feld aus und in einer anderen Textspalte wird der dazupassende zweite Wert in der gleiche Zeile eingetragen.

Leider gibt es eine Maximalzahl von Verschachtelungsebenen!

Eine umfassende Datenbanklösung ist also nicht mit Formeln realisierbar.

Lösungsansatz für Microsoft Project mit VBA

Mit Hilfe von VBA (Visual Basic for Applications)  lässt sich die Maximalzahl der Verschachtelungsebenen überwinden – man kann hier fast unbegrenzt Zuordnungen erzeugen. Im Unten stehenden Beispiel wird anhand einer Abkürzung in Text20 – Feld der dazugehörige Fachplaner in Text21 – Feld ausgegeben. Das Beispiel beschränkt sich auf vier Fälle, ist aber beliebig erweiterbar,

VBA ist eine Programmiersprache und man sollte wissen, was man macht, oder was man besser nicht macht. Ggf. ist es sicherer, den Umgang mit VBA in einem Kurs zum Thema Microsoft Project zu üben, bevor man das nachfolgende Beispiel praktisch nachvollzieht. Natürlich sollte man stets eine Sicherungskopie von allen Dateien machen und ggf. den Administrator, Vorgesetzten um Erlaubnis fragen, bevor man mit VBA experimentiert.

Der VBA Code liest das Datenfeld Text20 aus, und gibt fallbezogen einen Wert in Text21 aus.

Beide benutzerdefinierten Felder Text20 und Text21 – sollten als Spalte in der aktuellen Ansicht z.B. Gantt-Diagramm eingefügt werden. Für Text20 könnte man eine Nachschlagetabelle erstellen, damit man die Werte nicht händisch eingeben muss, sondern aus einer Pull-Down-Liste auswählen kann.

Am besten wird ein VBA-Code in einem neuen Modul in der Global.MPT von Microsoft Project eingegeben, damit der VBA-Code unabhängig in jeder Microsoft Project Datei funktioniert:

Hierzu startet man aus Microsoft Project den Microsoft Visual Basic for Applications – Editor z.B. mit der Tastenkombination Alt+F11

In Microsoft Project im Microsoft Visual Basic for Applications – Editor wird mit der Tastenkombination Strg+R der Projekt-Explorer geöffnet (sofern nicht bereits sichtbar)

Im Projekt-Explorer markiert man die Zeile ProjectGlobal (Global.MPT) und über den Menüeintrag Einfügen erreicht man den Eintrag Modul – durch klicken wird ein neues Modul unterhalb von Module im Projekt-Explorer angezeigt.

Durch Doppelklick auf das Modul wird dieses geöffnet – der Cursor blinkt nun im rechten weißen Bereich und wartet auf Codeeingabe – hier gibt man folgenden Code ein:

Sub Wenn_Dann()

Dim a As Task
For Each a In ActiveProject.Tasks
Select Case a.Text20
Case „A“
a.Text21 = „Architekt“
Case „BS“
a.Text21 = „Brandschutz“
Case „S“
a.Text21 = „Statik“
Case „TGA“
a.Text21 = „Haustechnik“

‚hier einfach weitere „Cases“ nach oben stehendem Muster einfügen, jeder Fall besteht also aus zwei Codezeilen

End Select
Next a
End Sub

!!Achtung falls Sie den Code kopieren: bitte achten Sie darauf, dass alle Anführungszeichen ggf. manuell im Codefenster durch gerade Anführungszeichen über die Tastatur ersetzt werden, ansonsten funktioniert der Code nicht!!

Anschließend kann das Fenster des Microsoft Visual Basic for Applications – Editors einfach geschlossen werden.

Funktionsbeschreibung des Makros:

In einem Projekt in der Ansicht Gantt-Diagramm mit den eingefügten Spalten Text20 und Text21 kann nun das Makro „Wenn_Dann“ über die Registerkarte Ansicht –> Gruppe Makros –> Befehl Makros in dem Dialogfenster Makros ausgewählt werden. Über die Schaltfläche Ausführen wird das Makro gestartet und entsprechend der Auswahl in Text20 in allen Zeilen der passende Wert in Text21 ausgegeben.

Ändert sich die Auswahl in den Zeilen in Text20, so muss der Inhalt von Spalte Text21 zuvor manuell gelöscht werden (markieren und z.B. Entf.-Taste) und anschließend muss das Makro erneut ausgeführt werden.