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 ответ
Получил ответ здесь:
Sub SetTaskNameFontDone()
Dim T As Task
For Each T In ActiveSelection.Tasks
Font32Ex Color:=8355711
Font32Ex Strikethrough:=True
Next T
End Sub