【问题标题】:Associate task with row将任务与行关联
【发布时间】:2020-12-28 18:44:15
【问题描述】:

我构建了一个具有“完成”按钮的表单,该按钮将所选单元格的字体更改为灰色和删除线。

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。

如何将所选任务与正确的行相关联?

【问题讨论】:

    标签: vba ms-project


    【解决方案1】:

    在这里收到了答复:

    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
    

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 1970-01-01
      • 2023-03-25
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多