MS-Project ist ein sehr mächtiges Programm. Was aber merkwürdigerweise nicht geht, ist es, zusammenhängende Vorgänge einzublenden. Insbesondere wenn zwischen einzelnen Vorgängen viele Zeilen liegen, ist die Übersicht nicht immer gegeben. Die Filteroptionen versagen an dieser Stelle leider.
Der vorliegende Code beseitigt das Dilemma. Ich zeige hier zwei Makros. Das eine filtert und zeigt den ausgewählten Vorgang mit seinen Nachfolgern, das andere löscht den Filter.
Ich habe den fertigen Code als "Vorgaenge.bas" (erst entzippen) zum Download am Ende dieses Tutorials beigefügt. Sie können diese Datei direkt per Datei Import (rechte Maustaste auf "ThisProject (Global.MPT)") laden. Sie erhalten dann ein Modul mit dem Namen "Vorgaenge". Wenn Sie das in "Global.MPT" machen und anschließend auf das Speichern-Symbol oben links klicken, steht Ihnen fortan dieser Code immer zur Verfügung. Sie können nun auch beispielsweise die beiden Makros über die Schnellzugriffsleiste oder per Menü ansprechen. Wie das geht, können Sie unter dem folgenden Link nachlesen.
Für Nichtprogrammierer habe ich hier ein kleines Tutorial, wo man diesen Code hinkopieren oder programmieren muss:
https://www.time4joomla.de/ms-excel/314-fuer-nicht-programmierer-wie-und-wo-wird-vba-untergebracht.html
Der Code mit Erklärung
Sub VorgangZusammenFassen()
' ---------------------------------------------------
' Axel Tüting - www.time4mambo.de
' ---------------------------------------------------
Dim Vorgang As Task
FilterEdit Name:="Zusammenhängende Vorgänge", TaskFilter:=True, Create:=True, OverwriteExisting:=false, FieldName:="Text30", Test:="Gleich", Value:="V", ShowInMenu:=True, ShowSummaryTasks:=False
FilterEdit Name:="Zusammenhängende Vorgänge", TaskFilter:=true, FieldName:="", NewFieldName:="Text30", Test:="Gleich", Value:="N", Operation:="Oder", ShowSummaryTasks:=False
'Erfasst die Nachfolger zum ausgewählten Vorgang
HighlightSuccessors Set:=True
'Schreibt in Text30 ein N oder V für Nachfolger/Vorgänger rein
'Wobei das V der ausgewählte Vorgang ist
For Each Vorgang In ActiveProject.Tasks
If Vorgang.ID = Application.ActiveCell.Task.ID Then
Vorgang.Text30 = "V"
VorgangsName = Vorgang.Name
End If
If Vorgang.PathSuccessor = True Then
Vorgang.Text30 = "N"
End If
Next
'Ruft den benutzerdefinierten Filter auf, der nach
'Text2 entsprechend filtert
FilterApply Name:="Zusammenhängende Vorgänge"
End Sub
Im Code selber stehen viele Kommentarzeilen, weshalb das nach recht viel ausschaut, was es aber eigentlich nicht ist. Doch der Reihe nach:
Oben sind zwei Zeilen, die einen Filter erzeugen. Ich habe diesen Filter "Zusammenhängende Vorgänge" genannt und unter diesen Namen kann er anschließend auch händisch in Ansicht/Daten/Filter und dort ganz oben unter Benutzerdefiniert ausgewählt werden. Mit dem Element
OverwriteExisting:=false
wird verhindert, dass der Filter jedes Mal neu angelegt wird. Ist er also schon vorhanden, wird er nicht mehr überschrieben.
HighlightSuccessors Set:=True
Diese Zeile sorgt dafür, dass die Nachfolger eines Vorganges farblich markiert werden. Das entspricht der händischen Auswahl "Vorgangspfad".
Die For Each Schleife durchsucht diese farbliche Markierung und schreibt in die Spalte "Text30" ein "V" für die aktuelle Vorgangsauswahl und ein "N" bei den Nachfolgern.
Mit der Zeile VorgangsName = Vorgang.Name
merke ich mir lediglich den Vorgangsnamen der ausgewählten Zeile, damit ich am Ende wieder zu diesem Vorgang zurückkehren kann.
Die Zeile FilterApply Name:="Zusammenhängende Vorgänge"
ruft den zuvor angelegten Filter auf und wendet ihn an. Der Filter zeigt alles an, was in Text30 ein "V" oder "N" stehen hat.
Wenn bei Ihnen "Text30" bereits belegt ist, müssen Sie ein anderes Textfeld nehmen und die zugehörige Nummer im Code ändern! Das unbedingt auch bei dem zweiten Makro "Zuruecksetzen", da dort der Inhalt von "Text30" gelöscht wird!
Sub Zuruecksetzen()
'Alle Filter entfernen und die Vorgänge wieder alle anzeigen
FilterClear
RemoveHighlight
'Inhalt von Text30 löschen (Text30 MUSS eingeblendet sein!)
SelectTaskColumn Column:="Text30"
EditClear Contents:=True
'Da vorher die ganze Spalte selektioniert wurde,
'wird nun wieder auf den Vorgangsnamen gesprungen, bzw. selektioniert
FindEx Field:="Name", Test:="Enthält", Value:=VorgangsName, Next:=True, MatchCase:=False, SearchAllFields:=False
End Sub
Wenn Sie wieder alle Vorgänge sehen möchten, rufen Sie dieses Makro auf. Zunächst wird der Filter wieder zurückgesetzt/gelöscht mit FilterClear
. Und danach die farbliche Markierung der Vorgänge mit RemoveHighlight
gelöscht/zurückgesetzt.
Mit diesen beiden Zeilen wählen Sie zunächst die gesamte Spalte "Text30" aus, markieren diese und löschen den Inhalt (also "V" und "N"):
SelectTaskColumn Column:="Text30"
EditClear Contents:=True
Zu guter Letzt wird mit FindEx
der Vorgang gesucht, den Sie ursprünglich markiert hatten und der Vorgangsname wird selektioniert.
Am Rande: Mit Field:="Name"
wird die Spalte "Vorgangsname" angesprochen.