Dim aStory As Range
Dim aField As Field
For Each aStory In ActiveDocument.StoryRanges
For Each aField In aStory.Fields
aField.Update
Next aField
Next aStory
(By the way, despite what our friends at Microsoft say,
it doesn't update ALL fields, it misses out any that are
in the headers & footers but that's a different story.
bStory, perhaps? I have a workaround for that little
problem that *does* work, if anyone is interested)
I can do Select All + F9 to update it. That's OK.
But if I record a macro that does Select All + F9, it
works while I'm recording the macro, but if I play it
back then macro stops working.
The recorded macro looks like this:
Selection.WholeStory
Selection.Fields.Update
Have I accidentally done something bad in Options? I am
forcing the setting for "Update fields when Printing" to
be true in the main macro (that's my workaround for
updating fields in the header)
I'd be very grateful for any insight into this. I need to
release this template and macro set for a group it's just
too flaky to inflict on innoncent people.
Try this one:
Sub UpdateAllTOC()
Dim oTOC As TableOfContents
For Each oTOC In ActiveDocument.TablesOfContents
oTOC.Update
Next oTOC
End Sub
or for all fields
Sub Update()
Dim oField As Field
Dim oSection As Section
Dim oHeader As HeaderFooter
Dim oFooter As HeaderFooter
Dim oTOC As TableOfContents
For Each oTOC In ActiveDocument.TablesOfContents
oTOC.Update
Next oTOC
For Each oSection In ActiveDocument.Sections
For Each oHeader In oSection.Headers
If oHeader.Exists Then
For Each oField In oHeader.Range.Fields
oField.Update
Next oField
End If
Next oHeader
For Each oFooter In oSection.Footers
If oFooter.Exists Then
For Each oField In oFooter.Range.Fields
oField.Update
Next oField
End If
Next oFooter
Next oSection
End Sub
For general use, I tend to use:
Sub UpdateAllFields()
Dim oStory As Range
For Each oStory In ActiveDocument.StoryRanges
oStory.Fields.Update
If oStory.StoryType <> wdMainTextStory Then
While Not (oStory.NextStoryRange Is Nothing)
Set oStory = oStory.NextStoryRange
oStory.Fields.Update
Wend
End If
Next oStory
Set oStory = Nothing
End Sub
which is listed as an example on my web site at
http://www.gmayor.com/installing_macro.htm and should also work with TOC.
--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP
My web site www.gmayor.com
Word MVP web site http://word.mvps.org
>.
>
>Sub UpdateAllTOC()
>Sub Update()
But this one doesn't:
>Sub UpdateAllFields()
I'm using Word 2002, SP-2. Thanks again, at least I know
I haven't gone mad.
-- Kathleen
>.
>
FWIW, I've found the same problem. That is, in a macro that goes through the
StoryRanges as your UpdateAllFields() does, for some reason TOC fields don't
update. So I tend to tack on the equivalent of your UpdateAllTOC(). I've
seen this in Word 2000 and 2002, but I've never been able to reproduce it on
demand :-(
Shauna
Shauna Kelly. Microsoft MVP.
http://www.shaunakelly.com/word
"Graham Mayor" <gma...@DELETECAPSmvps.org> wrote in message
news:eMt5xolZ...@TK2MSFTNGP10.phx.gbl...
Now in Word 2002, the StoryRanges macro fails to update
the TOC as well. I had two different users test it with
the same results, i.e., the StoryRanges macro fails to
update the TOC every time. My test document was the
world's simplest document: I launched Word using
winword.exe /a, created a brand new Normal.dot, did
absolutely no formatting changes and used all default
headings. I'm just a technical author, but it looks like
a bug to me. If it's not, I'd be very interested in
knowing what I've done to cause it to fail.
I'm grateful to Graham for providing the alternative
macros.
-- Regards,
Kathleen
>.
>
However, if you reference the table of contents as a Field object, you
only have access to the Update method. This means that the coders at
Microsoft had to choose: should the Update method of the Field class
(as well as the Fields collection) update the entire TOC or only the
page numbers? Apparently, they chose the latter.
Two (simple) examples:
Example 1. To update all fields in the main body of the current
document, you can use this code:
ActiveDocument.Fields.Update 'updates all fields
'in main body of document;
'only page numbers updated
'for TOC fields
Example 2. To update all table of contents in the main body of the
current document, you could use something like this:
For Each toc In ActiveDocument.TablesOfContents
toc.Update 'Update entire TOC
Next toc
--
Stefan Blom
"Kathleen" <anon...@discussions.microsoft.com> wrote in message
news:2998e01c465a4$8e7041e0$a501...@phx.gbl...