ms项目vba与行关联任务

时间:2015-10-17 19:32:49

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

更新:在下面回答

我在MS Project VBA中构建了一个Form,其上有一些格式化按钮,特别是一个“Done”按钮,用于将所选单元格的字体更改为Gray和Strikethrough。下面的子程序工作正常,除了......

Sub SetTaskNameFontDone()

Dim T As Task

If Not (ActiveSelection.Tasks Is Nothing) Then
    For Each T In ActiveSelection.Tasks
        ' Test for blank task row
        If Not (T Is Nothing) Then
                SelectTaskField Row:=T.ID, Column:="Name", RowRelative:=False
                Font32Ex Color:=8355711
                Font32Ex Strikethrough:=True
        End If
    Next T
End If
End Sub

我遇到的问题是,行号似乎是一个物理位置编号,即从工作表顶部开始的位置。因此,如果您“关闭”具有子任务的任务,则行号不再与任务ID相同,并且格式应用于错误的行。

Case 1: Sheet when task is open:
VBA Row #     TaskID     Task
1               1        ParentTask1  (open)
2               2            SubTask1-1
3               3        ParentTask2

Case 2:  Sheet when task is closed (note change in row number)
VBA Row #     TaskID     Task
1               1        ParentTask1  (closed)
2               3        ParentTask2

两种可能的方法:

1)我可以在例程开始时执行OutlineShowAllTask​​s,但这会改变轮廓的显示方式。我没有找到任何打开任务的指示器,所以我无法记住和恢复它,作为对OutlineShowAllTask​​s的补偿。

2)保存目标任务ID,然后循环遍历所有行,并比较每行的任务ID。但是,我还没有找到一种循环遍历所有行并从行中获取任务ID的方法。

有关如何将所选任务与正确的行相关联的任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

在这里收到答案:

https://social.msdn.microsoft.com/Forums/en-US/c99cbac1-b886-48a5-8d1b-37df2c5caaec/ms-project-vba-associate-task-with-row?forum=project2010custprog

Sub SetTaskNameFontDone()
Dim T As Task
For Each T In ActiveSelection.Tasks
    Font32Ex Color:=8355711
    Font32Ex Strikethrough:=True
Next T
End Sub