Событие 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 и обратная связь.