Как установить условное форматирование для форм, отчетов и таблицы данных с использованием VBA - PullRequest
0 голосов
/ 17 апреля 2019

Ну, это продолжение в другой ветке.

У меня есть Person таблица с несколькими полями

Таблица представлена ​​пользователю тремя различными способами:

1) в виде таблицы данных enter image description here

2) в виде таблицы enter image description here

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

В форму добавлен специальный тег §Person§, для выбора основной прикрепленной таблицы

Также существует запрос, возвращающий ошибки и правила их форматирования для каждого field в заданном table enter image description here

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

    Private Sub Form_Open(Cancel As Integer)
      Call validazione.validate(Form)
    End Sub

    Function validate(aForm As Form)
      Call DeleteFormats(aForm)       ' to remove existing formats
      Call setFormats(aForm)          ' to insert the new formats
    End Function

Подставка setFormat имеет следующий вид:

     Sub setFormats(aForm As Form)
      Dim TableName As String, t() As String, ErrSQL As String, ctlName As String
      Dim ErrRst As DAO.Recordset, FormCtl As Control, ctl As Variant
      Dim frmtCount As Integer, Cnt As Integer
      Dim fcdSource As FormatCondition, fcdDestination As FormatCondition
      Dim varOperator As Variant, varType As Variant, x As Variant, y As Variant
      Dim varExpression1 As Variant, varExpression2 As Variant
      Dim intConditionCount As Integer, intCount As Integer

      If Len(aForm.Tag) > 0 And Mid$(aForm.Tag, 1, 1) = "§" Then
        t = Split(aForm.Tag, "§", 1)
        If Len(t(0)) > 0 Then TableName = t(0)
        TableName = Replace(TableName, "§", "")

        ErrSQL = "SELECT * FROM [Q Errori per tabella] WHERE ([TableName] = """ & TableName & """);"
        Set ErrRst = CurrentDb.OpenRecordset(ErrSQL, , dbReadOnly)

        If ErrRst.EOF Then Exit Sub

    ' ***IT RUNS UNTIL HERE***

          FormCtl = aForm.Controls("CAP")
          y = aForm.Properties(ctlName).Item("Codice Fiscale")


        With ErrRst
            .MoveFirst
            Do Until .EOF
              x = ErrRst.Fields("FieldName")
              Debug.Print x

             ' On Error GoTo fine
              FormCtl = aForm.Controls("CAP")
              FormCtl = aForm.

              On Error GoTo 0
              If FormCtl.ControlType = acTextBox Or FormCtl.ControlType = acComboBox Then
              ' Add the FormatCondition
              Cnt = FormCtl.FormatConditions + 1
              FormCtl.FormatConditions.Add acExpression, , .Fields.Item(Cnt).Value

            ' Reference the FormatCondition to apply formatting.
            ' Note: The FormatCondition cannot be referenced
            ' in this manner until it exists.
              Set fcdDestination = ctl.FormatConditions.Item(Cnt).Value

              With FormCtl.FormatConditions.Item(Cnt)
                  .BackColor = Eval("RGB" & ErrRst.item("Sfondo").value)
        '         .FontBold = fcdSource.FontBold
        '         .FontItalic = fcdSource.FontItalic
        '         .FontUnderline = fcdSource.FontUnderline
                  .ForeColor = Eval("RGB" & ErrRst.item("pen").value)
              End With
            End If
    fine: On Error GoTo 0
        '  Next x
         .MoveNext
       Loop
      End With
     End If
    End Sub

*** Ну, это выглядит странно, но моя проблема в том, как получить доступ к полю формы, или столбцу отчета, или столбцу таблицы данных by name.

Кроме того, мне бы хотелось иметь только одну функцию для управления всеми тремя опциями: Форма, Отчет и Таблица данных.


Кто-нибудь может помочь? ТИА Paolo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...