September 19, 2006
MS Word - VBA - StoryRanges - Odd-page headers
Document.StoryRanges does not explicitly return odd-page headers/footers. Instead, they're linked from the even-page ones. One has to use Range.NextStoryRange on the even-page headers/footers to get the odd-page ones.
Because example code is always nice, here's my function to grab _all_ of the ranges in a document, updated with this knowledge:
' Builds a collection of all the ranges in this document.
' (StoryRanges, which include the headers and footers, augmented with any text box ranges)
' also include linked ranges via NextStoryRange to grab the odd page header/footers
Private Function AllRanges(Optional Doc As Document) As Collection
Dim Rng As Range
Dim Sh As Shape
Set AllRanges = New Collection
If Doc Is Nothing Then Set Doc = ActiveDocument
For Each Rng In Doc.StoryRanges
While Not Rng Is Nothing
Set Rng = Rng.NextStoryRange
' Grab all of the text boxes in the document, too.
' Use .ContainingRange to return the entire story that flows between linked text frames,
' but examine .Previous to make sure I grab it only once - from the first box in the chain.
For Each Sh In Doc.Shapes
If .HasText And .Previous Is Nothing Then AllRanges.Add .ContainingRange
Posted by Peter at September 19, 2006 02:08 PM