How do I prevent users making "on-screen" changes to read-onlydocuments?

C

Chrisso

Hi All

I have an Access DB that allows users to search and open Word
documents.

The users are not allowed to change the Word documents. I have
achieved this by setting a WritePassword and by opening the Word files
from the DB in read-only mode .

This is fine as it means the user cannot save any "on-screen" changes
they make make.

However, my problem is a user can still make "on-screen" changes to
the read-only Word file, print the Word file and then close it down
without saving.

This could result in a user walking around with an incorrect,
unauthorised version of our documents which could cause real
problems.

I would like to be able to configure the Word document to prevent the
user making any "on-screen" changes at all. That is, as soon as the
user attempts to change text, formatting or headers/footers Word would
prevent this from happening.

I can do this in Excel (with sheet protection) but I cannot see how to
achieve this in Word.

Any ideas or suggestions. Thanks in advance for any,

Chrisso
 
J

Jean-Guy Marcil

Chrisso said:
Hi All

I have an Access DB that allows users to search and open Word
documents.

The users are not allowed to change the Word documents. I have
achieved this by setting a WritePassword and by opening the Word files
from the DB in read-only mode .

This is fine as it means the user cannot save any "on-screen" changes
they make make.

However, my problem is a user can still make "on-screen" changes to
the read-only Word file, print the Word file and then close it down
without saving.

This could result in a user walking around with an incorrect,
unauthorised version of our documents which could cause real
problems.

I would like to be able to configure the Word document to prevent the
user making any "on-screen" changes at all. That is, as soon as the
user attempts to change text, formatting or headers/footers Word would
prevent this from happening.

I can do this in Excel (with sheet protection) but I cannot see how to
achieve this in Word.

Any ideas or suggestions. Thanks in advance for any,

You could protect the document for formfields. If you do not have any
formfields in the document, the document cannot be edited.

However, any determined user can get around that easily.

You could try macro shenanigans to prevent editing, but all a user has to do
is set his security to maximum and all macros will be deactivated.

Word was not designed for document security.

You may want to convert those sensitive document to PDF files. Acrobat
offers a more robust security, which can prevent copy/paste, printing, etc.
 
C

Chrisso

Hi Jean-Guy

Thanks for your thoughts. I am not worried about stopping determined
users - I understand that Word can not provide steel-plated
protection.

However I am very surprised to hear that I cannot stop a user from
attempting to make changes.

I would be interested to know how you would achieve my goal with
macros (even though this can be bypassed easily as well) as I cannot
see a relevant event such as document change.

In fact the events for Word seem very limited compared to Excel (where
my experience lies).

Pseudo code or just pointers for events would be awesome.

Chrisso
 
C

Chrisso

Hi Jean-Guy

I read your reply more throughly and I realise now that I can use the
"protect form fields" option you suggested.

Our Word files have very few form fields and if I could work how to
convert these to text then I would have acheived my goal. Otherwise at
least all the text that is not form fields will be protected from
changes.

Do you have any experience of converting form fields to the current
value chosen?

Thanks,
Chris
 
C

Chrisso

For anyone following this thread here is my code for converting form
fields of type drop down to their text values:

Sub Form_Fields_To_Text_Converter()
' walk over each form field and convert to its value:
Dim fld As FormField, sFormFieldValue As String
For Each fld In ActiveDocument.FormFields
If fld.Type = wdFieldFormDropDown Then
' this form field is a drop-down:
Debug.Print " * converting " & fld.Name & ": " &
fld.DropDown.ListEntries(fld.DropDown.Value).Name
sFormFieldValue =
fld.DropDown.ListEntries(fld.DropDown.Value).Name
fld.Range.Select
Selection.Delete
Selection.Text = sFormFieldValue
End If
Next fld
End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top