Вы устанавливаете формат по умолчанию для элемента управления. Каждая копия элемента управления в непрерывной форме использует этот формат. Для форматирования по условию (fldName = Me.FieldModified.value
) вам нужно Условное форматирование , как сказал вам Андре, или использовать событие рисования подробных разделов (см. Обновление внизу)
В мастере условного формата вы можете создать условие с Expression Is
и [Converted].Name = [FieldModified]
для каждого элемента управления формы, который должен быть выделен, если его имя соответствует FiledModified
. В выражениях Ms Access нельзя использовать Me
, просто опустите его.
Вы можете использовать VBA для форматирования всех элементов управления с помощью FormatConditions по коду. Если вы хотите изменить существующее условие, используйте .Modify
вместо .Add
Private Sub Form_Load()
Dim ctl As Access.Control
For Each ctl In Me.Controls ' loop through all controls of form
On Error Resume Next ' Not all controls can have conditional format (e.g. labels). To save the check of control type, we ignore errors here
ctl.FormatConditions.Add(acExpression, , ctl.Name & ".Name=[FieldModified]").BackColor = vbRed 'add o format condition to control if possible, else an error is raised but ignored
If Err.Number Then 'show errors
Debug.Print "Error: " & Err.Number & " - " & Err.description & " in Control: " & ctl.Name & " Type is " & TypeName(ctl)
Err.Clear 'reset error to catch next
Else
Debug.Print "FormatCondition added to Control: " & ctl.Name & " Type is " & TypeName(ctl)
End If
Next ctl
On Error GoTo 0 ' turn on errors again, maybe add an error handler (On Error Goto MyErrHandler)
End Sub
Обновление:
Вы можете использовать событие Details_Paint
формы, чтобы отформатировать один и тот же элемент управления для каждой записи. Это включает условный формат для элементов управления без свойства FormatConditions
, таких как метки, кнопки.
Private Sub Detail_Paint()
Dim c As Access.Control
For Each c In Me.Detail.Controls
If c.Name = Me.FieldModified.Value Then
c.ForeColor = vbRed
Else
c.ForeColor = vbBlack
End If
Next
End Sub