Macro to update ToC in a form - I'm stuck!

L

La La Lara

Hi guys

I am a bit stuck. I have a form which has a ToC in it. I have used the
code at
http://word.mvps.org/FAQs/MacrosVBA/TurnFmFlfResetOff.htm.
which works fine to uprotect the doc, then I can manually left-click by the
ToC, hit F9 and it updates, then the macro will reprotect the form without
losing any of the info in the form fields. It works a treat.

BUT....! It would be even more seamless to the user if I could add a bit of
VB code that will unlock the form, *automatically update the fields*, then
reprotect the form without losing any of the form field info (so that the
user can simply click an icon on the toolbar which will do all this instead
if him/her having to go to the ToC and cliking F9)

I did try to cobble together some code but it wouldn't work.

Can anyone help?
 
C

Charles Kenyon

I haven't tested the following with a TOC field but it should work.

Sub TOCFieldUpdate()
' Written by Charles Kyle Kenyon 27 January 2005
' Field Updater - TOC fields
Dim oField As Field
On Error Resume Next
For Each oField In ActiveDocument.Fields
If oField.Type = wdFieldTOC Then
oField.Update
End If
Next oField
End Sub

Try putting this in your module and calling it from your unprotect /
reprotect procedure or simply add the code to your procedure. Hope this
helps.
 
L

La La Lara

Thanks Charles.

I have now got the following in the "Microsoft Word Objects" part of the VB
window, under "This document":

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 TOCFieldUpdate()
' Written by Charles Kyle Kenyon 27 January 2005
' Field Updater - TOC fields
Dim oField As Field
On Error Resume Next
For Each oField In ActiveDocument.Fields
If oField.Type = wdFieldTOC Then
oField.Update
End If
Next oField
End Sub



Sub ProtectForm()
If ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then
ActiveDocument.Unprotect
Else
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, noreset:=True
End If
End Sub


But it doesn't work, as when I run the macro it only runs the first
"section" of it, i.e.
ToolsProtectUnprotectDocument.

I really don't know much about VB code, so I am confused as to how to get
the macro to go though all the 3 sections of the code above. Am I making any
sense???!!!
 
C

Charles Kenyon

Try

Sub TOCUpdateMaster()
ToolsProtectUnprotectDocument
TOCFieldUpdate
ProtectForm
End Sub
 
G

gruntledlark

Charles, any way to get this to update the entire table and not just
page numbers only?
Thanks.
 
C

Charles Kenyon

I didn't know that it only did the page numbers. I would suggest creating a
document with a TOC. Make some changes that would add lines.

Record two macros, one updating the TOC with only page numbers being
updated. The second with the entire table being updated. Then look at the
code produced and see if you can discern a difference. That is what I would
do, but since it is your problem, I'll leave it for you to do. Please report
back the results.
 

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