#error-handling #frontend #conditional-formatting #ms-access-2016
#обработка ошибок #интерфейс #условное форматирование #ms-access-2016
Вопрос:
Ну, это продолжение другой темы.
У меня есть Person
таблица с несколькими полями
Таблица представляется пользователю 3 различными способами:
3) в виде отчета (без рисунка, но похож на таблицу данных)
В форму добавляется специальный тег §Person§
, чтобы выбрать основную прикрепленную таблицу
Кроме того, существует запрос, возвращающий ошибки и их правила форматирования для каждого field
в заданном table
вот фрагмент кода, который я бы использовал для определения правил conditionalformattingrules для каждой формы, отчета, таблицы данных при их загрузке.
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] = """ amp; TableName amp; """);"
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" amp; ErrRst.item("Sfondo").value)
' .FontBold = fcdSource.FontBold
' .FontItalic = fcdSource.FontItalic
' .FontUnderline = fcdSource.FontUnderline
.ForeColor = Eval("RGB" amp; ErrRst.item("pen").value)
End With
End If
fine: On Error GoTo 0
' Next x
.MoveNext
Loop
End With
End If
End Sub
*** Ну, это выглядит безумно, но моя проблема заключается в том, как получить доступ к formfield, или reportcolumn, или к столбцу таблицы by name
.
Кроме того, я хотел бы иметь только одну функцию для управления всеми тремя параметрами: формой, отчетом и таблицей данных.
Кто-нибудь может помочь? ТИА Паоло
Комментарии:
1. Хорошие примеры экрана, очищены. Пожалуйста, экспортируйте [Q Errori для каждой таблицы] в формате XML (или CSV), который затем можно легко импортировать, и приложите это к этому вопросу. Тогда наше тестирование может дублировать проблему (проблемы).
2. Слишком просто. Результатом является объект, следовательно, его необходимо УСТАНОВИТЬ :: Set FormCtl = AForm.Controls(«CAP»)