Macro to place Insert information into a footer

L

Liz130

In Word 2003 I had a lovely macro that I used to place the filename, author,
creation date, revision date, and page number into a footer that repeated on
every page. I would open a blank file, save it to the filename I wanted it
to have, run my macro and poof the footer was exactly as I wanted. I cannot
make Word 2007 do that for me. The macro blows up with Run-time error '5941':
The requested member of the collection does not exist.

I created the macro using the record device in macro. Debug highlights the
two lines " ActiveDocument.AttachedTemplate.BuildingBlockEntries("Plain
Number 2"). _
Insert Where:=Selection.Range, RichText:=True"

Here is the full code:


Sub Foot()
'
' Foot Macro
' Create Footer for Manuscripts
'
WordBasic.ViewFooterOnly
ActiveDocument.AttachedTemplate.BuildingBlockEntries("Plain Number 2"). _
Insert Where:=Selection.Range, RichText:=True
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"FILENAME ", PreserveFormatting:=True
Selection.TypeText Text:=" "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"AUTHOR ", PreserveFormatting:=True
Selection.TypeText Text:=" "
Selection.InsertDateTime DateTimeFormat:="MMMM d, yyyy", InsertAsField:= _
False, DateLanguage:=wdEnglishUS, CalendarType:=wdCalendarWestern, _
InsertAsFullWidth:=False
Selection.TypeText Text:=" "
Selection.InsertDateTime DateTimeFormat:="M/d/yyyy h:mm am/pm", _
InsertAsField:=True, DateLanguage:=wdEnglishUS, CalendarType:= _
wdCalendarWestern, InsertAsFullWidth:=False
Selection.TypeText Text:=" "
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub
 
J

Jay Freedman

There's a lesson here: Don't always assume that the macro recorder
does the right thing. In fact, there's an article about its foibles:
http://www.word.mvps.org/FAQs/MacrosVBA/ModifyRecordedMacro.htm

In this case, the recorder is completely wrong when it assumes that
the building block you clicked in the gallery came from the template
attached to the active document. In fact, it comes from the Building
Block.dotx template. There is no way to record the code that's
necessary to find that building block:

Sub Foot()
Dim oTmp As Template, BBTmp As Template
For Each oTmp In Templates
If LCase(oTmp.Name) = "building blocks.dotx" Then
Set BBTmp = oTmp
Exit For
End If
Next

If Not BBTmp Is Nothing Then
WordBasic.ViewFooterOnly
BBTmp.BuildingBlockEntries("Plain Number 2"). _
Insert Where:=Selection.Range, RichText:=True

' rest of code here
End If
End Sub

--
Regards,
Jay Freedman
Microsoft Word MVP
Email cannot be acknowledged; please post all follow-ups to the
newsgroup so all may benefit.
 
L

Liz130

Okay and I thank you. I cut and pasted as instructed, removing the offending
code in the process. It no longer bombs and it does create a footer and
position me in the footer but it does not automatically fill in the fields.
Waqs that capability sacrificed in 2007?
 
J

Jay Freedman

The Author and Date fields should update automatically, but the
Filename field never will (http://support.microsoft.com/kb/832897).
This is not new behavior in Word 2007.

To work around this, add a line just before the End Sub:

Selection.Paragraphs(1).Range.Fields.Update

Also create the AutoOpen macro described by the KB article.
 
G

Graham Mayor

It would be as well to also add a line to save the document before updating
the filename field, so that there is a filename to display, rather than the
default Document(n)?

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 

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