Условное форматирование, выражение доступа, которое проверяет, находится ли значение в 3-й строке поля с возвратом каретки

#ms-access #expression #conditional-formatting

Вопрос:

Я создал матричный запрос для отчета, который объединяет несколько полей с возвратами каретки:

 TheValue: Max([CLCraftLevel]) amp; Chr(13) amp; Chr(10) amp; Max([CTrainingLevel]) amp; Chr(13) amp; Chr(10) amp; Max([CSignatory]) amp; Chr(13) amp; Chr(10) amp; Max([CAuthDate]) amp; Chr(13) amp; Chr(10) amp; First([CAuthorisedBy])
 

Результат этого может выглядеть так ([] — строки без значения):

1

[]

S

19/01/2021

Блоги о работе

или это:

[]

2

[]

[]

[]

или это:

[]

[]

S

19/10/2021

Блоги о работе

Если в третьей строке есть «S», мне нужно условное форматирование, чтобы поле в моем отчете стало синим, затем, если во второй строке есть «2», а в третьей строке нет «S», мне нужно условное форматирование, чтобы поле стало желтым. Я перепробовал много вариантов выражений, и мне больше всего повезло с этим:

 Left(Mid$([Col8],4,InStrRev([Col8],Chr(13))-1),1)="2"
 

Но я должен изменить 4 в зависимости от того, сколько строк заполнено, кажется.
Я обычно не использую выражения, поэтому немного растерян. Я также был бы открыт для использования решения vba, если это лучший способ сделать это.

Комментарии:

1. Под «матрицей» вы подразумеваете запрос ПЕРЕКРЕСТНОЙ таблицы? Почему выражение ссылается на [Col8], а не на имя поля [Значение]?

2. Извините, да, перекрестный удар. Значение-это имя поля в запросе. [Col8] является ли элемент управления в отчете содержит значение

Ответ №1:

Предложите использовать пользовательскую функцию VBA. Функция Split() анализирует строку в одномерный массив на основе нуля (третьей строкой будет индекс элемента 2). Поскольку известно, на какой элемент массива смотреть (зацикливание массива для выполнения чего-либо не требуется), не нужен объект полного массива.

 Function GetColor(s As String)
If Split(s, vbCrLf)(2) = "S" Then
    GetColor = "Blue"
ElseIf Split(s, vbCrLf)(1) = 2 Then
    GetColor = "Yellow"
End If
End Function
 

Вызовите эту функцию из правил условного форматирования:
Выражение является: GetColor([Col8])="Blue"
Выражение является: GetColor([Col8])="Yellow"

Комментарии:

1. Идеально! Большое вам спасибо @7 июня !