Project: Benutzerdefinierte Felder - Makros zur Behandlung von Zuordnungswerten

Office-Blog

Der österreichische Blog für Anwender und Fans der Produktivitätslösungen von Microsoft.

Project: Benutzerdefinierte Felder - Makros zur Behandlung von Zuordnungswerten

Übersicht

  1. Einleitung
  2. Makros in Project übernehmen
    1. Makro erstellen
    2. Makro starten
    3. Sicherheitseinstellungen
  3. Zuordnungswerte von Vorgangsfeld in Ressourcenfeld übertragen
    1. Benutzerdefinierte lokale Felder
    2. Benutzerdefinierte Enterprise Felder (Project Server und Project Online)
  4. Zuordnungswerte von Vorgangsfeld in Ressourcenfeld übertragen
    1. Benutzerdefinierte lokale Felder
    2. Benutzerdefinierte Enterprise Felder (Project Server und Project Online)
  5. RollUp von Zuordnungswerten zu Vorgangsfeldern

Einleitung

Im Artikel Project: Benutzerdefinierte Felder - Typen für Vorgänge, Ressourcen und
Zuordnungen
hatte ich angekündigt, einige Makros zum Umgang mit benutzerdefinierten Feldern zur Verfügung zu stellen. Hier finden Sie eine Übersicht von Makros, die ich in der Vergangenheit für verschiedene Aktivitäten eingesetzt habe.

Makros in Project übernehmen

Makro erstellen

Um ein vorhandenes Makro in Project zu übernehmen, wird der Editor Microsoft Visual Basic for Applications benötigt. Starten Sie den Editor über Ansicht - Makros - Visual Basic.

image

Im Editor sehen Sie ein Baumstruktur für verfügbare Projekte.

  • ProjectGlobal(Global.MPT): Hier handelt es sich um die globale Projektvorlage. Makros die Sie diesem Projekt hinzufügen, stehen in allen Projekten auf Ihrem Rechner zur Verfügung.
  • VBAProject (Ausgecheckte Enterprise-Global): Dieses Projekt wird nur angezeigt, wenn Project mit einer Verbindung zu Project Online oder Project Server gestartet wurde und die Enterprise Global geöffnet wurde. Fügen Sie Makros hier ein, wenn sie für alle Anwender bei Verbindung mit Project Server oder Project Online auf allen Rechnern zur Verfügung stehen sollen.
  • VBAProject (Global(+ nicht zwischengespeicherte Ent...) Dieses Projekt wird nur angezeigt, wenn Project mit einer Verbindung zu Project Online oder Project Server gestartet wurde. Inhalte dieses Projekts stammen vom Server. Änderungen an dieser Stelle stehen nur in der aktuellen Sitzung zur Verfügung.
  • VBAProject (<Projektname>): Für jedes geöffnete Projekt wird ein Eintrag mit dem jeweiligen Projektnamen angezeigt.

image

Um ein Makro hinzuzufügen, klicken Sie mit der rechten Maustaste auf das gewünschte Zielprojekt und klicken Sie im Kontextmenü auf Einfügen. Wählen Sie danach den Eintrag Modul.

image

Sie können dem neu erstellten Modul einen informativen Namen geben. Geben Sie dazu in das Feld Name in den Moduleigenschaften den neuen Namen ein. In das große Fenster können Sie Makros aus anderen Quellen einfügen oder eigene Makros erstellen.

image

Makro starten

Starten Sie ein Makro über Ansicht - Makros - Makros anzeigen.

image

Wählen Sie bei Bedarf das Projekt, das das Makro beinhalten in Makros in aus. Markieren Sie das gewünschte Projekt und klicken Sie auf Ausführen.

SNAGHTML1405630f Sicherheitseinstellungen

Wenn Makros in Project oder in einem Projektplan enthalten sind, sehen Sie mit den Standardeinstellungen eine Warnmeldung beim Start von Project und/oder beim Öffnen eines Projektplans.

image

Sie können dann wahlweise Makros aktivieren oder deaktivieren.

Wenn Sie über eine digitale Signatur verfügen oder nur eigene Makros in Project und Projektplänen haben, können Sie die Warnmeldung auch deaktivieren. Wählen Sie dazu unter Ansicht - Makros - Makrosicherh.

image

Im Dialogfenster Trust-Center können Sie die gewünschte Einstellung vornehmen. Beachten und bedenken Sie dabei die Warnmeldung für die Option Alle Makros aktivieren.

image

Zuordnungswerte von Vorgangsfeld in Ressourcenfeld übertragen

Wie im Artikel Project: Benutzerdefinierte Felder - Typen für Vorgänge, Ressourcen
und Zuordnungen
beschrieben, können Werte aus Vorgangsfeldern, auch wenn die Option Abwärts zuordnen, wenn nicht manuell eingegeben aktiviert ist, zum Beispiel nicht in der Ansicht Ressource: Einsatz  angezeigt werden. Mit den folgenden beiden Makros können die Werte einer Zuordnung eines Vorgangsfelds in das Feld der Zuordnung eines Ressourcenfeldes übernommen werden. Grundvoraussetzung ist in jedem Fall, dass die Option Abwärts zuordnen, wenn nicht manuell eingegeben für Quell- und Zielfeld aktiviert ist.

Benutzerdefinierte lokale Felder

Mit diesem Makro werden Zuordnungswerte des Vorgangsfelds Text1 in die Zuordnung des Ressourcenfelds Text2 übertragen.

Sub ZuordnungVorgangResource()
'Übertragung des Wertes der Zuordnung des Vorgangsfelds Text1 
'in die Zuordnung des Ressourcenfelds Text2
'Voraussetzung: Für Text1 muss als Vorgangsfeld und Text 2 als 
'Ressourcenfeld die Option "Abwärts zuordnen, wenn nicht manuell 
'eingegeben" aktiviert sein
Dim P As Project
Dim T As Task
Dim R As Resource
Dim At As Assignment
Dim Ar As Assignment

'Setze P auf das aktive Projekt
Set P = ActiveProject

'Schleife über alle Vorgänge
For Each T In P.Tasks
    'ungültige Vorgänge ignorieren
    If Not T Is Nothing Then
        'Sammelvorgänge ignorieren
        If Not T.Summary Then
            'Schleife über alle Zuordnungen
            For Each At In T.Assignments
                'Setzen der Resource der Zuordnung
                Set R = P.Resources(At.ResourceID)
                'Schleife über alle Zuordnungen der Ressource
                For Each Ar In R.Assignments
                    'Bei Identifizierung des Assignments 
		    'Übertragung der Werte
                    If Ar.TaskID = T.ID Then
                        Ar.Text2 = At.Text1
                    End If
                Next Ar
            Next At
        End If
    End If
Next T
End Sub
Benutzerdefinierte Enterprise Felder (Project Server und Project Online)

Mit diesem Makro werden Zuordnungswerte des benutzerdefinierten Enterprise Felds der Entität Vorgang MeinVorgangsfeld in die Zuordnung des benutzerdefinierten Enterprise Felds der Entität Ressource MeinRessourcenfeld übertragen.

Sub ZuordnungVorgangResource_ECF()
'Übertragung des Wertes der Zuordnung des Vorgangsfelds MeinVorgangsFeld 
'in die Zuordnung des Ressourcenfelds MeinRessourcenfeld
'Voraussetzungen:
'   - Für das Vorgangsfeld MeinVorgangsFeld und das Ressourcenfeld  
'	MeinRessourcenfeld muss die Option "Abwärts zuordnen,  
'	wenn nicht manuell eingegeben" aktiviert sein
'   - Vorgangsfeld MeinVorgangsFeld und Ressourcenfeld MeinRessourcenfeld  
'	dürfen im Namen KEIN Leerzeichen enthalten, da sonst kein Zugriff  
'	auf Zuordnungfeldermöglich ist

Dim P As Project
Dim T As Task
Dim R As Resource
Dim At As Assignment
Dim Ar As Assignment

Dim TFID As Double
Dim RFIF As Double

'Setze P auf das aktive Projekt
Set P = ActiveProject

TFID = Application.FieldNameToFieldConstant("MeinVorgangsfeld", pjTask)

'Schleife über alle Vorgänge
For Each T In P.Tasks
    'ungültige Vorgänge ignorieren
    If Not T Is Nothing Then
        'Sammelvorgänge ignorieren
        If Not T.Summary Then
            'Schleife über alle Zuordnungen
            For Each At In T.Assignments
                'Setzen der Resource der Zuordnung
                Set R = P.Resources(At.ResourceID)
                'Schleife über alle Zuordnungen der Ressource
                For Each Ar In R.Assignments
                    'Bei Identifizierung des Assignments Übertragung der Werte
                    If Ar.TaskID = T.ID Then
                        Ar.MeinRessourcenfeld = At.MeinVorgangsfeld
                    End If
                Next Ar
            Next At
        End If
    End If
Next T
End Sub

Zuordnungswerte von Vorgangsfeld in Ressourcenfeld übertragen

Mit den folgenden beiden Makros können die Werte einer Zuordnung eines Ressourcenfelds in das Feld der Zuordnung eines Vorgangsfelds übernommen werden. Grundvoraussetzung ist in jedem Fall, dass die Option Abwärts zuordnen, wenn nicht manuell eingegeben für Quell- und Zielfeld aktiviert ist.

Benutzerdefinierte lokale Felder

Mit diesem Makro werden Zuordnungswerte des Ressourcenfelds Text1 in die Zuordnung des Vorgangsfelds Text2 übertragen.

Sub ZuordnungResourceVorgang()
'Übertragung des Wertes der Zuordnung des Ressourcenfelds Text1 
'in die Zuordnung des Vorgangsfelds Text2
'Voraussetzung: Für Text1 muss als Ressourcenfeld und Text 2 als 
'	Vorgangsfeld die Option "Abwärts zuordnen, wenn nicht 
'	manuell eingegeben" aktiviert sein

Dim P As Project
Dim T As Task
Dim R As Resource
Dim At As Assignment
Dim Ar As Assignment

'Setze P auf das aktive Projekt
Set P = ActiveProject

'Schleife über alle Resourcen
For Each R In P.Resources
    'ungültige Ressourcen ignorieren
    If Not R Is Nothing Then
        'Sammelvorgänge ignorieren
        For Each Ar In R.Assignments
            'Nur Zuorddnungen des aktuellen Projekts berücksichtigen
            If Ar.Project = P Then
                'Setzen des Vorgangs der Zuordnung
                Set T = P.Tasks(Ar.TaskID)
                'Schleife über alle Zuordnungen des Vorgangs
                For Each At In T.Assignments
                    'Bei Identifizierung des Assignments 
		    'Übertragung der Werte
                    If T.ID = Ar.TaskID Then
                        At.Text2 = Ar.Text1
                    End If
                Next At
            End If
        Next Ar
    End If
Next R
End Sub
Benutzerdefinierte Enterprise Felder (Project Server und Project Online)

Mit diesem Makro werden Zuordnungswerte des benutzerdefinierten Enterprise Felds der Entität Ressource MeinRessourcenfeldin die Zuordnung des benutzerdefinierten Enterprise Felds der Entität Vorgang MeinVorgangsfeld übertragen.

Sub ZuordnungResourceVorgang_ECF()
'Übertragung des Wertes der Zuordnung des Ressourcenfelds MeinRessourcenfeld 
'in die Zuordnung des Vorgangsfelds MeinVorgangsFeld
'Voraussetzungen:
'   - Für das Vorgangsfeld MeinVorgangsFeld und das Ressourcenfeld 
'	MeinRessourcenfeld muss die Option "Abwärts zuordnen, 
'	wenn nicht manuell eingegeben" aktiviert sein
'   - Vorgangsfeld MeinVorgangsFeld und Ressourcenfeld MeinRessourcenfeld 
'	dürfen im Namen KEIN Leerzeichen enthalten, da sonst kein Zugriff 
'	auf Zuordnungfelder möglich ist


Dim P As Project
Dim T As Task
Dim R As Resource
Dim At As Assignment
Dim Ar As Assignment

Dim TFID As Double
Dim RFIF As Double

'Setze P auf das aktive Projekt
Set P = ActiveProject

'Schleife über alle Resourcen
For Each R In P.Resources
    'ungültige Ressourcen ignorieren
    If Not R Is Nothing Then
        'Sammelvorgänge ignorieren
        For Each Ar In R.Assignments
            'Nur Zuordnungen des aktuellen Projekts berücksichtigen
            'und damit auch Zuordnungen nicht geöffneter Projekte 
	    'ausschließen, falls "Sammelressourcenzuweisungen laden" 
	    'beim Start des Clients aktiv ist
            If Ar.Project = P Then
                'Setzen des Vorgangs der Zuordnung
                Set T = P.Tasks(Ar.TaskID)
                'Schleife über alle Zuordnungen des Vorgangs
                For Each At In T.Assignments
                    'Bei Identifizierung des Assignments Übertragung der Werte
                    If T.ID = Ar.TaskID Then
                        At.MeinVorgangsfeld = Ar.MeinRessourcenfeld
                    End If
                Next At
            End If
        Next Ar
    End If
Next R
End Sub

RollUp von Zuordnungswerten zu Vorgangsfeldern

Wie im Artikel Project: Benutzerdefinierte Felder - Typen für Vorgänge, Ressourcen
und Zuordnungen
beschrieben, können Werte aus Vorgangsfeldern auf der Zuordnungsebene manuell überschrieben werden, wenn die Option Abwärts zuordnen, wenn nicht manuell eingegeben aktiviert ist. Manchmal wird dann ein RollUp des Wertes zurück auf die Vorgangsebene benötigt.

Häufig taucht die Fragestellung bei Einsatz des Project Servers oder Project Online auf. Wenn die Option Abwärts zuordnen, wenn nicht manuell eingegeben aktiviert ist, kann das Feld Projektteammitgliedern zum Ändern in Meine Vorgänge (Tasks.aspx) oder der Arbeitszeittabelle (Timesheet.aspx) zur Verfügung gestellt werden. Wenn ein Teammitglied eine Änderung an diesem Feld vornimmt, besteht häufig die Erwartung, den Wert auf der Vorgangsebene zu sehen. Die Änderung wird jedoch nur auf der Zuordnungsebene vorgenommen, der Wert steht auf der Vorgangsebene somit nicht zur Verfügung. Wenn eine eindeutige Logik definierbar ist, kann das folgende Makro das RollUp vornehmen.

Sub RollUpVonZuordnungsEbeneAufVorgangsEbene()
'Übertragung des Wertes der Zuordnung des Vorgangsfelds MeinVorgangsFeld 
'in das Vorgangsfeld MeinVorgangsFeld
'Voraussetzungen:
'   - Für das Vorgangsfeld MeinVorgangsFeld muss die 
'	Option "Abwärts zuordnen, wenn nicht manuell eingegeben" 
'	aktiviert sein
'   - Das Vorgangsfeld MeinVorgangsFeld darf im Namen KEIN Leerzeichen 
'	enthalten, da sonst kein Zugriff auf Zuordnungfelder möglich ist

Dim P As Project
Dim T As Task
Dim A As Assignment
Dim AV As String

Dim TFID As Double


'Setze P auf das aktive Projekt
Set P = ActiveProject

'Das Bearbeitens eine Enterprise Custom Fields muss über die FeldID erfolgen
TFID = Application.FieldNameToFieldConstant("MeinVorgangsfeld", pjTask)

'Schleife über alle Vorgänge
For Each T In P.Tasks
    'ungültige Vorgänge ignorieren
    If Not T Is Nothing Then
        'Sammelvorgänge und Vorgänge ohne Zuordnungen ignorieren
        If Not T.Summary And T.Assignments.Count > 0 Then
            'AV initial setzen
            AV = ""
            'Schleife über alle Zuordnungen
            For Each A In T.Assignments
                'Hier muss eine Logik implementiert werden
                'Beispiel: Werte zusammenfügen
                AV = AV + A.MeinVorgangsfeld
            Next A
            'Setzen des Vorgangsfelds über die FeldID aus TFID
            T.SetField FieldID:=TFID, Value:=AV
        End If
    End If
Next T
End Sub
Loading

Datenschutzhinweis: Sie stimmen durch "Kommentar speichern" der Speicherung Ihrer Angaben durch Microsoft Österreich für die Beantwortung der Anfrage zu. Sie erhalten dadurch keine unerwünschten Werbezusendungen. Ihre Emailadresse wird auf Ihren Wunsch dazu verwendet Sie über neue Kommentare zu informieren.

Microsoft respektiert den Datenschutz. Datenschutz & Cookies