-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


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

Вторник, 02 Октября 2018 г. 19:35 + в цитатник
Пытаюсь разобраться с условным форматированием через VBA.
Помогите с кодом, не пойму что я упускаю?
+ Не все условия срабатывают в коде

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 бит.

    Спасибо каждому, кто мне когда-либо здесь помог и продолжает помогать.
  • http://www.sql.ru/forum/1303373/uslovnoe-formatirovanie


     

    Добавить комментарий:
    Текст комментария: смайлики

    Проверка орфографии: (найти ошибки)

    Прикрепить картинку:

     Переводить URL в ссылку
     Подписаться на комментарии
     Подписать картинку