Word 2007 - Macro - The requested member of the collection does not exist

Hi..
I recorded a macro that inserts a header - but get the following error

THE REQUESTED MEMBER OF THE COLLECTION DOES NOT EXIST

How to modify my macro to make it work on all documets?   I've read about moving it to NORMAL.DOT but don't understand how or why this will help.   thanks

 Selection.MoveDown Unit:=wdLine, Count:=5
    Selection.MoveLeft Unit:=wdCharacter, Count:=20
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    Selection.Copy
    Selection.MoveDown Unit:=wdLine, Count:=43
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveUp Unit:=wdLine, Count:=2
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
   
      ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

** ERROR HERE

    ActiveDocument.AttachedTemplate.BuildingBlockEntries(" Blank").Insert _
        Where:=Selection.Range, RichText:=True
       
    Selection.PasteAndFormat (wdPasteDefault)
    ActiveDocument.AttachedTemplate.BuildingBlockEntries("Plain Number"). _
        Insert Where:=Selection.Range, RichText:=True
   
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="Page "
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
LVL 1
JElsterAsked:
Who is Participating?
 
GrahamSkanConnect With a Mentor RetiredCommented:
I can't be sure why it is double-spaced, but I would guess that the line containing the name already has a pargraph mark or a newline character to end it. In that cse we don't need to add on in the code.
 Dim rng As Range
    
    ActiveDocument.Range(0, 0).Select
    Selection.MoveDown Unit:=wdLine, Count:=3
    Selection.MoveLeft Unit:=wdCharacter, Count:=20, Extend:=wdExtend
    Selection.Copy
   
    Set rng = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Duplicate
   ' ???
   ' Paste Selection and add carriage return and add 'Page' and number
 
 
    rng.PasteAndFormat (wdPasteDefault)
 
   ' Add Page text and number to next paragraph
    rng.Collapse wdCollapseEnd
    rng.Text = "Page "
 
    rng.Collapse wdCollapseEnd
    ActiveDocument.Fields.Add rng, wdFieldPage

Open in new window

0
 
GrahamSkanRetiredCommented:
There is a extra space before the word Blank in " Blank". Perhaps that is the problem.

Before 2007, recorded macros go in the Normal template by default. I guess that it is still the same.
0
 
JElsterAuthor Commented:
I removed the blank - no diff.

It can not find the following -    
   ActiveDocument.AttachedTemplate.BuildingBlockEntries("Blank").Insert _
        Where:=Selection.Range, RichText:=True
0
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

 
GrahamSkanRetiredCommented:
Yes. It means that there isn't a such an entry. BuildingBlockEntries are new to 2007, so I can't see if I have them.

I have tried to work out what your macro does. I thik this will  do the same thing.
Private Sub NumberinHeaders()
    Dim rng As Range
    
    Set rng = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Duplicate
    rng.Text = "Page "
    rng.Collapse wdCollapseEnd
    ActiveDocument.Fields.Add rng, wdFieldPage
End Sub

Open in new window

0
 
JElsterAuthor Commented:
I'm trying to copy the first line in a document -  The person it's addressed to  - and add that name
to the header on the next pages and add the page #.
thanks
0
 
JElsterAuthor Commented:
Hi.. This is what I have so far.. thanks


    ' Text to Copy to Header
    Selection.MoveDown Unit:=wdLine, Count:=3
    Selection.MoveLeft Unit:=wdCharacter, Count:=20, Extend:=wdExtend
    Selection.Copy
   
    Set sel = Selection
       
    Selection.MoveDown Unit:=wdLine, Count:=65
   
   
    ' Create Header
    Set rng = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Duplicate
       
       
   ' ???
   ' Paste Selection and add carriage return and add 'Page' and number

   ' Add Para betweeen Selection and Page Number

    Selection.PasteAndFormat (wdPasteDefault)
   
    rng.Text = Paragraph & "Page "
   
    'Close Header
    rng.Collapse wdCollapseEnd
    ActiveDocument.Fields.Add rng, wdFieldPage

   
   
   
   
0
 
GrahamSkanRetiredCommented:
I'm not sure it that works. If not, try this
    Dim rng As Range
    
    ActiveDocument.Range(0, 0).Select
    Selection.MoveDown Unit:=wdLine, Count:=3
    Selection.MoveLeft Unit:=wdCharacter, Count:=20, Extend:=wdExtend
    Selection.Copy
   
    Set rng = ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Duplicate
   ' ???
   ' Paste Selection and add carriage return and add 'Page' and number
 
 
    rng.PasteAndFormat (wdPasteDefault)
    rng.Collapse wdCollapseEnd
   ' Add Para betweeen Selection and Page Number
    
    rng.Text = vbCr & "Page "
    rng.Collapse wdCollapseEnd
    
    ActiveDocument.Fields.Add rng, wdFieldPage

Open in new window

0
 
JElsterAuthor Commented:
Works.. but the header is double spaced - so it show up like

George Washington

Page  2


how can I make is single spaced.. thanks again
0
 
JElsterAuthor Commented:
If I remove it

I get

'George Washington Page 2'

any final ideas.. thanks again
0
 
JElsterAuthor Commented:
It appears the header is double spaced.. by default ?
How I programmaticall switch it to single
thanks
0
 
GrahamSkanRetiredCommented:
Try setting the line spacing for the header to Single:

    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Paragraphs.Space1

Open in new window

0
 
JElsterAuthor Commented:
Where do I add this?
thanks
0
 
GrahamSkanRetiredCommented:
I think that it would work anywhere in the macro, but, to be sure, put it at the end.
0
 
JElsterAuthor Commented:
It's doesn't seem to work... any more ideas.. thanks
0
 
JElsterAuthor Commented:
Thanks again
0
 
GrahamSkanRetiredCommented:
Perhaps it is SpaceBefore or SpaceAfter.

Try these at the end of the macro:

    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Paragraphs.SpaceBefore = 0
    ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Range.Paragraphs.SpaceAfter = 0

Open in new window

0
 
JElsterAuthor Commented:
That's it! Thanks!
0
 
GrahamSkanRetiredCommented:
That's good news. Thanks for letting me know. Next time that spacing question arises I'll try all three straight-away
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.