Событие Application.ProjectBeforeTaskChange (Project)

Происходит до того, как пользователь изменяет значение поля задачи.

Синтаксис

выражение. ProjectBeforeTaskChange( _tsk_, _Field_, _NewVal_, _Cancel_ )

выражение: переменная, представляющая объект Application.

Параметры

Имя Обязательный или необязательный Тип данных Описание
тск Обязательный Задача Задача, поле которой изменяется.
Field Обязательный Long Изменяемое поле. Если пользователем изменяется несколько полей, событие запускается для каждого измененного поля. Может быть одной из констант PjField .
Новая Вэл Обязательный Variant Новое значение для поля, указанного с помощью Field.
Отмена Обязательный Boolean При возникновении события значение false. Если процедура обработки событий устанавливает для этого аргумента значение True, значение для поля, указанного с помощью Field , не изменяется.

Примечания

События проекта не происходят, если проект внедрен в другой документ или приложение.

Событие ProjectBeforeTaskChange не возникает при изменении данных в масштабе времени, при изменении данных ограничений в форме сведений о задаче, при разбиении задачи путем изменения ее панели задач на диаграмме Ганта, при внесении изменений в уровень структуры или номер структуры, при сохранении базового плана, при очистке базового плана, вставке целой строки задачи, Во время операций пула ресурсов, при вставке или удалении подпроекта или при внесении изменений с помощью настраиваемой формы. Дополнительные сведения и пример кода для создания и тестирования обработчика событий см. в статье "Использование событий с объектами приложений и проектов".

Пример

В следующем примере пользователь получает информацию о том, когда длительность задачи увеличивается и насколько. В этом примере требуется новый модуль класса и дополнительный код, чтобы он имел эффект.

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

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.