plantj has a good idea with using DocProperty. A possible solution to his problem with users typing over the field is to embed the field code in a form field. That way the Ctrl-A-F9 will always revert the form field to its original value, that is, the value of the field code inside it. Users can type whatever they want into the form field, it will look differently, but a refresh will bring back your value. Of course if they deliberately edit the form field itself....you could always do continous section breaks, locking the forms etc. etc.
The following will insert a form field, with the DocProperty value, anywhere you want, as many times as you want.
Sub MakeFieldInForm()
' make a form field and insert a field code
'
Selection.FormFields.Add Range:=Selection.Range, Type:= _
wdFieldFormTextInput
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
With Selection.FormFields(1)
.Name = "Text1" ' or whatever you like
.Enabled = False
With .TextInput
' insert a field code into text value of form field
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
PreserveFormatting:=False
Selection.TypeText Text:="DocProperty""MyField"""
' MyField could be a string variable
' selected from a user form listing all
' of your custom docproperties
End With
End With
End Sub