【问题标题】:MS Project VBA Code to Delete Zero Work Effort Tasks Using a Custom Field as Criteria使用自定义字段作为标准删除零工作量任务的 MS Project VBA 代码
【发布时间】:2020-07-01 06:50:17
【问题描述】:

我目前正在尝试编写 VBA 代码,该代码将查看项目计划并从我的计划中删除所有工作量为零但不是里程碑的任务。我们添加了一个名为 Key Milestone 的自定义字段来捕获任务是否为里程碑。我们不使用现有 Milestone 字段的原因是,并非所有零工作量和零持续时间的任务都一定是里程碑。

我以前不熟悉 VBA 中的 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 GetField(FieldNametoFieldConstant("Key Milestone") = Yes Then
Else
t.Delete
End If
End If
Next t
End Sub

这不起作用,因为它没有正确读取里程碑字段。提前感谢您的帮助!

【问题讨论】:

    标签: vba ms-project


    【解决方案1】:

    GetField 是一个method of the Task object,所以你需要在它前面加上你的任务对象变量,例如t.GetField。此外,您错过了右括号。由于 GetField 返回一个字符串,因此您需要与一个字符串进行比较——换句话说,单词 Yes 需要用引号引起来。由于删除标准实际上是“否”值,因此我相应地简化了您的代码。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多