VBA удалит строки из MS Project, когда работа будет нулевой

У меня есть мастер-копия плана проекта, которая содержит все возможные задачи, которые мне может потребоваться выполнить в рамках проекта. Я хочу создать макрос, который удаляет все строки, где Work = 0 часов, после того, как план проекта был обновлен PM. Я новичок в написании кода для 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

Я не уверен, что я делаю неправильно! Заранее спасибо за помощь.

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
Другие вопросы по тегам