beispielprojekt

 

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

nachfolgerauswahlDiese 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.