如何 select MS Project 时间轴上的任务?

How to select a Task on a Timeline on MSProject?

我正在寻找一种在 MSProject 上创建时间轴的方法,其颜色与我任务的“Text2”列中的关键词相匹配。为此,我 select 使用正确的关键字执行任务,并使用“TaskOnTimeline”命令。但是,此命令不会 select 它刚刚插入时间线的任务,而且我在 vba 论坛中找不到似乎这样做的命令。任何人都知道避免此问题的方法或特定命令吗? (顺便说下我用的是MSProject 2016)

编辑:这是我使用的代码,我之前创建了两个数组,L()(为时间轴上的任务着色的关键词列表)和 Couleur()(颜色)

WindowActivate TopPane:=True
SelectRow Row:=1, RowRelative:=False

For i = 1 To ActiveProject.Tasks.Count

    SelectRow Row:=i, RowRelative:=False
    
    If Not ActiveProject.Tasks(i) Is Nothing Then
        If InStr(1, ActiveProject.Tasks(i).Text2, "Titre", 1) <> 0 Then
            WindowActivate TopPane:=False
            InsertTimelineBar
            WindowActivate TopPane:=True
            TaskOnTimeline
            'Rajouter de mettre la tache en legende
            
        Else
            If Not ActiveProject.Tasks(i).Text2 = "" Then
                For y = 0 To n
                    If InStr(L, ActiveProject.Tasks(i).Text2, L(y), 1) <> 0 Then
                        WindowActivate TopPane:=True
                        SelectRow Row:=i, RowRelative:=False
                        TaskOnTimeline
                        WindowActivate TopPane:=False
                        Font32Ex CellColor:=Couleur(y)
                        
                    End If
                Next y
            End If
        End If
    End If
Next i

问题出在我在时间线上添加任务时;我尝试为添加的任务着色(在时间轴上而不是在甘特图中 table),但任务未 selected,因此 Font32Ex 命令不起作用。

这是项目对象模型缺失的另一个例子——没有直接的方法select时间线上的任务。

但是,您可以使用 SelectCellRight(或 SelectCellLeft)逐步完成时间线任务以找到您想要的任务。将任务添加到时间线后,尝试使用此例程对其进行格式化。

Sub FormatTimelineTask(uid As Long, color As Long)

    WindowActivate TopPane:=False

    SelectAll
    
    Dim numTlTasks As Long
    numTlTasks = ActiveSelection.Tasks.Count
    SelectCellUp
    
    Dim l As Long
    For l = 1 To numTlTasks
        SelectCellRight
        If ActiveCell.Task.UniqueID = uid Then
            Font32Ex color:=color
            Exit For
        End If
    Next l
    
End Sub

注意:我目前只有 Project 2013 可用,所以我无法在 2016 上进行测试,因为 2016 允许在时间轴上显示多行。