Код MS Project VBA для удаления задач с нулевым рабочим усилием с использованием настраиваемого поля в качестве критерия

В настоящее время я пытаюсь написать код VBA, который будет смотреть на план проекта и удалять все задачи, которые не требуют усилий, но не являются вехой, из моего плана. Мы добавили настраиваемое поле с именем Key Milestone, чтобы определить, является ли задача этапом или нет. Причина, по которой мы не используем существующее поле Milestone, заключается в том, что не все задачи с нулевым рабочим усилием и нулевой продолжительностью обязательно являются вехами.

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

Sub DeleteMsProjectTask()
Dim proj As Project
Dim t As Task
Set proj = ActiveProject
For Each t In proj.Tasks
If t.OutlineLevel > 1 And t.Work = 0 Then
If GetField(FieldNametoFieldConstant("Key Milestone") = Yes Then
Else
t.Delete
End If
End If
Next t
End Sub

Это не работает, так как не правильно считывает поле этапа. Заранее спасибо за помощь!

1 ответ

GetField является методом объекта Task, поэтому вам необходимо предварять его переменной объекта задачи, например t.GetField, Также вы пропустили закрывающие скобки. А поскольку GetField возвращает строку, вам необходимо сравнить ее со строкой - другими словами, слово Да должно быть в кавычках. Поскольку критерием удаления фактически было значение "Нет", я соответственно упростил ваш код.

Sub DeleteMsProjectTask()
Dim proj As Project
Dim t As Task
Set proj = ActiveProject
For Each t In proj.Tasks
    If t.OutlineLevel > 1 And t.Work = 0 Then
        If t.GetField(FieldNameToFieldConstant("Key Milestone")) = "No" Then
            t.Delete
        End If
    End If
Next t
End Sub
Другие вопросы по тегам