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

 

Benjamin Dargatz hat einen Fehler in meinem Code gefunden und war so nett, die verbesserte Version zur Verfügung zu stellen. Fürs Suchen, Finden und Zusenden einen lieben Dank!

 

Der Code mit Erklärung

Sub VorgangZusammenFassen()

' ---------------------------------------------------

' Axel Tüting - www.time4mambo.de / modifiziert by Benjamin Dargatz

' ---------------------------------------------------

    Dim Vorgang As Task

    Dim AktuellerVorgang As Task

   

    ' Erstellen und Bearbeiten des Filters "Zusammenhängende Vorgänge"

    FilterEdit Name:="Zusammenhängende Vorgänge", TaskFilter:=True, Create:=True, OverwriteExisting:=True, 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

    HighlightPredecessors Set:=True

    ' Überprüfen, ob eine Zelle aktiv ist und ob sie eine Aufgabe enthält

    If Not Application.ActiveCell Is Nothing Then

        Set AktuellerVorgang = Application.ActiveCell.Task

    End If

   

    ' 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 Not Vorgang Is Nothing Then

            If Not AktuellerVorgang Is Nothing And Vorgang.ID = AktuellerVorgang.ID Then

                Vorgang.Text30 = "V"

            ElseIf Vorgang.PathSuccessor Then

                Vorgang.Text30 = "N"

            ElseIf Vorgang.PathPredecessor Then

                Vorgang.Text30 = "N"

            End If

        End If

    Next Vorgang

   

    ' Ruft den benutzerdefinierten Filter auf, der nach Text30 entsprechend filtert

    FilterApply Name:="Zusammenhängende Vorgänge"

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.

 

Den Filter wieder zurücksetzen und alle Vorgänge sichtbar machen:

Sub Zuruecksetzen()
On Error Resume Next
'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