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

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

Синтаксис

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

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

Параметры

Имя Обязательный или необязательный Тип данных Описание
Tsk Обязательный Задача Задача, поле которой изменяется.
Поле Обязательный Long Изменяемые поля. Если пользователь изменяет несколько полей, событие запускается для каждого измененного поля. Может быть одной из констант PjField .
NewVal Обязательный Variant Новое значение для поля, указанного в поле Поле.
Отмена Обязательный 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 и обратная связь.