Vorgänge mit Abhängigkeiten planen
Halten Sie Vorgänge in einem Gantt-Diagramm in der richtigen Reihenfolge: Verknüpfen Sie Vorgänge, lassen Sie abhängige Vorgänge einer Änderung folgen oder nur melden, welche Abhängigkeit verletzt ist, und rechnen Sie Dauern in Arbeitszeit.
Voraussetzungen: WKL Forms Object Library 1.23 oder höher.
Lösungsüberblick
Abhängigkeiten stammen aus einer Tabelle (DependencySource mit PredecessorField, SuccessorField,
LinkTypeField, LagField) oder aus einem Textfeld des Nachfolgers (PredecessorsField). ScheduleMode legt fest,
was eine Änderung bewirkt: wgsManual verschiebt nichts und listet verletzte Abhängigkeiten in Violations auf;
wgsAutomatic verschiebt die abhängigen Vorgänge. Die Arbeitszeit ergibt sich aus WorkDays, WorkHours und den
freien Tagen aus HolidaySource; DurationUnit rechnet in Tagen oder Stunden. Benutzer verknüpfen und lösen
Verknüpfungen mit Strg+F2 und Strg+Umschalt+F2, über das Kontextmenü oder indem sie vom Ende eines Balkens zu einem
anderen ziehen.
Umsetzung
With Me!Gantt1.Object
' Dependencies as text in the task record instead of a table: "3EA+2;5AA"
' (EA finish-to-start, AA start-to-start, EE finish-to-finish, AE start-to-finish; lag in DurationUnit).
.DependencySource = ""
.PredecessorsField = "Vorgaenger"
' Calendar: Monday to Saturday, 7:00-12:00 and 12:30-16:00, free days from a table.
.WorkDays = 2 + 4 + 8 + 16 + 32 + 64 ' bit 1 = Sunday ... bit 64 = Saturday
.WorkHours = "07:00-12:00;12:30-16:00"
.HolidaySource = "tblFeiertage": .HolidayField = "Tag"
' Automatic scheduling: link 3 -> 4 with one working day lag; 4 and its successors follow.
.ScheduleMode = wgsAutomatic
.LinkTasks 3, 4, wglFinishToStart, 1
.SetTaskDates 3, #10/8/2026#, #10/12/2026# ' 4 moves again
' Manual: nothing moves; broken dependencies are listed and drawn red.
.ScheduleMode = wgsManual
Dim item As Variant
For Each item In .Violations
Debug.Print item
Next
.Reschedule ' "Projekt neu planen": everything as early as allowed
Debug.Print .TaskDuration(3), .TaskSlack(3), .IsCritical(3)
End With
Hinweise
- Das Ende ist der letzte Arbeitstag eines Vorgangs (bei
DurationUnit= Stunden: der Zeitpunkt, an dem die Arbeit endet). Fällt ein freier Tag in einen Vorgang, hat der Vorgang einen Arbeitstag weniger; das Ende bleibt dort, wo die Daten es angeben. - Vorgänge ohne Abhängigkeiten und Einschränkungen verschiebt die automatische Planung nie. Das erste
Reschedulebringt daher einen von Hand eingegebenen Plan nicht durcheinander. - Ein im automatischen Modus von Hand verschobener Vorgang erhält die Einschränkung „Anfang nicht früher als“. Ordnen Sie
ConstraintTypeFieldundConstraintDateFieldzu, damit sie über Sitzungen hinweg erhalten bleibt. LinkTasksweist eine Abhängigkeit ab, die einen Zyklus schließen würde (wkeCycle), ebenso eine zwischen einem Vorgang und seinem eigenen Sammelvorgang (wkeInvalidValue); in diesem Fall wird nichts geschrieben.- Die Gliederung ist Teil des Plans:
IndentTaskundOutdentTask(Alt+Umschalt+Nach-rechts/Nach-links, Einrücken/Ausrücken im Kontextmenü) machen einen Vorgang zum Teilvorgang des vorhergehenden Vorgangs oder lösen ihn aus seinem Sammelvorgang.TaskResourcesund Ressourcen zuordnen … ordnen Ressourcen zu. - Änderungen per Code lösen keine Ereignisse aus. Dieselben Änderungen durch den Benutzer lösen
BeforeTaskChange,BeforeLinkAddoderBeforeLinkDeleteaus; dort kann VBA sie anpassen oder abbrechen.