Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Условное форматирование. / 8 сообщений из 8, страница 1 из 1
02.10.2018, 19:35
    #39711988
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условное форматирование.
Пытаюсь разобраться с условным форматированием через VBA.
Помогите с кодом, не пойму что я упускаю?
Не все условия срабатывают в коде
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
Sub SetFormatConditionsForm()
  Dim frm As Form
  Dim i As Integer
    
On Error GoTo ErrNumber
  
  Set frm = Form_фпПоискЗаявок
'если есть условное форматирование, удаляем его
  If Form_фпПоискЗаявок.КодЗаявки.FormatConditions.Count > 0 Then
    For i = 0 To frm.Controls.Count - 1 'ищем комбобоксы и текстбокы среди контролов
      If (frm.Controls(i).ControlType = acComboBox) Or (frm.Controls(i).ControlType = acTextBox) Then
        With frm.Controls(i)
          .FormatConditions.Delete
        End With
      End If
    Next i
  Else
'красим только поле "КодЗаявки"
    Form_фпПоискЗаявок.КодЗаявки.FormatConditions.Add acExpression, , "[КодЗаявки] = [ЦветнойУказатель]"
    Form_фпПоискЗаявок.КодЗаявки.FormatConditions(0).BackColor = RGB(255, 153, 0)
'дальше красим все поля
    For i = 0 To frm.Controls.Count - 1 'ищем комбобоксы и текстбокы среди контролов
      If (frm.Controls(i).ControlType = acComboBox) Or (frm.Controls(i).ControlType = acTextBox) Then
        If frm.Controls(i).Name = "КодЗаявки" Then
          'проходим мимо
        Else
          With frm.Controls(i)
            If (Form_фпПоискЗаявок.СтатусЗаявки = "В работе" And Form_фпПоискЗаявок.СостояниеЗаявки = "Просрочено") Then
              .FormatConditions.Add acExpression, , "[СтатусЗаявки]='В работе' And [СостояниеЗаявки]='Просрочено'"
              If (frm.Controls(i).Name = "НомерЗаявки") Or (frm.Controls(i).Name = "НомерРодРЗ") Then
                .FormatConditions(0).FontUnderline = True
                .FormatConditions(0).ForeColor = vbBlue 'RGB(0, 0, 255)
              Else
                .FormatConditions(0).ForeColor = vbWhite
              End If
              .FormatConditions(0).BackColor = RGB(255, 0, 0) 'vbRed
            End If
            '----------------------
            If (Form_фпПоискЗаявок.СтатусЗаявки = "Закрыто") Then
              .FormatConditions.Add acExpression, , "[СтатусЗаявки]='Закрыто'"
              If (frm.Controls(i).Name = "НомерЗаявки") Or (frm.Controls(i).Name = "НомерРодРЗ") Then
                .FormatConditions(0).FontUnderline = True
                .FormatConditions(0).ForeColor = vbBlue 'RGB(0, 0, 255)
              Else
                .FormatConditions(0).ForeColor = vbWhite
              End If
              .FormatConditions(0).BackColor = RGB(34, 139, 34) 'vbGreen
            End If
            '----------------------
            If (Form_фпПоискЗаявок.СтатусРодРЗ = "В работе" And Form_фпПоискЗаявок.СостояниеРодРЗ = "Просрочено") Then
              .FormatConditions.Add acExpression, , "[СтатусРодРЗ]='В работе' And [СостояниеРодРЗ]='Просрочено'"
              If (frm.Controls(i).Name = "НомерЗаявки") Or (frm.Controls(i).Name = "НомерРодРЗ") Then
                .FormatConditions(0).FontUnderline = True
                .FormatConditions(0).ForeColor = vbBlue 'RGB(0, 0, 255)
              Else
                .FormatConditions(0).ForeColor = vbWhite
              End If
              .FormatConditions(0).BackColor = RGB(255, 0, 0) 'vbRed
            End If
            '----------------------
            If (Form_фпПоискЗаявок.СтатусРодРЗ = "Закрыто") Then
              .FormatConditions.Add acExpression, , "[СтатусРодРЗ]='Закрыто'"
              If (frm.Controls(i).Name = "НомерЗаявки") Or (frm.Controls(i).Name = "НомерРодРЗ") Then
                .FormatConditions(0).FontUnderline = True
                .FormatConditions(0).ForeColor = vbBlue 'RGB(0, 0, 255)
              Else
                .FormatConditions(0).ForeColor = vbWhite
              End If
              .FormatConditions(0).BackColor = RGB(34, 139, 34) 'vbGreen
            End If
          End With
        End If
      End If
    Next i
  End If
  DoCmd.GoToControl (frm.Name)
ExitHeare:
  Set frm = Nothing
Exit Sub

ErrNumber:
  If Error <> 0 Then
    MsgBox "Процедура: SetFormatConditionsForm." & vbCrLf & _
      Err.Description, , "№ " & Err.Number
    Resume ExitHeare
  End If
End Sub



Нужно для каждого поля по условию удалять/создавать условие:
"[КодЗаявки] = [ЦветнойУказатель]" - только для поля "КодЗаявки" красим оранжевой заливкой, работает по принципу расположения текущего указателя;

"[СтатусЗаявки]='В работе' And [СостояниеЗаявки]='Просрочено'" - красим красной заливкой;

"[СтатусЗаявки]='Закрыто'" - красим зеленой заливкой.
___________________________________
Использую Microsoft Access 2010, 64 бит.

Спасибо каждому, кто мне когда-либо здесь помог и продолжает помогать.
...
Рейтинг: 0 / 0
02.10.2018, 21:08
    #39712080
Predeclared
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условное форматирование.
nataxa23,

Может проще без УФ?
...
Рейтинг: 0 / 0
02.10.2018, 23:28
    #39712138
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условное форматирование.
nataxa23, очень тяжелый для чтения код, если хотите быть примером для других нужно больше внимания уделять структурированию. Иначе Вас просто не поймут!
Потому я его сначала причесал
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Private Sub SetFormatConditionsForm()
Dim fcd As FormatCondition, f As Form, ctrl As control
Const MistakeFunction$ = "SetFormatConditionsForm"
On Error GoTo ErrorHandler
Set f = Forms("фпПоискЗаявок")
With f.Controls("КодЗаявки").FormatConditions
        .Delete
            Set fcd = .Add(acFieldValue, acEqual, "[ЦветнойУказатель]")
                fcd.BackColor = RGB(255, 153, 0)
End With
        For Each ctrl In f.Controls
            If ctrl.ControlType = acComboBox Or ctrl.ControlType = acTextBox Then
                With ctrl.FormatConditions
                    .Delete
                          If ctrl.Name = "НомерЗаявки" Or ctrl.Name = "НомерРодРЗ" Then
                            Set fcd = .Add(acExpression, , "[СтатусЗаявки]='В работе' And [СостояниеЗаявки]='Просрочено'")
                                    fcd.FontUnderline = True
                                    fcd.ForeColor = vbBlue
                                    fcd.BackColor = RGB(255, 102, 0) 'оранжевый  было RGB(255, 0, 0) ' КРАСНЫЙ
                             Set fcd = .Add(acExpression, , "[СтатусЗаявки]='Закрыто'")
                                    fcd.FontUnderline = True
                                    fcd.ForeColor = vbBlue
                                    fcd.BackColor = vbRed '  БЫЛО RGB(34, 139, 34) ' ЗЕЛЕНЫЙ
                             Set fcd = .Add(acExpression, , "[СтатусРодРЗ]='Закрыто'")
                                fcd.FontUnderline = True
                                fcd.ForeColor = vbBlue
                                fcd.BackColor = RGB(34, 139, 34) ' ЗЕЛЕНЫЙ
                        Else
                            Set fcd = .Add(acExpression, , "[СтатусЗаявки]='В работе' And [СостояниеЗаявки]='Просрочено'")
                                fcd.ForeColor = vbWhite
                                fcd.BackColor = RGB(255, 102, 0) ' Оранжевый былоRGB(34, 139, 34) ' ЗЕЛЕНЫЙ
                             Set fcd = .Add(acExpression, , "[СтатусЗаявки]='Закрыто'")
                                 fcd.ForeColor = vbWhite
                                 fcd.BackColor = vbRed 'КРАСНЫЙ
                             Set fcd = .Add(acExpression, , "[СтатусРодРЗ]='Закрыто'")
                                fcd.ForeColor = vbWhite
                                fcd.BackColor = RGB(34, 139, 34) ' ЗЕЛЕНЫЙ
                        End If
                End With
        End If
    Next ctrl
End With
  DoCmd.GoToControl (f.Name) '  (?)
ExitHeare:
  Set f = Nothing
 Exit Sub
ErrorHandler: ' классную штуку для отладки придумал MrShin
Debug.Assert debugging
'Resume
 err.Raise err.Number, "Bubble of Module ", err.Number, "in BubbleError of" & MistakeFunction
GoTo ExitHeare
End Sub


После этого анализировать стало значительно легче.
...
Рейтинг: 0 / 0
03.10.2018, 00:49
    #39712162
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условное форматирование.
alecko,

А мне больше нравится структурирование nataxa23.
Ваше, на мой взгляд, как-то пляшет.
...
Рейтинг: 0 / 0
03.10.2018, 08:48
    #39712215
alecko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условное форматирование.
__Michelle, перечитайте Гетца т.1 Разработка настольных приложений в Access 2002.Для профессионалов.Литвин.Гетц.2002г.1008с гл.12
...
Рейтинг: 0 / 0
03.10.2018, 11:21
    #39712305
Условное форматирование.
Подозреваю, что у вас простая форма и процедура вызывается на событие Form_Current.
Если угадал, то согласен с Predeclared - УФ здесь не нужно, можно управлять стандартными свойствами элементов.
Если же использовать УФ, то можно один раз потрудиться, создать по несколько блоков (вроде по 3 у всех,кроме "КодЗаявки", где один) УФ для полей и больше ничего не трогать.
Например, у вас для 4-х вариантов условий одинаковые действия с подчеркиванием и цветом шрифта. Можно создать такое условие:
([СтатусЗаявки]='В работе' And [СостояниеЗаявки]='Просрочено') OR ([СтатусЗаявки]='Закрыто') OR
([СтатусРодРЗ]='В работе' And [СостояниеРодРЗ]='Просрочено') OR
([СтатусРодРЗ]='Закрыто')
По этому условию для "НомерЗаявки" и "НомерРодРЗ" синий фонт и подчеркивание, а для остальных - белый фонт.

2-й блок: ([СтатусЗаявки]='В работе' And [СостояниеЗаявки]='Просрочено') OR
([СтатусРодРЗ]='В работе' And [СостояниеРодРЗ]='Просрочено') и красный фон.
3-й блок: ([СтатусЗаявки]='Закрыто') OR ([СтатусРодРЗ]='Закрыто') и зеленый фон.

Вариант с УФ мне нравится больше. К тому же он будет работать и в ленточной/табличной форме.

ЗЫ. А что значит "Не все условия срабатывают"?
...
Рейтинг: 0 / 0
03.10.2018, 20:17
    #39712668
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условное форматирование.
PredeclaredМожет проще без УФ?
http://www.sql.ru/forum/actualfile.aspx?id=21693351] Приложенный файл (NotFC1.zip - 13Kb)
смотрела ваш пример, я что то не пойму а чем вы закрашиваете то, если не УФ? Не могу разобрать в примере.
-------------------------
aleckonataxa23, очень тяжелый для чтения код, если хотите быть примером для других нужно больше внимания уделять структурированию. Иначе Вас просто не поймут!
Потому я его сначала причесал
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Private Sub SetFormatConditionsForm()
Dim fcd As FormatCondition, f As Form, ctrl As control
Const MistakeFunction$ = "SetFormatConditionsForm"
On Error GoTo ErrorHandler
Set f = Forms("фпПоискЗаявок")
With f.Controls("КодЗаявки").FormatConditions
        .Delete
            Set fcd = .Add(acFieldValue, acEqual, "[ЦветнойУказатель]")
                fcd.BackColor = RGB(255, 153, 0)
End With
        For Each ctrl In f.Controls
            If ctrl.ControlType = acComboBox Or ctrl.ControlType = acTextBox Then
                With ctrl.FormatConditions
                    .Delete
                          If ctrl.Name = "НомерЗаявки" Or ctrl.Name = "НомерРодРЗ" Then
                            Set fcd = .Add(acExpression, , "[СтатусЗаявки]='В работе' And [СостояниеЗаявки]='Просрочено'")
                                    fcd.FontUnderline = True
                                    fcd.ForeColor = vbBlue
                                    fcd.BackColor = RGB(255, 102, 0) 'оранжевый  было RGB(255, 0, 0) ' КРАСНЫЙ
                             Set fcd = .Add(acExpression, , "[СтатусЗаявки]='Закрыто'")
                                    fcd.FontUnderline = True
                                    fcd.ForeColor = vbBlue
                                    fcd.BackColor = vbRed '  БЫЛО RGB(34, 139, 34) ' ЗЕЛЕНЫЙ
                             Set fcd = .Add(acExpression, , "[СтатусРодРЗ]='Закрыто'")
                                fcd.FontUnderline = True
                                fcd.ForeColor = vbBlue
                                fcd.BackColor = RGB(34, 139, 34) ' ЗЕЛЕНЫЙ
                        Else
                            Set fcd = .Add(acExpression, , "[СтатусЗаявки]='В работе' And [СостояниеЗаявки]='Просрочено'")
                                fcd.ForeColor = vbWhite
                                fcd.BackColor = RGB(255, 102, 0) ' Оранжевый былоRGB(34, 139, 34) ' ЗЕЛЕНЫЙ
                             Set fcd = .Add(acExpression, , "[СтатусЗаявки]='Закрыто'")
                                 fcd.ForeColor = vbWhite
                                 fcd.BackColor = vbRed 'КРАСНЫЙ
                             Set fcd = .Add(acExpression, , "[СтатусРодРЗ]='Закрыто'")
                                fcd.ForeColor = vbWhite
                                fcd.BackColor = RGB(34, 139, 34) ' ЗЕЛЕНЫЙ
                        End If
                End With
        End If
    Next ctrl
End With
  DoCmd.GoToControl (f.Name) '  (?)
ExitHeare:
  Set f = Nothing
 Exit Sub
ErrorHandler: ' классную штуку для отладки придумал MrShin
Debug.Assert debugging
'Resume
 err.Raise err.Number, "Bubble of Module ", err.Number, "in BubbleError of" & MistakeFunction
GoTo ExitHeare
End Sub



После этого анализировать стало значительно легче.
А что вы подразумеваете под уделять внимание структурированию?
У меня в вашем коде выдается ошибка 2450: «Приложению Microsoft Access не удается найти указанную форму фпПоискЗаявок» в строке:
Код: vbnet
1.
2.
3.
4.
Set f = Forms("фпПоискЗаявок")
...
А здесь:
Debug.Assert debugging '<= VBA жалуется при компиляции на debugging


Вы, к стати сказать, причесывая много чего еще поменяли, а кое где убрали.
---------------------
Кривцов АнатолийПодозреваю, что у вас простая форма и процедура вызывается на событие Form_Current.
Нет не угадали, код я вешаю на кнопку. Хочу сделать так, чтобы работала как выключатель - Удаляет УФ/Создает УФ.
Кривцов АнатолийПо этому условию для "НомерЗаявки" и "НомерРодРЗ" синий фонт и подчеркивание, а для остальных - белый фонт.
Верно.
Кривцов АнатолийЗЫ. А что значит "Не все условия срабатывают"?
Я имела в виду, что срабатывало только 1 правило.
Пока что сделала так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
Sub УсловноеФорматирование()
  Dim frm As Form_фПоиск
  
On Error GoTo ErrNumber
  If (CurrentProject.AllForms("фПоиск").IsLoaded = False) Then
    Exit Sub
  Else
    SetFormatConditionsForm
'    SetFormatConditionsSubForm 'приложение Access падает
  End If
ExitHeare:
  Set frm = Nothing
Exit Sub

ErrNumber:
  If Error <> 0 Then
    MsgBox "Процедура: УсловноеФорматирование." & vbCrLf & _
      Err.Description, , "№ " & Err.Number
    Resume ExitHeare
  End If
End Sub

Sub SetFormatConditionsForm()
  Dim frm As Form
  Dim i As Integer
    
On Error GoTo ErrNumber
  Set frm = Form_фпПоискЗаявок
  If frm.КодЗаявки.FormatConditions.Count > 0 Then
    For i = 0 To frm.Controls.Count - 1 'ищем комбобоксы и текстбокы среди контролов
      If (frm.Controls(i).ControlType = acComboBox) Or (frm.Controls(i).ControlType = acTextBox) Then
        With frm.Controls(i)
          .FormatConditions.Delete
        End With
      End If
    Next i
  Else
    For i = 0 To frm.Controls.Count - 1 'ищем комбобоксы и текстбокы среди контролов
      If (frm.Controls(i).ControlType = acComboBox) Or (frm.Controls(i).ControlType = acTextBox) Then
        If frm.Controls(i).Name = "КодЗаявки" Then 'красим только поле "КодЗаявки"
          frm.КодЗаявки.FormatConditions.Add acExpression, , "[КодЗаявки] = [ЦветнойУказатель]"
          frm.КодЗаявки.FormatConditions(0).BackColor = RGB(255, 153, 0) 'оранжевый
        Else 'красим все поля
          With frm.Controls(i)
            If (frm.Controls(i).Name = "НомерЗаявки") Or (frm.Controls(i).Name = "ДатаРегистрацииЗаявки") Or _
              (frm.Controls(i).Name = "СтатусЗаявки") Or (frm.Controls(i).Name = "ДатаЗакрытияЗаявки") Or _
              (frm.Controls(i).Name = "СостояниеЗаявки") Or (frm.Controls(i).Name = "КолДнПросрочкиЗаявки") Or _
              (frm.Controls(i).Name = "Инициатор") Or (frm.Controls(i).Name = "ТипОбращения") Or _
              (frm.Controls(i).Name = "ОписаниеПроблемы") Or (frm.Controls(i).Name = "КлассификацияЗаявки") Or _
              (frm.Controls(i).Name = "Ведомство") Or (frm.Controls(i).Name = "Примечание") Or _
              (frm.Controls(i).Name = "Куратор") Or (frm.Controls(i).Name = "Исполнитель") Or _
              (frm.Controls(i).Name = "ДатаЗаписиЗаявки") Or (frm.Controls(i).Name = "ДатаПоступленияДГУ") Or _
              (frm.Controls(i).Name = "РешениеДГУ") Or (frm.Controls(i).Name = "ДатаПринятияРешенияДГУ") Then
              '----------------------
              .FormatConditions.Add acExpression, , "[СтатусЗаявки]='В работе' And [СостояниеЗаявки]='Просрочено'"
              If (frm.Controls(i).Name = "НомерЗаявки") Or (frm.Controls(i).Name = "НомерРодРЗ") Then
                .FormatConditions(0).FontUnderline = True
                .FormatConditions(0).ForeColor = RGB(0, 0, 255) 'vbBlue
              Else
                .FormatConditions(0).ForeColor = RGB(255, 255, 255) 'vbWhite
              End If
              .FormatConditions(0).BackColor = RGB(255, 0, 0) 'vbRed
              '----------------------
              .FormatConditions.Add acExpression, , "[СтатусЗаявки]='Закрыто'"
              If (frm.Controls(i).Name = "НомерЗаявки") Then
                .FormatConditions(1).FontUnderline = True
                .FormatConditions(1).ForeColor = RGB(0, 0, 255) 'vbBlue
              Else
                .FormatConditions(1).ForeColor = RGB(255, 255, 255) 'vbWhite
              End If
              .FormatConditions(1).BackColor = RGB(34, 139, 34) 'vbGreen
            Else
              If (frm.Controls(i).Name = "НомерРодРЗ") Or (frm.Controls(i).Name = "ДатаСозданияРодРЗ") Or _
                  (frm.Controls(i).Name = "КлассификаторРодРЗ") Or (frm.Controls(i).Name = "СтатусРодРЗ") Or _
                  (frm.Controls(i).Name = "ДатаЗавершенияРодРЗ") Or (frm.Controls(i).Name = "СостояниеРодРЗ") Or _
                  (frm.Controls(i).Name = "КолДнПросрочкиРодРЗ") Then
                '----------------------
                .FormatConditions.Add acExpression, , "[СтатусРодРЗ]='В работе' And [СостояниеРодРЗ]='Просрочено'"
                If (frm.Controls(i).Name = "НомерРодРЗ") Then
                  .FormatConditions(0).FontUnderline = True
                  .FormatConditions(0).ForeColor = vbBlue 'RGB(0, 0, 255)
                Else
                  .FormatConditions(0).ForeColor = RGB(255, 255, 255) 'vbWhite
                End If
                .FormatConditions(0).BackColor = RGB(255, 0, 0) 'vbRed
                '----------------------
                .FormatConditions.Add acExpression, , "[СтатусРодРЗ]='Закрыто'"
                If (frm.Controls(i).Name = "НомерЗаявки") Or (frm.Controls(i).Name = "НомерРодРЗ") Then
                  .FormatConditions(1).FontUnderline = True
                  .FormatConditions(1).ForeColor = RGB(0, 0, 255) 'vbBlue
                Else
                  .FormatConditions(1).ForeColor = RGB(255, 255, 255) 'vbWhite
                End If
                .FormatConditions(1).BackColor = RGB(34, 139, 34) 'vbGreen
              End If
            End If
          End With
        End If
      End If
    Next i
  End If
  DoCmd.GoToControl (frm.Name) 'возврат указателя на форму
ExitHeare:
  Set frm = Nothing
Exit Sub

ErrNumber:
  If Error <> 0 Then
    MsgBox "Процедура: SetFormatConditionsForm." & vbCrLf & _
      Err.Description, , "№ " & Err.Number
    Resume ExitHeare
  End If
End Sub



Работает, но остался вопрос, как теперь так же реализовать это во внедренной табл.подчиненной форме. Она у меня раскрывается по плюсикам.
Сделала процедуру «SetFormatConditionsSubForm» по аналогии:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
Sub SetFormatConditionsSubForm()
  Dim frm As Form
  Dim i As Integer
    
On Error GoTo ErrNumber
  Set frm = Form_фпПоискМИЦОВИВ
  If frm.КодДопРЗ.FormatConditions.Count > 0 Then
    For i = 0 To frm.Controls.Count - 1 'ищем комбобоксы и текстбокы среди контролов
      If (frm.Controls(i).ControlType = acComboBox) Or (frm.Controls(i).ControlType = acTextBox) Then
        With frm.Controls(i)
          .FormatConditions.Delete
        End With
      End If
    Next i
  Else
    For i = 0 To frm.Controls.Count - 1 'ищем комбобоксы и текстбокы среди контролов
      If (frm.Controls(i).ControlType = acComboBox) Or (frm.Controls(i).ControlType = acTextBox) Then
        If frm.Controls(i).Name = "КодДопРЗ" Then 'красим только поле "КодДопРЗ"
          frm.КодДопРЗ.FormatConditions.Add acExpression, , "[КодДопРЗ] = [ЦветнойУказатель]"
          frm.КодДопРЗ.FormatConditions(0).BackColor = RGB(255, 153, 0) 'оранжевый
        Else 'красим все поля
          With frm.Controls(i)
            .FormatConditions.Add acExpression, , "[СтатусДопРЗ]='В работе' And [СостояниеДопРЗ]='Просрочено'"
            If (frm.Controls(i).Name = "НомерДопРЗ") Then
              .FormatConditions(0).FontUnderline = True
              .FormatConditions(0).ForeColor = RGB(0, 0, 255) 'vbBlue
            Else
              .FormatConditions(0).ForeColor = RGB(255, 255, 255) 'vbWhite
            End If
            .FormatConditions(0).BackColor = RGB(255, 0, 0) 'vbRed
            '----------------------
            .FormatConditions.Add acExpression, , "[СтатусДопРЗ]='Закрыто'"
            If (frm.Controls(i).Name = "НомерДопРЗ") Then
              .FormatConditions(1).FontUnderline = True
              .FormatConditions(1).ForeColor = RGB(0, 0, 255) 'vbBlue
            Else
              .FormatConditions(1).ForeColor = RGB(255, 255, 255) 'vbWhite
            End If
            .FormatConditions(1).BackColor = RGB(34, 139, 34) 'vbGreen
          End With
        End If
      End If
    Next i
  End If
ExitHeare:
  Set frm = Nothing
Exit Sub

ErrNumber:
  If Error <> 0 Then
    MsgBox "Процедура: SetFormatConditionsSubForm." & vbCrLf & _
      Err.Description, , "№ " & Err.Number
    Resume ExitHeare
  End If
End Sub



- удаляет УФ, только тогда, когда на ее главной форме все плюсы раскрыты т.е.в состоянии "SubdatasheetExpanded = True", а вот когда пытается создавать УФ, Access стал падать. Почему??? В чем причина?

Если надо, могу скинуть свой пример.
...
Рейтинг: 0 / 0
03.10.2018, 20:50
    #39712676
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условное форматирование.
nataxa23код я вешаю на кнопку. Хочу сделать так, чтобы работала как выключатель
Может быть, имеет смысл заменить кнопку на какой-либо radiobutton, чтобы пользователь явно видел, в каком состоянии этот включатель/выключатель?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Условное форматирование. / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]