[VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Antwort erstellen

Smilies
:D :) :( :o :shock: :? 8-) :lol: :x :P :razz: :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :badgrin: :doubt:
BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet
Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Xlsibb » 07. Mär 2017, 15:28

Hallo!

Tut mir leid, ich kann hier nicht immer online sein und in letzter Zeit war zuviel los (=> es gibt ein Leben außerhalb dieses Forums)

Ich habe mir das nochmal angeguckt. Mein Code geht alle Tasks durch und danach alle Subprojekte, aber unabhängig von den Tasks des Hauptprojekts.
Man müsste also die Schleifen ineinander verschachteln. Dadurch ist es sehr wahrscheinlich, dass der Programmablauf sehr, sehr lange dauert. Trotzdem hier ein (UNGETESTETER!!) Versuch:

Das muss dann aber genug der Hilfe sein (ich habe es sogar kommentiert!) Schließlich dient das Forum als Hilfe zur Selbsthilfe!!

Code: Alles auswählen
Sub doppelte_Eintraege()
   
    Dim sprj, sprj2 As Subproject
    Dim tsk, tskSP As Task
    Dim strSprj, strSprj2, strTask, strTask2 As String
    Dim i As Integer

    'Alle Vorgänge des Hauptprojekts durchgehen
    For Each tsk In ActiveProject.Tasks
        'aktiver Task
        strTask = tsk.Name
        'jeden Task unterhalb des aktiven Tasks durchgehen und vergleich
        For i = tsk.Index + 1 To ActiveProject.Tasks.Count
            'gelb markieren, wenn gleich
            If ActiveProject.Tasks(i).Name = strTask Then
                Application.SelectRow row:=tsk.ID, rowrelative:=False
                Font32Ex CellColor:=65535
                Application.SelectRow row:=ActiveProject.Tasks(i).ID, rowrelative:=False
                Font32Ex CellColor:=65535
            End If
        Next i
        'nun in alle Unterprojekte gehen und alle Tasks der Unterprojekte mit dem aktiven Task vergleichen
        For Each sprj In ThisProject.Subprojects
            'Name des Unterprojekts ohne Dateipfad
            strSprj = Left(sprj.SourceProject.Name, Len(sprj.SourceProject.Name) - 4)
            'Jeden Task des Unterprojekts durchgehen
            For Each tskSP In sprj.SourceProject.Tasks
                    'gelb markieren, wenn gleich
                    If tskSP.Name = strTask Then
                        Application.SelectRow row:=tsk.ID, rowrelative:=False
                        Font32Ex CellColor:=65535
                        Application.SelectRow row:=ActiveProject.Tasks(strSprj).ID + tskSP.ID, rowrelative:=False
                        Font32Ex CellColor:=65535
                    End If
                Next i
            Next tsk
        Next sprj
    Next tsk
   
    'Separat alle Unterprojekte durchgehen und die Tasks innerhalb EINES Unterprojekts vergleichen
    For Each sprj In ThisProject.Subprojects
        strSprj = Left(sprj.SourceProject.Name, Len(sprj.SourceProject.Name) - 4)
        For Each tsk In sprj.SourceProject.Tasks
            strTask = tsk.Name
            For i = tsk.Index + 1 To sprj.SourceProject.Tasks.Count
                If sprj.SourceProject.Tasks(i).Name = strTask Then
                    Application.SelectRow row:=ActiveProject.Tasks(strSprj).ID + tsk.ID, rowrelative:=False
                    Font32Ex CellColor:=65535
                    Application.SelectRow row:=ActiveProject.Tasks(strSprj).ID + sprj.SourceProject.Tasks(i).ID, rowrelative:=False
                    Font32Ex CellColor:=65535
                End If
            Next i
        Next tsk
       
        'und zum Schluss noch alle anderen Unterprojekte durchgehen
        'und die Tasks der Unterprojekte mit den Tasks aller anderen Unterprojekte vergleichen
        For Each sprj2 In ThisProject.Subprojects
            'Prozedur nur ausführen, wenn das andere Unterprojekt unter dem aktuell durchsuchten liegt
            If sprj2.Index > sprj.Index Then
                strSprj2 = Left(sprj2.SourceProject.Name, Len(sprj2.SourceProject.Name) - 4)
                For Each tskSP In sprj2.SourceProject.Tasks
                    strTask2 = tskSP.Name
                    For i = tskSP.Index + 1 To sprj2.SourceProject.Tasks.Count
                        'gelb markieren, wenn gleich. Hier musst du wahrscheinlich schauen, wie sich die IDs addieren.
                        If sprj2.SourceProject.Tasks(i).Name = strTask2 Then
                            Application.SelectRow row:=ActiveProject.Tasks(strSprj2).ID + tskSP.ID, rowrelative:=False
                            Font32Ex CellColor:=65535
                            Application.SelectRow row:=ActiveProject.Tasks(strSprj).ID + sprj.SourceProject.Tasks(i).ID, rowrelative:=False
                            Font32Ex CellColor:=65535
                        End If
                    Next i
                Next tsk2
            End If
        Next sprj2
    Next sprj

End Sub

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Jesse Blue » 16. Feb 2017, 12:44

Ein letztes Mal pushe ich noch.

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Jesse Blue » 19. Jan 2017, 07:58

Hallo Xlsibb

Ich habe mir dein Testprojekt mal angesehen. Da funktioniert alles. Ich habe mich mal ein wenig an den Code drangesetzt und darüber gegrübelt.
Erstmal ist mir aufgefallen, dass, wenn ich alle ActiveProjects durch ThisProjects ersetze, offensichtlich gar nichts passiert. War das etwas zuviel des Guten meinerseits? Kann ich mir eigentlich nicht vorstellen, da ansonsten die Bezüge ja nicht richtig sein dürften.
Zum anderen ist mir aufgefallen, dass ich dich an keiner Stelle darüber aufgeklärt habe, dass mein Master mehr als ein Unterprojekt hat. Ist das von Relevanz? Dürfte eigentlich auch nicht sein, denn wenn ich mir deinen Code so ansehe, dann müsste dieser doch auch mehrere Unterprojekte abdecken, oder?
Zudem verwende ich einen Ressourcenpool für alle Projekte. Daran kann es eigentlich auch nicht liegen.

Ich setze nachher eben meine Beispieldatei rein.

Grüße
Jan

EDIT: So, da ist die Beispieldatei. Es kann sein, dass die Verbindung zum Ressourcenpool so natürlich flöten gegangen ist. Ggf. einfach löschen. Ansonsten ist dies eine adäquatere Beispieldatei, als die, die ich zuerst geschickt habe. Dafür möchte ich mich entschuldigen.

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Xlsibb » 18. Jan 2017, 14:20

hier mal meine Beispieldateien

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Jesse Blue » 18. Jan 2017, 14:12

Da habe ich mich wohl missverständlich ausgedrückt. Ich meinte natürlich die Logik hinter den Vorgängen, die in diesem Fall markiert worden sind. Die eigentliche Logik hinter deinem Code habe ich durchaus verstanden. :wink:
Ich werde mich wohl nochmal hinsetzen müssen und eine wesentlich bessere Beispieldatei anfertigen müssen. Da komme ich allerdings heute nicht mehr zu. Ich werde sie dir ASAP zukommen lassen.

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Xlsibb » 18. Jan 2017, 14:03

Tut mir leid, ich kenne deine Datei nicht. In meinem Testprojekt funktioniert alles einwandfrei.
Setze doch mal am Anfang einen Haltepunkt und gehe den Code mit F8 Schritt für Schritt durch. Dann solltest du hinter die Logik kommen.

Grundsätzlich habe ich es so gemacht:
Nehme den ersten Vorgang und notiere seine Bezeichnung.
Gehe nun alle Vorgänge darunter durch und prüfe, ob die Bezeichnung wieder vorkommt.
Gehe dann in alle Unterprojekte und mach dasselbe.

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Jesse Blue » 18. Jan 2017, 13:56

Hallo,

leider bleibt der Fehler bestehen und außerdem werden willkürlich(?) Vorgänge markiert. Ich erkenne hinter den Markierungen keinerlei Logik. Es scheint allerdings so, dass Markierungen vor dem ersten Unterprojekt gesetzt werden und erst dann der Laufzeitfehler entsteht. Könnte es damit zu tun haben?

Viele Grüße

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Xlsibb » 18. Jan 2017, 13:18

Hi,

also ich glaube, ich hatte noch an einer Stelle einen Fehler, aber nicht an dem von dir markierten.
Der Code "ActiveProject" kann evtl. zu einem Fehler führen, wenn du noch andere Dateien offen hast (so dass die "Aktivität" verloren geht). Versuche evtl. anstattdessen "ThisProject"

Code: Alles auswählen
Option Explicit

Sub doppelte_Eintraege()
   
    Dim sprj As Subproject
    Dim tsk As Task
    Dim strSprj, strTask As String
    Dim i As Integer

    For Each tsk In ActiveProject.Tasks
        strTask = tsk.Name
        For i = tsk.Index + 1 To ActiveProject.Tasks.Count
            If ActiveProject.Tasks(i).Name = strTask Then
                Application.SelectRow row:=tsk.ID, rowrelative:=False
                Font32Ex CellColor:=65535
                Application.SelectRow row:=ActiveProject.Tasks(i).ID, rowrelative:=False
                Font32Ex CellColor:=65535
            End If
        Next i
    Next tsk
   
    For Each sprj In ActiveProject.Subprojects
        strSprj = Left(sprj.SourceProject.Name, Len(sprj.SourceProject.Name) - 4)
        For Each tsk In sprj.SourceProject.Tasks
            strTask = tsk.Name
            For i = tsk.Index + 1 To sprj.SourceProject.Tasks.Count
                If sprj.SourceProject.Tasks(i).Name = strTask Then
                    Application.SelectRow row:=ActiveProject.Tasks(strSprj).ID + tsk.ID, rowrelative:=False
                    Font32Ex CellColor:=65535
                    Application.SelectRow row:=ActiveProject.Tasks(strSprj).ID + sprj.SourceProject.Tasks(i).ID, rowrelative:=False
                    Font32Ex CellColor:=65535
                End If
            Next i
        Next tsk
    Next sprj

End Sub

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Jesse Blue » 16. Jan 2017, 11:57

Hallo Xlsibb,
jetzt war ich meinerseits ein paar Tage nicht online. Das gleicht sich also aus :wink:
Nun zu deinem Code:
Das sieht ja echt fancy aus! Ja, funktioniert und ich bin happy.
Vielen Dank!

Liebe Grüße
Jan

EDIT: Meh, zu früh gefreut! Ich bekomme einen Fehler in dieser Spalte:

Code: Alles auswählen
Application.SelectRow row:=ActiveProject.Tasks(strSprj).ID + tsk.ID, rowrelative:=False

mit der Fehlermeldung Laufzeitfehler 1101:
Ungültiger Argumentenwert.
"Was tun?", sprach Zeus.

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Xlsibb » 11. Jan 2017, 11:31

Hallo Jan,

sorry, war ne Weile off.
Dann kannst du deinen Code wie folgt erweitern:

Code: Alles auswählen
Sub doppelte_Eintraege()
   
    Dim sprj As Subproject
    Dim tsk As Task
    Dim strSprj, strTask As String
    Dim i As Integer

    For Each tsk In ActiveProject.Tasks
        strTask = tsk.Name
        For i = tsk.Index + 1 To ActiveProject.Tasks.Count
            If ActiveProject.Tasks(i).Name = strTask Then
                Application.SelectRow row:=tsk.ID, rowrelative:=False
                Font32Ex CellColor:=65535
                Application.SelectRow row:=ActiveProject.Tasks(i).ID, rowrelative:=False
                Font32Ex CellColor:=65535
            End If
        Next i
    Next tsk
   
    For Each sprj In ActiveProject.Subprojects
        strSprj = Left(sprj.SourceProject.Name, Len(sprj.SourceProject.Name) - 4)
        For Each tsk In sprj.SourceProject.Tasks
            strTask = tsk.Name
            For i = tsk.Index + 1 To sprj.SourceProject.Tasks.Count
                If sprj.SourceProject.Tasks(i).Name = strTask Then
                    Application.SelectRow row:=ActiveProject.Tasks(strSprj).ID + tsk.ID, rowrelative:=False
                    Font32Ex CellColor:=65535
                    Application.SelectRow row:=sprj.SourceProject.Tasks(i).ID, rowrelative:=False
                    Font32Ex CellColor:=65535
                End If
            Next i
        Next tsk
    Next sprj

End Sub

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Jesse Blue » 21. Dez 2016, 10:43

Hallo und sorry für den dritten Post in Folge :oops:

Also, der Code funktioniert ja und ich kann fleißig Vorgänge markieren.
Jetzt stellte sich allerdings heraus, dass das Makro leider keine Subprojekte in einem Master mit einschließt. Gibt es da vielleicht noch eine fesche Möglichkeit wie man das mit abdecken kann?

Liebe Grüße
Jan

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Jesse Blue » 06. Dez 2016, 11:53

Ich habs!
Hab beim Kopieren einen Fehler gemacht!
Vielen Dank! :D

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Jesse Blue » 06. Dez 2016, 11:51

Das funktioniert bei dir?
Bei mir markiert er jetzt gar nichts. Das wäre zwar an sich ganz gut, aber selbst den vorsätzlich eingefügten Vorgang mit gleichem Namen markiert er nicht. Hab ich noch was übersehen? :?

Re: [VBA] MS-Project 2010 Auf doppelte Vorgänge prüfen

Beitrag von Xlsibb » 06. Dez 2016, 11:43

Ich hab den Fehler (vermutlich) gefunden.

Ich schrieb:
For i = tsk.Index + 1 To ThisProject.Tasks.Count

es muss aber lauten:
For i = tsk.ID + 1 To ThisProject.Tasks.Count

Edit:
Ja, deine Beispieldatei funktioniert so bei mir.
Viel Erfolg also!

Nach oben