如何 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 允许在时间轴上显示多行。
我正在寻找一种在 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 允许在时间轴上显示多行。