Application.ProjectBeforeTaskChange Event

Project Developer Reference

Occurs before the user changes the value of a task field.

Syntax

expression.ProjectBeforeTaskChange(tsk, Field, NewVal, Cancel)

expression   A variable that represents an Application object.

Parameters

Name Required/Optional Data Type Description
tsk Required Task The task whose field is being changed.
Field Required Long The field being changed. If more than one field is changed by the user, the event is fired for each field changed. Can be one of the PjField constants.
NewVal Required Variant The new value for the field specified with Field.
Cancel Required Boolean False when the event occurs. If the event procedure sets this argument to True, the value for the field specified with Field is not changed.

Remarks

Microsoft Office Project 2007 events do not occur when the project is embedded in another document or application.

The ProjectBeforeTaskChange event doesn't occur when timescaled data changes, when constraint data in the Task Details Form changes, when a task is split by manipulating its task bar on the Gantt Chart, when changes are made to outline level or outline number, when a baseline is saved, when a baseline is cleared, when an entire task row is pasted, during resource pool operations, when inserting or removing a subproject, or when changes have been made using a custom form. For more information and sample code for creating and testing an event handler, see Using Events with Application and Project Objects.

Example
This example informs the user when a task's duration increases and by how much. This example requires a new class module and additional code for it to have an effect.

Visual Basic for Applications
  Private Sub App_ProjectBeforeTaskChange(ByVal tsk As Task, ByVal Field As PjField, _
    ByVal NewVal As Variant, Cancel As Boolean)
    
    Dim TaskDuration As Long
TaskDuration = Val(NewVal) * 480    ' Convert days to minutes

If Field = pjTaskDuration And TaskDuration > tsk.Duration Then
    If (TaskDuration - tsk.Duration) \ 480 < 1 Then
        MsgBox "The task " & Chr$(34) & tsk.Name & Chr$(34) & " is now " & _
            (TaskDuration - tsk.Duration) / 480 & (TaskDuration - tsk.Duration) \ 480 & _
                " day(s) longer."
    Else
        MsgBox "The task " & Chr$(34) & tsk.Name & Chr$(34) & " is now " & _
            (TaskDuration - tsk.Duration) / 480 & " day(s) longer."
    End If
End If

End Sub

See Also