How to change the behaviour of Word's document protection, so users’ formfields don't get reset when they unprotect and reprotect
Article contributed by Ibby and Geoff Whitfield
One of the biggest source of complaints from users about Word's forms protection feature (accessed from Tools + Protect or Unprotect document) is that when you unprotect and reprotect a form, all the form fields are reset and the data is lost.
This is a double-bind because of the fact that so many Word features are pointlessly disabled, even when only a part of a document is protected for forms. For more details, see: How to enable the spellchecker in a protected document. Because of the second problem, users frequently do want to unprotect and reprotect documents, which leaves them with the form fields resetting problem.
Note that in Word 2002 (Office XP), the problem does not arise if you
reprotect the document using the “Protect
Form” button of the Forms
toolbar:
The form fields only get reset in Word 2002 if you use the menu. But in Word 97 and 2000, the form fields are reset whichever you use.
You can fix this by intercepting the built-in ToolsProtectUnprotectDocument and ProtectForm commands. Just paste the following code into an Addin. (Or you can paste it into a template, but if you use an addin, the problem will be fixed regardless of which template is in use.) Remove the horizontal line separating the two Subs, below, after pasting the code in. If your Addin is only for Word 2002, you won't require the ProtectForm macro, but will still require the ToolsProtectUnprotectDocument one.
Sub
ToolsProtectUnprotectDocument()
Dim oDoc As Document
Set oDoc = ActiveDocument
On Error GoTo ErrMess
If oDoc.ProtectionType = wdNoProtection
Then
With
Dialogs(wdDialogToolsProtectDocument)
.noreset =
True
.Show
End With
Else
oDoc.Unprotect
End If
Exit Sub
ErrMess:
MsgBox Err.Description, vbInformation
End Sub
Sub ProtectForm()
If
ActiveDocument.ProtectionType = wdAllowOnlyFormFields
Then
ActiveDocument.Unprotect
Else
ActiveDocument.Protect
Type:=wdAllowOnlyFormFields, noreset:=True
End If
End Sub
Note: If you do occasionally want the formfields to reset, you can just select Edit + Select All (or press Ctrl+A), while the document is unprotected, and press F9 (Update Fields).
Or in Word 2002, there is an additional button on the Forms toolbar to reset the form fields (while protection is switched off), without updating any other fields – an eraser. You could, if you wanted to, create a similar button for Word 97/2000 and assign it to the following macro:
Sub
ResetFmFlds()
Dim FmFld As FormField
If ActiveDocument.ProtectionType = wdNoProtection Then
For Each
FmFld In ActiveDocument.FormFields
FmFld.Range.Fields(1).Update
Next
FmFld
End If
End Sub
Also note that if the user updates the fields (by Selecting All and pressing F9) in an unprotected document then the form fields will get reset; this is by design. And therefore the form fields will also get reset if the user prints an unprotected document, and if “Update fields” is checked under Tools + Options + Print.
This behaviour is by design on the basis that only a forms designer ought to be updating the fields of, or printing, an unprotected document containing form fields; and for a forms designer, the ability to reset the form fields by updating them is sometimes very useful.
However, if you wanted to change this behaviour, you could either intercept the UpdateFields command or the FilePrint and FilePrintDefault commands.