MSProject VBA:添加任务到时间线后无法选中设置颜色如何解决
MS Project 2016 VBA 设置时间线任务颜色的解决方案
方法1:直接操作时间线对象(优先使用,无选中依赖)
Project 2016 支持通过TimelineView对象直接访问时间线上的任务属性,不需要切换窗格、选中任务即可修改格式,修改后的代码逻辑如下:
Dim tlView As TimelineView Dim tlTask As TimelineTask Dim tsk As Task ' 先获取当前时间线视图,提前绑定避免反复切换窗格 Set tlView = Application.ActiveWindow.TimelineView WindowActivate TopPane:=True SelectRow Row:=1, RowRelative:=False For i = 1 To ActiveProject.Tasks.Count Set tsk = ActiveProject.Tasks(i) If Not tsk Is Nothing Then If InStr(1, tsk.Text2, "Titre", 1) <> 0 Then InsertTimelineBar TaskOnTimeline TaskID:=tsk.ID ' 直接指定任务ID添加,不需要先选中行 Else If tsk.Text2 <> "" Then For y = 0 To n If InStr(1, tsk.Text2, L(y), 1) <> 0 Then ' 添加任务到时间线 TaskOnTimeline TaskID:=tsk.ID ' 遍历时间线任务匹配ID,直接设置颜色,不需要选中 For Each tlTask In tlView.Tasks If tlTask.TaskID = tsk.ID Then tlTask.FillColor = Couleur(y) Exit For End If Next tlTask End If Next y End If End If End If Next i
这个方法完全规避了选中逻辑,稳定性更高,不会受窗格切换、选中偏移的影响。
方法2:搜索选中适配(适合必须用原有选中逻辑的场景)
如果需要沿用原有Font32Ex的操作逻辑,可以在添加任务到时间线后,切换到时间线窗格调用Find方法匹配任务名称选中:
' 原有添加任务到时间线的代码后添加: WindowActivate TopPane:=False Find Field:="名称", Test:="equals", Value:=tsk.Name ' 此时时间线上的对应任务已经被选中,可直接调用Font32Ex Font32Ex CellColor:=Couleur(y)
注意:该方法存在重名任务匹配错误的问题,仅建议任务名称唯一的场景使用。
内容的提问来源于stack exchange,提问作者Marie
相关产品推荐
相关产品推荐

