【问题标题】:Project Macro Exits Out Without Deleting All Relevant Tasks项目宏退出而不删除所有相关任务
【发布时间】:2017-07-18 20:46:38
【问题描述】:

我有一个宏,用于删除所有工作量为零的任务,如果它们是 a) 不是关键里程碑(企业定义的字段)或 b) 大于大纲级别 1。

但是,宏退出并且不再继续执行所有满足上述条件的任务。项目计划很长(大约 1840 行),它在 200 行附近停止。宏似乎没有循环所有相关任务,但我不知道为什么。

Sub DeleteMsProjectTask()
Dim proj As Project
Dim t As Task
Dim tsk
Dim mileTsk
Set proj = ActiveProject
For Each t In proj.Tasks
If t.OutlineLevel > 1 And t.Work = 0 Then
   tsk = t.Name
   mileTsk = t.GetField(FieldNameToFieldConstant("Key Milestone?", pjTask))
   If mileTsk = "No" Then
        t.Delete
   Else
   End If
End If
Next t
MsgBox ("Done")
End Sub

【问题讨论】:

  • 这是因为您在向前循环时正在删除任务。删除任务时需要向后循环。而不是循环使用For Each t In proj.Tasks,您需要循环使用For i = proj.Tasks.Count to 1 Step -1

标签: vba ms-project


【解决方案1】:

更新

更新代码以从子项目中删除任务。

正如 Shai Rado 所逃避的那样,关键是使用索引循环遍历集合,而不是遍历集合。

Sub DeleteMsProjectTask()
    DeleteTasks ActiveProject
    Dim sp As Subproject
    For Each sp In ActiveProject.Subprojects
        DeleteTasks sp.SourceProject
    Next sp
End Sub

Sub DeleteTasks(prj As Project)
    Dim NumTasks As Integer
    NumTasks = prj.Tasks.Count
    Dim idx As Integer
    idx = NumTasks
    Dim t As Task
    Dim mileTsk As String
    Do While idx > 0
        Set t = prj.Tasks(idx)
        If t.OutlineLevel > 1 And t.Work = 0 Then
            mileTsk = t.GetField(FieldNameToFieldConstant("Key Milestone?", pjTask))
            If mileTsk = "No" Then
                t.Delete
                NumTasks = NumTasks - 1
            End If
        End If
        idx = idx - 1
    Loop
End Sub

【讨论】:

  • 谢谢!!问题 - 当我在不编辑任何数据的情况下针对项目计划运行宏时,它可以完美运行(例如,我有一个项目计划主模板)。但是,如果我手动操作任何数据(例如更新任何任务的工作时间),宏将停止工作并且不会删除任务。关于为什么会发生这种情况的任何想法?
  • @AJ123 单步执行代码以确保宏实际上循环遍历您希望它运行的项目的任务。它是否执行 t.Delete 行并且什么都不做?
  • @RachelHettinger 不错,我没时间写代码
  • @RachelHettinger 当它遇到包含子项目的项目计划的第一部分时它退出宏(所以第4级向下 - 项目计划下降到第9级);但我不清楚为什么这会影响宏的运行能力,因为它适用于我没有进行任何手动更新的计划版本。
  • @AJ123 您在第 4 层插入了子项目??代码已更新以处理子项目。除了主项目之外,您还需要单独循环每个子项目的任务。
猜你喜欢
  • 2021-04-06
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
相关资源
最近更新 更多