Il codice che proponi non è sbagliato in assoluto, certo continene errori strani, e sicuramente non è ottimizzato nel Confronto, visto che la Proprietà TAG quando la riconosci non necessita di essere confrontata anche per gli altri valori, scriverei una cosa simile
Dim ctrl As Access.control
For Each ctrl In Form_SM_Specifiche.Controls
With ctrl
If .Tag = "Campo1" Then
.BackColor = vbRed
ElseIf .Tag = "Campo2" Then
.BackColor = VbBlue
End If
End With
Next
Set ctrl = Nothing
Io preferisco usare il Select Case:
Dim ctrl As Access.Control
For Each ctrl In Form_SM_Specifiche.Controls
With ctrl
Select Case .Tag
Case "Campo1": .BackColor = vbRed
Case "Campo2": .BackColor = vbBlue
Case Else: .BackCoolor = vbWhite
End Select
End With
Next
Set ctrl = Nothing
Next
Set ctrl = Nothing[/code]