MS Project VBA связать задачу со строкой

Обновление: ответ ниже

Я построил форму в своем MS Project VBA, на которой есть несколько кнопок форматирования, в частности кнопка "Готово", которая изменяет шрифт выбранных ячеек на Серый и Зачеркнутый. Подпрограмма ниже работает нормально, кроме...

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

Проблема, с которой я сталкиваюсь, заключается в том, что номер строки представляется номером физического местоположения, то есть положением сверху листа. Таким образом, если вы "закроете" задачу, в которой есть подзадачи, номер строки больше не совпадает с идентификатором задачи, и форматирование применяется к неправильной строке.

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) Я мог бы выполнять OutlineShowAllTasks в начале процедуры, но это меняет способ отображения контура. Я не нашел индикатор, для которого открыты задачи, поэтому я не могу запомнить и восстановить его, в качестве компенсации за OutlineShowAllTasks.

2) Сохраните целевые идентификаторы задач, а затем переберите все строки и сравните идентификаторы задач для каждой строки. Однако я не нашел способа перебрать все строки и получить идентификатор задачи из строки.

Будем благодарны за любые предложения о том, как связать выбранную задачу с соответствующей строкой.

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
Другие вопросы по тегам