Вопрос или проблема
Я хочу изменить цвет текста для целой строки в зависимости от того, что указано в поле “Статус”.
Я искал на других форумах и нашел решения, которые близки, но ничего, что действительно делает то, что мне нужно. Я знаю о функции выделения и условном форматировании, но не могу заставить их работать так, как мне требуется. Я написал код на VB для выполнения этой задачи примерно 5 лет назад, но я новичок, и написание очень базового кода заняло у меня около 5 дней, а затем я потерял его, когда ушел с последней работы. 🙁
Итак, я ищу просто немного VBA, который сделает следующее:
- Если Статус = “Поздно”, то окрасить текст в строке в “КРАСНЫЙ”
- Если Статус = “На графике”, то окрасить текст в строке в “ЗЕЛЕНЫЙ”
- Если Статус = “Будущая задача”, то окрасить текст в строке в “ЧЕРНЫЙ”
- Если Статус = “Завершено”, то окрасить текст в строке в “СЕРЫЙ”
Мне бы хотелось продвинуться и иметь что-то вроде следующего:
Если Статус = “На графике”, И % завершенности < 85%, И "Дата завершения" < 5 дней в будущем, то окрасить текст в строке "ОРАНЖЕВЫЙ"
Sub CompletePercentSub()
Dim t As Task
Dim i As Integer
‘Итерация через весь файл ms project
i = 1
For Each t In ActiveProject.Tasks
SelectRow Row:=i, RowRelative:=False
If Not t Is Nothing Then
Select Case t.Status
Case 0 'Завершено
Font32Ex CellColor:=&H98FB98 'СВЕТЛО ЗЕЛЕНЫЙ
Case 1 'На графике
Font32Ex CellColor:=&HE0FFFF 'СВЕТЛО-КОРИЧНЕВЫЙ
Case 2 'Поздно
Font32Ex CellColor:=&HC0FF& 'СВЕТЛО-КРАСНЫЙ
Case 2 'Будущая задача
Font32Ex CellColor:=&HFFFFFF 'БЕЛЫЙ
End Select
End If
i = i + 1
Next t
End Sub
Ответ или решение
Для изменения цвета текста в строке на основе значения поля "Статус" в Microsoft Project, вы можете воспользоваться макросами VBA. Я предлагаю вам следующий код, который поможет вам решить вашу задачу эффективно.
Код VBA для изменения цвета текста в строке по статусу
Sub ChangeTextColorByStatus()
Dim t As Task
Dim i As Integer
Dim percentageComplete As Double
Dim finishDate As Date
Dim daysUntilFinish As Long
' Итерация по всем задачам в активном проекте
i = 1
For Each t In ActiveProject.Tasks
' Выбор строки текущей задачи
SelectRow Row:=i, RowRelative:=False
If Not t Is Nothing Then
' Получение значения процента завершения и даты окончания
percentageComplete = t.PercentComplete
finishDate = t.Finish
daysUntilFinish = DateDiff("d", Now, finishDate)
' Изменение цвета текста в зависимости от статуса
Select Case t.Status
Case "Late"
Font32Ex CellColor:=&HFF0000 ' Красный
Case "On Schedule"
If percentageComplete < 85 And daysUntilFinish <= 5 Then
Font32Ex CellColor:=&HFFA500 ' Оранжевый
Else
Font32Ex CellColor:=&H00FF00 ' Зеленый
End If
Case "Future Task"
Font32Ex CellColor:=&H000000 ' Черный
Case "Complete"
Font32Ex CellColor:=&H808080 ' Серый
End Select
End If
i = i + 1
Next t
End Sub
Как использовать код
-
Открытие Microsoft Project: Запустите Microsoft Project и откройте нужный проект.
-
Открытие редактора VBA: Нажмите
ALT + F11
, чтобы открыть редактор Visual Basic for Applications. -
Создание нового модуля: В редакторе выберите
Insert
>Module
, чтобы создать новый модуль. -
Вставка кода: Скопируйте и вставьте приведённый выше код в окно модуля.
-
Запуск макроса: Закройте редактор и вернитесь в Microsoft Project. Нажмите
ALT + F8
, выберитеChangeTextColorByStatus
и нажмите кнопкуRun
.
Объяснение кода
- Итерация по задачам: Код проходит все задачи в активном проекте, увеличивая счётчик
i
для выбора каждой строки. - Условия: Используется оператор
Select Case
для проверки статуса задачи и изменения цвета текста в зависимости от условия. - Обработка процентов выполнения: Для статуса "On Schedule" добавлена дополнительная логика, которая проверяет процент завершения и количество дней до окончания.
Заключение
Данный макрос позволяет гибко настраивать цвет текста в строках Microsoft Project на основе статуса задачи и других условий, что значительно упрощает визуальное восприятие состояния проектов. Пользователь сможет легко идентифицировать задачи по их статусу, что улучшит управление проектами и повысит продуктивность.
Если у вас возникнут дополнительные вопросы или потребуется помощь с другими аспектами VBA, не стесняйтесь задавать их.