MS Project VBA не меняет цвет ячейки

ОБНОВЛЕНИЕ: Ответ ниже

В MS Project 2013 Pro я создал настраиваемое поле «Pri» (для приоритета) из поля «Number10». Затем я написал приведенную ниже процедуру VBA, которая активируется кнопкой в ​​форме VBA, чтобы проверить значение Pri и соответствующим образом установить цвет ячейки. Работает, кроме...

Когда я устанавливаю значение Pri и запускаю подпрограмму, а затем сбрасываю значение Pri и повторно запускаю подпрограмму, она не «принимает». В часах я могу сказать, что они нашли поле, обнаружили значение «Select Case» и выполнили оператор присваивания CellColor. Но цвет ячейки не меняется в представлении диаграммы Ганта.

Я ищу здесь шаблон, и я вижу следующее:
1) Если я обновлю поле Pri (т.е. изменю значение после первого добавления), а затем обновлю другое задача Pri, он сразу же применяет фон к тому, который я хотел сначала изменить.
2) только что обновленная ячейка Pri имеет бледно-голубой фон; это какой-то "предварительный" статус? Что не может быть прочитано VBA? Если да, то как «обновить» или что-то еще, чтобы приложение приняло значение?
=> это похоже на «Изменить выделение», описанное здесь; что с этим можно сделать?
3) если я открываю и закрываю раздел Outline, содержащий задачу, он правильно устанавливает цвет. Опять какая-то обнова? Подсветка дополнительных изменений?

Я добавил строки ScreenUpdating = False/True в начале, в ответ на отчет об ошибке, однако, без радости.

==> Любые предложения?

Sub SetPriorityColors()

ScreenUpdating = False
ScreenUpdating = True

Set ts = ActiveProject.Tasks
For n = 1 To ts.Count
If Not ts(n) Is Nothing Then
    ts(n).OutlineShowAllTasks
End If
Next n

For n = 1 To ts.Count
If Not ts(n) Is Nothing Then
    Set tsk = ts(n)
    wrkName = tsk.Name
    wrkID = tsk.ID
    SelectTaskField Row:=wrkID, Column:="Number10", RowRelative:=False
    If wrkID = 23 Then
        a = 1
    End If

    Select Case tsk.Number10
        Case Is >= 9
            Font32Ex CellColor:=&HFF99CC
        Case Is >= 8
            Font32Ex CellColor:=&H66CCFF
        Case Is >= 7
            Font32Ex CellColor:=&H66FFFF
         Case Is = 0
             Font32Ex CellColor:=&HFFFFFF
    End Select

End If

Next n

SelectTaskField Row:="1", Column:="Number10", RowRelative:=False



End Sub

person wayfarer    schedule 07.10.2015    source источник


Ответы (1)


Это делает это:

Добавьте это в начало подпрограммы

Dim wrkCHFlag As Boolean
wrkCHFlag = False
If EnableChangeHighlighting Then
   ToggleChangeHighlighting
   wrkCHFlag = True
End If`

и это до конца

If wrkCHFlag Then
    ToggleChangeHighlighting
End If

Эта ссылка объясняет выделение изменений. Я обнаружил инструкцию VBA ToggleChangeHighlighting через макрос, который привел к свойству EnableChangeHighlighting.

person wayfarer    schedule 07.10.2015