The .Tag Property, not to be confused with Smart Tags, of a Control is probably the most under used and confusing Property of all. So what do you do with it? Here’s some examples…
1. Use it to Lock bound Controls…
Dim ctl As Control Dim frm As Form For Each ctl In frm.Controls If ctl.Tag = "LockMe" then ctl.Locked = True End If Next ctl
Then any Control that has LockMe as a Tag will be locked.
You want to put it in a Module and call it in the After_Update of the control but you should also consider a way to unlock in case corrections have to be made.
2. Use it to validate that data has been entered in a specified field…
Public Function frmValidateData() As Boolean
On Error GoTo ErrHandler
Dim ctl As Control
Dim blnValid As Boolean
Dim frm As Form
Set frm = Screen.ActiveForm
blnValid = True
For Each ctl In frm.Controls 'Only use if no subform involved
If ctl.Tag <> "" Then
If ctl.Enabled Then
If InStr(1, ctl.Tag, "require") Then
If Nz(ctl, "") = "" Then
blnValid = False
MsgBox (ctl.Name & " cannot be empty.")
ctl.SetFocus
GoTo Complete
End If
End If
End If
End If
Next ctl
Complete:
Set ctl = Nothing
frmValidateData = blnValid
Exit Function
ErrHandler:
blnValid = False
MsgBox ("Error validating: " & Err.Description)
Resume Complete
End Function

3. Use it to Lock a Field after it’s been edited…
Posted by Ken Sheridan in the Microsoft Answers Forum in this thread Lock Field after Edit?
A variation on Gina’s solution would be to put the following in the form’s Current event procedure:
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.Tag = "LockMe" then
ctl.Locked = Not Me.NewRecord
End If
Next ctl
When you navigate to an empty new record the tagged controls will be unlocked so data can be entered, but when you navigate to a previously entered record they’ll be locked. If you did want to add an ‘Enable Edits’ button to the form so that existing records can be edited the code for the button’s Click event procedure would be:
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.Tag = "LockMe" then
ctl.Locked = False
End If
Next ctl
4. Use it to Call a Module…
Posted by Doug Steele in the Microsoft Answers Forum in this thread Use Tag Property of Control to Call Module
One approach would be do create a function in the form’s module along the lines of:
Function HandleClickEvent()
Select Case ActiveControl.Tag
Case "DoThis"
Call MyModule
Call "Do That"
Call MyOtherModule
Case Else
' Do nothing
End Select
End Function
Now, you can set the On Click property of each of the 4 buttons to =HandleClickEvent(), rather than [Event Procedure]. Note that for this to work, it must be a function (not a sub), and you must include the equal sign and parentheses.
5. Use it to Lock (and color) specific fields on a Continuous Form. In this case I only wanted to Lock the ones that had data in them. So first, under Conditional Formatting…

I prefer to use Cream to indicate the field is Locked but you can select any color OR any other formatting style you like. Then add *LockMe* (no asterisks) to the the Tag Property in the Controls Property window. And finally, add the below to the On_Current event of my Continuous Form…
For Each ctl In Me.Controls
If ctl.Tag = "LockMe" And ctl.Value <> "" Then
ctl.Locked = True
End If
Next ctl
All Done! Now, only the Controls that have data (and any other formatting you have applied) will be Locked which will also apply once data is entered into them. Immediately apply Undo and your User can *Unlock* the record… This is a biggie, so you might want to make a way for your User to either Undo or Edit the record should they decide at a later date to do so!
![]()

Access MVP (2010-2015)