Urlaubszeiten in Gantt-Diagramm anzeigen – Teil 3

Nachdem wir nun in unserem ersten Teil unseren Projektplan und im zweiten Teil unser Abfragefenster erstellt haben, werden wir nun den Code für unsere Auswertung erstellen. Problem hierbei ist, dass wir nicht einfach abfragen können, 0b die Ressource dem Arbeitspaket zugeteilt wurde, sondern das Ressourcenfeld durchsuchen müssen, da ja nicht nur eine Ressource einer Aufgabe zugeteilt wurde, sondern eventuell mehrere. Grundsätzlich sollten Sie sich angewöhnen mit Modulen zu arbeiten. Dadurch erhalten Sie eine größere Übersicht in Ihren VBA Projekten.

Öffnen Sie in unserem Projektplan erneut den VBA Editor. Klicken Sie mit der rechten Maustaste auf den Ordner “Module” und wählen Sie im Kontextmenü den Eintrag “Einfügen”. Wählen Sie dann die Option “Modul” aus.

SNAGHTML15c73924

Geben Sie nun als Namen für das Modul “AddUrlaub” ein.

Nun können wir den Code für die Darstellung der Urlaubstage eintragen. Im unteren Bereich finden Sie noch einmal den kompletten Code zum kopieren. Damit Sie aber verstehen, was der Code macht, gehe ich hier kurz auf die Interpretation ein. Relativ einfach ist der Anfang und das Ende mit:

Sub UrlaubChecker()

End Sub

Als nächstes kommt das deklarieren der Variablen die wir brauchen

‘Hier werden die Ressourcen reingeschrieben
Dim T As Task

‘ResName wird der Name aus unserem Combofeld1 eingetragen
’SuchName und Silo wird zur Auswertung benötigt

Dim Silo, ResName, SuchName As String

‘i wird für eine For-Schleife benötigt
Dim i As Integer

‘Ressourcen als Array
Dim ResList(10) As Variant

Als ersten Schritt lesen wir nun den Wert aus, dem in letzten Teil erstellten ComboBox1 in die Variable SuchName ein.

SuchName = FormBechtleUrlaub.ComboBox1.Value

Nun legen wir los und beginnen mit einer For Each Schleife. Durchlaufe den Projektplan so lange bis das Ende erreicht ist. Lese die Werte als Array in die Variable T

For Each T In ActiveProject.Tasks

Jetzt schreiben wir den/die Name(n) der Ressource(n) in die Variabel ResName

ResName = T.ResourceNames

Im nächsten Schritt prüfen wir, ob überhaupt eine Ressource zugeteilt wurde sollte dem so sein, dass steige hier in die Schleife ein.

If T.ResourceNames <> „“ Then

Nun kommt die kleine Herausforderung. Wir müssen prüfen, ob nur eine Ressource dem Arbeitspaket zugeteilt wurde – oder eventuell mehrere Das können wir am einfachsten machen, in dem wir prüfen ob ein “;” innerhalb des Ressourcenfeldes existiert.

Hinweis: Dies gilt nur für die deutsche Version von Project. Im englischen werden die Ressourcen durch ein “,” getrennt.

If InStr(T.ResourceNames, „;“) > 0 Then

Um sicherzustellen, dass i keine Werte enthält, setze ich die Variable auf 0

i = 0

Jetzt übernehme ich den ResName in die Variable Silo um die Ressoucennamen abzufragen

Silo = ResName

Nun starten wir eine DO Schleife, die solange ausgeführt werden soll, bis die Loop Until Bedingung erfüllt wurde

Do

Wir fangen mit dem linken Namen in der Variabel an und schreiben diesen nun in die Variabel SILO.

Silo = Left(ResName, InStr(T.ResourceNames, „;“) – 1)

Den Namen tragen wir nun als ersten Eintrag in das Array ResListe. Da i den Wert 0 besitzt, ist dies der erste Eintrag.

ResList(i) = Silo

Jetzt nehmen wir uns den nächsten Namen aus der Variabel “ResName”. Da wir den linken Namen –in unserm Fall den ersten Namen, in der Variable haben, nehmen wir nun den rechten Namen und schreiben diesen in erneut in  “ResName”.

ResName = Mid(ResName, InStr(ResName, „;“) + 1)

Da wir nun das Array um 1 erweitern müssen, zählen wir i um eins hoch

i = i + 1

Jetzt müssen noch prüfen, ob eventuell noch mehr Ressourcen eingetragen wurden, deswegen prüfe ich erneut, ob die Variable ResName ein “;” enthält. Sollte dem so sein, dann gehe wieder erneut nach oben und führe die DO-Schleife erneut aus.

Loop Until InStr(ResName, „;“) = 0

Sollte dem nicht so sein, dann trage die letzte Ressource in das nächste Array ein

ResList(i) = ResName

Jetzt müssen nur noch prüfen, ob der Name, der in der Variabel steht, der Name ist den wir suchen. Da wir diesen im oberen Bereich in die Variabel SuchName gelesen haben, fragen wir nun ab. ob sich der Name mit dem Array übereinstimmt. Sollte dem so sein, dann gehe hier in die Schleife.

If SuchName = ResList(i) Then

Nun können wir die Formatierung des Gantt-Chart vornehmen. Als erstes übernehmen wir den Namen in die Filtername-Variabel und Formtieren dann das Gantt-Chart.

Filtername = SuchName
TimescaleNonWorking Calendar:=Filtername

Filtername = T.ResourceNames
TimescaleNonWorking Calendar:=Filtername

Hinweis: bei großen Projektplänen kann es helfen, einen Flag in einer Attribute Spalte zu setzen, in meinem Code-Beispiel habe ich das mit berücksichtigt. Das komplette Module können Sie auf meiner Download-Seite hier herunterladen.

Jetzt können Sie die freien Tage zwar darstellen, allerdings benötigen wir nun ebenfalls ein Modul, um die Formatierung wieder zurückzusetzen. Hierzu werden wir in unserem nächsten Artikel das Modul erstellen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.