#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 июня !