How do I lock a table cell in Word?

K

Kathryn Pundt

I am creating a template in Word using tables. I want to lock certain cells
so no one can alter the contents.
 
A

alborg

Hi Kathryn:

Ok- this should do it for you...

1. Manual Method-

- right click on the textbox
- select Properties
- uncheck "Fill-in enabled"

2. Programmatic Method-
(in this example, you add 2 fields, each into a cell in your table, but
disabling the second field)

Dim rownum As Integer, i As Integer
response = MsgBox("Add new row?", vbQuestion + vbYesNo)
If response = vbYes Then
ActiveDocument.Unprotect
ActiveDocument.Tables(1).Rows.Add
rownum = ActiveDocument.Tables(1).Rows.Count

For i = 1 To ActiveDocument.Tables(1).Columns.Count
ActiveDocument.FormFields.Add Range:=ActiveDocument.Tables(1).Cell(rownum,
i).Range, Type:=wdFieldFormTextInput
Next i
ActiveDocument.Tables(1).Cell(ActiveDocument.Tables(1).Rows.Count,
ActiveDocument.Tables(1).Columns.Count - 1).Range.FormFields(1).EntryMacro =
"addinfo"
ActiveDocument.Tables(1).Cell(ActiveDocument.Tables(1).Rows.Count,
ActiveDocument.Tables(1).Columns.Count).Range.FormFields(1).ExitMacro =
"addrow"
ActiveDocument.Tables(1).Cell(ActiveDocument.Tables(1).Rows.Count,
ActiveDocument.Tables(1).Columns.Count).Range.FormFields(1).Enabled = False
'ActiveDocument.Tables(1).Cell(ActiveDocument.Tables(1).Rows.Count,
1).Range.FormFields(1).Select
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
End If

Cheers,
Al
 
K

Kathryn Pundt

Tables (not textbox) doesn't appear to have the capability.
I am using Word 2003 (11....)
 
A

alborg

I know- that's the whole point of locking the document, thus forcing the use
of textboxes. If you place a textbox inside a cell, you can lock THAT as
depicted!

Cheers,
Al
 
K

Kathryn Pundt

I'm am not sure I understand. This is what I understand you are trying to
convey.

Create a table. Insert textboxes into the table? Then, lock the texbox?
 
A

alborg

Hi Kathryn:

Yup... that's it. You gotta "lock" (i.e. disable) the textbox controls, not
the table.

BTW, the idea on how to programmatically add new rows with textboxes was
obtained from one of the most popular threads (check Show-> Helpful threads)
with the title "Subject: Re: How to insert multiple rows in tables". It
really is cool. The way I did it is the slightly improved version that works
in Word 2000/2002/2003 since the textbox "name" method didn't work in the MS
Word 2000 due to a Word bug.

Cheers,
AL
 
K

Kathryn Pundt

Okay, I'll let you know how it goes.

As for the "how to programmatically add new rows with textboxes "
instructions, I don't know how to use user-programming. But, am very willing
to learn if you have the time...
 
A

alborg

Hi Kathryn:

Ok... here goes...

1. Place table on your template. For this example, place a 2 row, 2 column
template.
2. Click on View→ Toolbars→ check on the “Forms†toolbar
3. Click on the “ab†icon repeatedly to add in a Text Form Field inside each
of the 4 table cells. Leave the right sided padlock in the “unlocked†or flat
position.
4. Click on View-> Toolbars-> check on the "Visual Basic" toolbar
5. Now click on the Visual Basic icon to go to the VB environment.
6. Once there, click on Tools-> References and make sure that you have some
of the ones you'll most likely need (to avoid errors)-

• Visual Basic for Applications
• Microsoft Word 11.0 Object Library
• OLE Automation
• Microsoft Office 11.0 Object Library
• Microsoft DAO 3.6 Object Library
• Microsoft Visual Basic for Applications Extensibility 5.3

Some other ones that I occasionally use depending on what I"m programming-

• Microsoft ActiveX Data Objects 2.8 Library
• Microsoft Jet and Replication Objects 2.6 Library
• Microsoft Calendar Control 11.0
• Microsoft Forms 2.0 Object Library

(Depending on your Word version, the version number could change, s.a.
Microsoft Office 9.0 for Word 2000)
7. Now click on View→ Project Explorer
8. Right click on your project name, then select Insert→ Module
9. Rename the module “AutoMacros†and add the following Sub routines-

Sub addrow()
Dim rownum As Integer, i As Integer
response = MsgBox("Add new row?", vbQuestion + vbYesNo)
If response = vbYes Then
ActiveDocument.Unprotect
ActiveDocument.Tables(1).Rows.Add
rownum = ActiveDocument.Tables(1).Rows.Count
For i = 1 To ActiveDocument.Tables(1).Columns.Count
ActiveDocument.FormFields.Add Range:=ActiveDocument.Tables(1).Cell(rownum,
i).Range, Type:=wdFieldFormTextInput
Next i
ActiveDocument.Tables(1).Cell(ActiveDocument.Tables(1).Rows.Count,
ActiveDocument.Tables(1).Columns.Count - 1).Range.FormFields(1).EntryMacro =
"addinfo"
ActiveDocument.Tables(1).Cell(ActiveDocument.Tables(1).Rows.Count,
ActiveDocument.Tables(1).Columns.Count).Range.FormFields(1).ExitMacro =
"addrow"
'ActiveDocument.Tables(1).Cell(ActiveDocument.Tables(1).Rows.Count,
1).Range.FormFields(1).Select
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
End If
End Sub

10. Save your work.
11. Now get out of the Visual Basic platform and go back to your table.
Right click on both of the RIGHT sided Text Form Fields, then Properties→
“Run macro onâ€â†’ then in the “Exit†combobox choose your new subroutine
(“addrowâ€).

Finished! Now lock your form (i.e. click on/indent the padlock) and try
landing, then exiting on one of the activated fields. Should work. Cool huh?
That’s programming…

Cheers,
Al
 
A

alborg

Hi Kathryn:

One error-

THIS: "Place table on your template. For this example, place a 2 row, 2
column
template."
SHOULD READ AS: "Place table on your template. For this example, place a 2
row, 2 column
."

ALSO: I forgot to add the enabled line-

"ActiveDocument.Tables(1).Columns.Count).Range.FormFields(1).Enabled = False"

What you can do is to disable the prior row's FormFields-

"ActiveDocument.Tables(1).Cell(ActiveDocument.Tables(1).Rows.Count-1,
ActiveDocument.Tables(1).Columns.Count).Range.FormFields(1).Enabled = False"

[note the ...Rows.Count-1...]

Cheers,
Al
 
C

Cindy M.

Hi =?Utf-8?B?S2F0aHJ5biBQdW5kdA==?=,
Word 2003 (11...)
Word 2003 offers you the option of locking certain parts of the document, leaving
others open for editing. The advantage of this approach over form fields (the other
suggestion you're struggling with) is that the user can still use most formatting
and other editing commands.

When you do Tools/Protect Document you'll see the choice "No changes (Read only)"
in the second part of the Protection task pane. You select the parts of the
document you want to leave free, then click "Everyone" in the third section of the
task pane.

Cindy Meister
INTER-Solutions, Switzerland
http://homepage.swissonline.ch/cindymeister (last update Jun 17 2005)
http://www.word.mvps.org

This reply is posted in the Newsgroup; please post any follow question or reply in
the newsgroup and not by e-mail :)
 
S

Suzanne S. Barnhill

Cindy has already told you how to use the controls in Word 2003. Note that
the result will be that the entire document will be locked in previous
versions, so if any of the users are using Wor 2002 or earlier, this may not
be satisfactory. If you want to pursue the idea of using form fields, see
the forms tutorials linked from
http://word.mvps.org/FAQs/Customization/FillinTheBlanks.htm, which will
explain how to use form fields (which are not ordinary text boxes but text
form fields).
 

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