【问题标题】:VBA to Remove Rows from MS Project When Work Effort is Zero当工作量为零时,VBA 从 MS 项目中删除行
【发布时间】:2020-07-01 07:17:09
【问题描述】:

我有一份项目计划的主副本,其中包含作为项目一部分我可能需要完成的所有可能任务。我想创建一个宏,一旦 PM 更新了项目计划,它会删除 Work = 0 hrs 的任何行。我是为 MS Project 编写代码的新手,所以无法正确理解以下内容:

Sub DeleteMsProjectTask()  
    Dim proj As Project  
    Dim w As Object  
    Dim t As Task  
    Set proj = ActiveProject  
    For Each t In proj  
       If w = 0 Then  
       Selection.EntireRow.Delete = True  
    End If  
    Next t  
    Loop  
End Sub

我不确定我做错了什么!提前感谢您的帮助。

【问题讨论】:

    标签: vba ms-project


    【解决方案1】:

    更新

    不是遍历集合,而是按索引引用任务对象。这避免了在循环中修改集合时出现的问题(例如,通过删除成员)。

    Sub DeleteMsProjectTask()
        Dim proj As Project
        Set proj = ActiveProject
        Dim NumTasks As Integer
        NumTasks = proj.Tasks.Count
        Dim idx As Integer
        idx = NumTasks
        Dim t As Task
        Do While idx > 0
            Set t = proj.Tasks(idx)
            If t.Work = 0 Then
                t.Delete
                NumTasks = NumTasks - 1
            End If
            idx = idx - 1
        Loop
    End Sub
    

    【讨论】:

    • 感谢您的意见。当我运行代码时,它只会删除一些工作量为零的行。例如,我在计划下有一组任务,当我运行宏时,这部分下的任务被删除。但是,当我为 Build 部分运行它时,它并不是以零工作量完成所有任务。知道为什么会发生这种情况吗?这些部分的设置方式没有什么不同 - 例如按阶段 > 任务 > 子任务分组。
    • 1) 如果您再次运行代码,它仍然会跳过这些任务吗? 2)是主/子项目中的任务还是这只是一个项目? 3) 找到一个正在被跳过的任务,选择它,然后进入 VB 编辑器并确认 Work = 0。在立即窗口中输入: ? ActiveCell.Task.Work
    • 1) 当我第二次运行代码时,它只删除了几行。我尝试连续多次运行它,并且 Work = 0 的一些任务仍然存在。 2)这只是一个项目。 3) 我确认工作量为零。
    • @AJ123,我在 2000 多条线路计划上对此进行了测试。我最初的解决方案在小时间表上运行良好,但在较大的时间表上却失败了。新的解决方案现在应该适合您了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多