Использование DateDiff в доступе к датам цветового кода в условном форматировании

У меня есть таблица разрешений и сроков их действия. Если срок действия разрешения истек, я бы хотел, чтобы он был красным, если срок его действия истекает в течение 6 месяцев, я хочу, чтобы он был желтым, если срок его действия истекает более чем через 6 месяцев, зеленым, и если он еще не предоставлен (поэтому еще не получил срок годности) затем черный.

У меня есть текст по умолчанию как черный, а затем

КРАСНЫЙ

[C_ExpiryDate]<Now() 

ЯНТАРЬ

DateDiff("m",[C_ExpiryDate],Now())<6 And [C_ExpiryDate]>Now()

ЗЕЛЕНЫЙ

DateDiff("m",[C_ExpiryDate],Now())>6 And [C_ExpiryDate]>Now()

Кажется, у этого есть несколько разных проблем, красный работает нормально, насколько я могу судить. Но два других, похоже, плохо обрабатываются, например, зазор с 06 сентября 2015 г. окрашен желтым цветом (сегодня 03 июля 2014 г., поэтому он должен быть зеленым). Аналогично для 05 марта 2017 года, я думаю, что это просто просмотр месяца независимо от года, но я не слишком уверен, как лучше с этим справиться.

Не уверен, что было бы проще по умолчанию использовать зеленый цвет и, возможно, написать что-то вроде

[C_ExpiryDate] = ""

Но это, казалось, ничего не делало, и все становилось зеленым, даже когда была пустая дата. Аналогично для одинарных кавычек.

Любые предложения приветствуются...


person hello123    schedule 03.07.2014    source источник


Ответы (2)


Какую версию MS Access вы используете? Это работает для меня:

условное форматирование

результат

person Fionnuala    schedule 03.07.2014
comment
Спасибо, работает отлично, не думал об использовании DateAdd, но мне это нравится. Я использую 2010, и единственное, что янтарное условие - это просто значение между, а не значение между - person hello123; 04.07.2014

Как вы это написали, это происходит (я заменяю #06/Sept/2015# на [C_ExpiryDate], чтобы сохранить ваш пример)

Красный?

#06/Sept/2015#<Now() --> False

Янтарь?

DateDiff("m",#06/Sept/2015#,Now())<6 And #06/Sept/2015#>Now() --> True

Зеленый не оценивается

Проблема в том, что у вас есть большая дата первой и меньшая дата последней. Переключите их.

Или, наоборот, поскольку вы все равно проверяете [C_ExpiryDate]>Now(), вы можете взять их абсолютное значение и не беспокоиться о порядке.

#06/Sept/2015# < Now() --> False (Red)
DateDiff("m",Now(),#06/Sept/2015#) < 6 And #06/Sept/2015# > Now() --> False (Amber)
DateDiff("m",Now(),#06/Sept/2015#) > 6 And #06/Sept/2015# > Now() --> True (Green)

Однако у вас нет equal to 6 months состояния. Вам есть над чем подумать.

person Brad    schedule 03.07.2014
comment
Не говоря уже о том, что дата никогда не равна строке. - person Fionnuala; 04.07.2014
comment
Я предпочитаю dateadd, но +1 :) - person Fionnuala; 04.07.2014
comment
Спасибо, я думаю, что это тоже сработает, но мне очень нравится функция DateAdd (и я сначала прочитал комментарий выше), поэтому я использовал ее. - person hello123; 04.07.2014