View Single Post
  #9  
Old July 12th, 2004, 08:37 AM
Kathleen
external usenet poster
 
Posts: n/a
Default Can't update TOC programmatically (but it worked yesterday)

I use TOCs and fields extensively in shared group
templates. It is really important to me that the users
have a reliable and easy way of updating _all_ fields in
a document, not just the TOC. It surprises me that you
find the results inconsistent, because in Word 2000 the
StoryRanges macro has *always* failed to update fields in
the headers for all users of the templates (but perhaps
it's because I was bringing templates forward from Word
97?).

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


-----Original Message-----
I haven't been able to reproduce it on demand either

which is why I have
stuck with that code. I don't do much work personally

with T'sOC and for the
little I do, it is no big deal to use F9

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org




Shauna Kelly wrote:
Hi Graham

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" wrote in

message
...
Fields in different parts of the document structure

can be difficult
to address, hence the alternative suggestions.

--

Graham Mayor - Word MVP

My web site www.gmayor.com
Word MVP web site http://word.mvps.org




Kathleen wrote:
Graham,
Interesting results. These two work perfectly:

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


-----Original Message-----
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




Kathleen wrote:
This is a strange one. I took the standard macro

that
updates all fields in the doc from the Microsoft

website.
Yesterday it worked. Today it doesn't. Any ideas

what I
might have done to the doc to break it? (I can

still
manually update the TOC).

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)


.



.