MS Project VBA-通过显示行号进行迭代

时间:2018-07-16 09:38:35

标签: vba ms-project microsoft-project-vba

在此MS Project VBA宏中使用for循环时遇到问题:

Sub Check_Change_Article()
    Dim ProjTasks As Tasks
    Dim ProjTask As Task
    Dim Art As String
    Dim ArtOld As String
    Set ProjTasks = ActiveProject.Tasks
    ArtOld = " "
    For Each ProjTask In ProjTasks             
    If Not (ProjTask Is Nothing) Then        
        Art =ProjTask.Text22
        If (Art != ArtOld) Then
            ProjTask.Text4 = "CHANGE"
        End If
        ArtOld = Art
    End If
    Next ProjTask
End Sub

项目示例

Case 1: Sheet when task is open:         
VBA Row #     TaskID     Text22    Text4 
1               1        PNL50R    CHANGE
2               2        PNL50R          
3               3        JPL50Y    CHANGE
Case 2:  User can filter, group or order tasks (note change in row number)
VBA Row #     TaskID     Text22    Text4
1               3        PNL50R    CHANGE
2               1        PNL50R    CHANGE
3               2        JPL50Y    

我阅读了以下讨论: ms project VBA associate task with row

使用ActiveSelection.Tasks而不是ActiveProject.Tasks,我看到for循环在VBA行之后进行迭代。

是否可以设置循环以通过VBA行号进行迭代,而无需使用ActiveSelection(如果可能的话,我不会强迫用户选择行)?

预先感谢, 朱塞佩

1 个答案:

答案 0 :(得分:1)

您可以使用Application.SelectSheet(这样,用户不必手动选择任务)。然后,您可以遍历ActiveSelection.Tasks集合。完成后,您可以使用Application.SelectBeginning仅选择第一个任务。