Условное форматирование MS Access сравнивает только первую цифру чисел.

Условное форматирование MS Access сравнивает только первую цифру чисел.

У меня есть база данных Access для рабочего проекта, к сожалению, я не могу поделиться слишком многими подробностями из-за характера работы. Но в основном у меня есть таблицы действий, которые необходимо выполнить, каждое действие имеет дату выполнения, и у меня есть таблица, в которой подсчитывается, сколько действий должно быть выполнено и было выполнено в каждом месяце, используя следующую логику:

Group by Month([Due Date])
Count [Due Date]

Для одного запроса и то же самое для завершенных дат в другом запросе. Затем у меня есть окончательный запрос, который использует запрос о датах выполнения, запрос о завершенных датах и ​​таблицу месяцев года (иначе пустые месяцы не отображаются). Итак, у меня есть следующее:

Nz(Due Dates Totals.Count,0)
Nz(Completed Dates Totals.Count,0)
Calendar.Month Number
Calendar.Month Name

(Значок Nz' выше нужен для того, чтобы в моем отчете не было пустых мест)

Затем мой отчет использует номер месяца для сортировки и группировки, название месяца для отображения месяца пользователям и небольшую таблицу с запланированными действиями и общим количеством действий. Затем я применяю условное форматирование к таблице, так что если выполненных действий меньше запланированных, она выделяется красным, если они равны, то зеленым, а если выполненных действий больше запланированных, то поле «завершено» становится синим.

Это работает нормально, если только одно из чисел не является двузначным числом. В этом случае сравнивается только первая цифра каждого значения, например:19 < 2

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

Спасибо за любую помощь. (И, кстати, в базе данных есть еще таблицы и тому подобное, Excel не является подходящим инструментом для этой работы).

решение1

Если MS Access интерпретирует числовое значение как строку, вы можете привести строковое значение к числовому типу данных, используя один из следующих методов:функции преобразования типов, выбор которого, очевидно, будет зависеть от характера ваших данных:

  • CCur(в валюту)
  • CDbl(удвоить)
  • CDec(в десятичную систему)
  • CInt(в целое число)
  • CLng(к Лонгу)
  • CSng(для сингла)

Поскольку вы собираетесь работать с целыми числами, я бы посоветовал использовать либо CInt, либо , если ваши значения, скорее всего, превысят 32767 (2 15 -1), CLng.

Таким образом, ваш код может стать следующим:

CInt(Nz([Due Dates Totals].Count,0))
CInt(Nz([Completed Dates Totals].Count,0))
Calendar.[Month Number]
Calendar.[Month Name]

решение2

Нашел решение, умножил Nz()функции на 1и теперь они должны быть числами, а не строками.

например, вместо

Nz(Due Dates Totals.Count,0)

я использовал

1 * Nz(Due Dates Totals.Count,0)

Связанный контент