If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. |
|
|
Thread Tools | Display Modes |
#21
|
|||
|
|||
10 most common problems for successful headers-footers?
01-28-07
Thank you, John, ... a great deal ! You've given me something solid to chew on. And I'll probably need to chew on it for a while. Question: Only 8 sections allowed per document? Can it be? But I see I can enter apparent new sections past 10. Cheers, Gil "John McGhie [MVP - Word and Word Macintosh]" wrote in message ... Hi Gil: This thread seems to have wandered off the track a little :-) It's neither difficult nor undesirable to do what you want in Word. Yes, you are quite correct that the Header and footer for a page are controlled by the section break that most immediately FOLLOWS the page in the file. When I say "Controls" I mean that there may be eight section breaks in a document. If all of their headers and all of their footers are set to "Same As Previous", the headers and footers will actually be stored in the very last section break in the file. The last section break is a special case: it is the default OLE object store for the file and is hidden below the last paragraph mark in the document. It contains not only the headers and footers but almost everything else in the document excepting the text. When you add section breaks to a document, each one becomes an exact copy of the one following it. This is a bit counter-intuitive, so commit it to memory -- it's the key to working with section breaks :-) Assuming that you break the "Same as previous link", each section break stores three headers and three footers: First Page, Left Page and Right Page. The structure of the headers and footers is always there, but each specific header or footer is not populated until you put something in it. Once the headers and footers have been populated in a document, you can't remove them, although you can either delete their content or hide them. So when working with headers and footers, the first thing you need to do is set up the default section break in the document. Then each time you insert a new one, it will have most of the properties you need. If you're working in VBA, you simply iterate the Stories collection. Here's some running code that first imports a set of AutoTexts from the template then adds them to the headers and footers as required, then sets exact dimensions for them. The headers in this case were expressed as single vector graphic files that contained a logo. The document itself is set up for double-sided printing with headers and footers different first/left/ and right. The routine down the bottom sets a variable in the document so we can tell what version its headers and footers are. Hope this helps Sub ReplaceHeadersFooters() ' ' Macro to put headers and footers right ' Macro written 27 Aug 2004 by John McGhie ' Dim aVar As Variable Dim bHeaderDone As Boolean Dim bStylesDone As Boolean Dim HeaderVersion As Integer Dim aSection As Section Dim aHeader As HeaderFooter Dim aFooter As HeaderFooter Dim aStyle As Style Dim bTrackChanges As Boolean bTrackChanges = ActiveDocument.TrackRevisions If ActiveDocument.Type wdTypeTemplate Then Application.OrganizerCopy _ Source:=ActiveDocument.AttachedTemplate.FullName, _ Destination:=ActiveDocument.FullName, _ Name:="Header", _ Object:=wdOrganizerObjectStyles Application.OrganizerCopy _ Source:=ActiveDocument.AttachedTemplate.FullName, _ Destination:=ActiveDocument.FullName, _ Name:="HeaderLeft", _ Object:=wdOrganizerObjectStyles Application.OrganizerCopy _ Source:=ActiveDocument.AttachedTemplate.FullName, _ Destination:=ActiveDocument.FullName, _ Name:="FooterRight", _ Object:=wdOrganizerObjectStyles Application.OrganizerCopy _ Source:=ActiveDocument.AttachedTemplate.FullName, _ Destination:=ActiveDocument.FullName, _ Name:="FooterLeft", _ Object:=wdOrganizerObjectStyles End If For Each aSection In ActiveDocument.Sections With aSection.PageSetup .SectionStart = wdSectionOddPage .DifferentFirstPageHeaderFooter = False .OddAndEvenPagesHeaderFooter = True .MirrorMargins = True .Gutter = 0 .TopMargin = InsidePageMargin .BottomMargin = BottomMargin .LeftMargin = InsidePageMargin .RightMargin = OutsidePageMargin End With With aSection.Headers(wdHeaderFooterPrimary) .Range.Delete ActiveDocument.AttachedTemplate.AutoTextEntries("T enderHeader").Insert _ Whe=.Range, RichText:=True .Range.Style = "Header" Call FormatHeader(.Range) End With With aSection.Headers(wdHeaderFooterEvenPages) .Range.Delete ActiveDocument.AttachedTemplate.AutoTextEntries("T enderHeader").Insert _ Whe=.Range, RichText:=True .Range.Style = "HeaderLeft" Call FormatHeader(.Range) End With With aSection.Footers(wdHeaderFooterPrimary) .Range.Delete .Range.Style = "FooterRight" ActiveDocument.AttachedTemplate.AutoTextEntries("T enderFooterRight").Insert _ Whe=.Range, RichText:=True End With With aSection.Footers(wdHeaderFooterEvenPages) .Range.Delete .Range.Style = "FooterLeft" ActiveDocument.AttachedTemplate.AutoTextEntries("T enderFooterLeft").Insert _ Whe=.Range, RichText:=True End With Next ' asection For Each aVar In ActiveDocument.Variables If aVar.Name = "HeaderVersion" Then bHeaderDone = True Next ' aVar With ActiveDocument.Variables If bHeaderDone Then .Item("HeaderVersion").Value = intCurrHeader Else .Add Name:="HeaderVersion", Value:=intCurrHeader End If End With With ActiveDocument .TrackRevisions = bTrackChanges .ShowRevisions = True End With End Sub Sub FormatHeader(aHeader As Range) ' sets format of picture in header ' macro written 27 Aug 2004 by John McGhie With aHeader.InlineShapes(1) .Fill.Visible = msoFalse .Fill.Transparency = 0# .Line.Weight = 0# .Line.Transparency = 0# .Line.Visible = msoFalse .LockAspectRatio = msoTrue .Width = 453.5433 .PictureFormat.Brightness = 0.5 .PictureFormat.Contrast = 0.5 .PictureFormat.ColorType = msoPictureAutomatic .PictureFormat.CropLeft = 0# .PictureFormat.CropRight = 0# .PictureFormat.CropTop = 0# .PictureFormat.CropBottom = 0# End With End Sub On 27/1/07 9:35 AM, in article , "gil" wrote: Yet another try, ... guess I don't post all that often. I hope this formatting works better than what I just posted: I think I've found a work around for initiating new Header/Footers in an existing document. The following code placed at the end or your multipage letter enters an autotext called "sectHF5" which is comprised of an "empty" two lines of non-first page header and a non-first page footer with centered page number. It then substitues some variables ("ptNamx" and "ptDob") and an autotext "myName" from an attached template. The variables and autotext replace invisible white colored text ("z.") in each of two lines of header and then converts them to black. The user has to be aware not to remove the section break at the bottom of the file. One has to make an initial autotext entry for the "blank header" and and save it as "sectHF5" to normal.dot. Making a "blank header section break" can be tricky. When making it, you might need to have a hard page break above the section break in order to reach "different first pages" in the blank headers. Why all this? It seems that Word keeps the initial making of a file's H/F in the last paragraph mark of the entire file. I'm not sure it ever disappears despite make intervening section breaks. By having exactly two lines in the header that are blank, one can code for their removal or replacement. If you try to code deleting 3 header lines here, you might be deleting a first line of footer information. Cheers, Gil ------------------- Sub Macro31() ' ' Macro31 Macro ' Macro recorded 1/26/2007 by Gil Carter ' Application.DisplayAutoCompleteTips = True NormalTemplate.AutoTextEntries("sectHF5").Insert Whe=Selection.Range, _ RichText:=True Selection.MoveUp Unit:=wdLine, Count:=3 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 Selection.TypeText Text:=" " Application.Run MacroName:="Project.NewMacros.makeNormalFont" Selection.MoveLeft Unit:=wdCharacter, Count:=1 Application.Run MacroName:="Project.makelinemedium.MAIN" Selection.TypeBackspace Selection.TypeBackspace Selection.TypeBackspace Selection.TypeText Text:=ptNamx & ", dob " & ptDob & ", date " Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _ "DATE \@ ""MMMM d, yyyy"" ", PreserveFormatting:=True Selection.TypeText Text:=" " Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.TypeText Text:="by " Application.Run MacroName:="Project.NewMacros.makeNormalFont" Application.Run MacroName:="Project.makelinemedium.MAIN" Selection.TypeBackspace Selection.TypeBackspace Application.DisplayAutoCompleteTips = True Templates.Application.NormalTemplate.AutoTextEntri es("myName").Insert _ Whe=Selection.Range, RichText:=True Selection.TypeText Text:=" " ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument End Sub -- Please reply to the newsgroup to maintain the thread. Please do not email me unless I ask you to. John McGhie Microsoft MVP, Word and Word for Macintosh. Business Analyst, Consultant Technical Writer. Sydney, Australia +61 (0) 4 1209 1410 |
#22
|
|||
|
|||
10 most common problems for successful headers-footers?
I think John was using "may" in the sense of possibility rather than
permission. You can have as many sections as you want. -- Suzanne S. Barnhill Microsoft MVP (Word) Words into Type Fairhope, Alabama USA Word MVP FAQ site: http://word.mvps.org Email cannot be acknowledged; please post all follow-ups to the newsgroup so all may benefit. "gil" wrote in message ... 01-28-07 Thank you, John, ... a great deal ! You've given me something solid to chew on. And I'll probably need to chew on it for a while. Question: Only 8 sections allowed per document? Can it be? But I see I can enter apparent new sections past 10. Cheers, Gil "John McGhie [MVP - Word and Word Macintosh]" wrote in message ... Hi Gil: This thread seems to have wandered off the track a little :-) It's neither difficult nor undesirable to do what you want in Word. Yes, you are quite correct that the Header and footer for a page are controlled by the section break that most immediately FOLLOWS the page in the file. When I say "Controls" I mean that there may be eight section breaks in a document. If all of their headers and all of their footers are set to "Same As Previous", the headers and footers will actually be stored in the very last section break in the file. The last section break is a special case: it is the default OLE object store for the file and is hidden below the last paragraph mark in the document. It contains not only the headers and footers but almost everything else in the document excepting the text. When you add section breaks to a document, each one becomes an exact copy of the one following it. This is a bit counter-intuitive, so commit it to memory -- it's the key to working with section breaks :-) Assuming that you break the "Same as previous link", each section break stores three headers and three footers: First Page, Left Page and Right Page. The structure of the headers and footers is always there, but each specific header or footer is not populated until you put something in it. Once the headers and footers have been populated in a document, you can't remove them, although you can either delete their content or hide them. So when working with headers and footers, the first thing you need to do is set up the default section break in the document. Then each time you insert a new one, it will have most of the properties you need. If you're working in VBA, you simply iterate the Stories collection. Here's some running code that first imports a set of AutoTexts from the template then adds them to the headers and footers as required, then sets exact dimensions for them. The headers in this case were expressed as single vector graphic files that contained a logo. The document itself is set up for double-sided printing with headers and footers different first/left/ and right. The routine down the bottom sets a variable in the document so we can tell what version its headers and footers are. Hope this helps Sub ReplaceHeadersFooters() ' ' Macro to put headers and footers right ' Macro written 27 Aug 2004 by John McGhie ' Dim aVar As Variable Dim bHeaderDone As Boolean Dim bStylesDone As Boolean Dim HeaderVersion As Integer Dim aSection As Section Dim aHeader As HeaderFooter Dim aFooter As HeaderFooter Dim aStyle As Style Dim bTrackChanges As Boolean bTrackChanges = ActiveDocument.TrackRevisions If ActiveDocument.Type wdTypeTemplate Then Application.OrganizerCopy _ Source:=ActiveDocument.AttachedTemplate.FullName, _ Destination:=ActiveDocument.FullName, _ Name:="Header", _ Object:=wdOrganizerObjectStyles Application.OrganizerCopy _ Source:=ActiveDocument.AttachedTemplate.FullName, _ Destination:=ActiveDocument.FullName, _ Name:="HeaderLeft", _ Object:=wdOrganizerObjectStyles Application.OrganizerCopy _ Source:=ActiveDocument.AttachedTemplate.FullName, _ Destination:=ActiveDocument.FullName, _ Name:="FooterRight", _ Object:=wdOrganizerObjectStyles Application.OrganizerCopy _ Source:=ActiveDocument.AttachedTemplate.FullName, _ Destination:=ActiveDocument.FullName, _ Name:="FooterLeft", _ Object:=wdOrganizerObjectStyles End If For Each aSection In ActiveDocument.Sections With aSection.PageSetup .SectionStart = wdSectionOddPage .DifferentFirstPageHeaderFooter = False .OddAndEvenPagesHeaderFooter = True .MirrorMargins = True .Gutter = 0 .TopMargin = InsidePageMargin .BottomMargin = BottomMargin .LeftMargin = InsidePageMargin .RightMargin = OutsidePageMargin End With With aSection.Headers(wdHeaderFooterPrimary) .Range.Delete ActiveDocument.AttachedTemplate.AutoTextEntries("T enderHeader").Insert _ Whe=.Range, RichText:=True .Range.Style = "Header" Call FormatHeader(.Range) End With With aSection.Headers(wdHeaderFooterEvenPages) .Range.Delete ActiveDocument.AttachedTemplate.AutoTextEntries("T enderHeader").Insert _ Whe=.Range, RichText:=True .Range.Style = "HeaderLeft" Call FormatHeader(.Range) End With With aSection.Footers(wdHeaderFooterPrimary) .Range.Delete .Range.Style = "FooterRight" ActiveDocument.AttachedTemplate.AutoTextEntries("T enderFooterRight").Insert _ Whe=.Range, RichText:=True End With With aSection.Footers(wdHeaderFooterEvenPages) .Range.Delete .Range.Style = "FooterLeft" ActiveDocument.AttachedTemplate.AutoTextEntries("T enderFooterLeft").Insert _ Whe=.Range, RichText:=True End With Next ' asection For Each aVar In ActiveDocument.Variables If aVar.Name = "HeaderVersion" Then bHeaderDone = True Next ' aVar With ActiveDocument.Variables If bHeaderDone Then .Item("HeaderVersion").Value = intCurrHeader Else .Add Name:="HeaderVersion", Value:=intCurrHeader End If End With With ActiveDocument .TrackRevisions = bTrackChanges .ShowRevisions = True End With End Sub Sub FormatHeader(aHeader As Range) ' sets format of picture in header ' macro written 27 Aug 2004 by John McGhie With aHeader.InlineShapes(1) .Fill.Visible = msoFalse .Fill.Transparency = 0# .Line.Weight = 0# .Line.Transparency = 0# .Line.Visible = msoFalse .LockAspectRatio = msoTrue .Width = 453.5433 .PictureFormat.Brightness = 0.5 .PictureFormat.Contrast = 0.5 .PictureFormat.ColorType = msoPictureAutomatic .PictureFormat.CropLeft = 0# .PictureFormat.CropRight = 0# .PictureFormat.CropTop = 0# .PictureFormat.CropBottom = 0# End With End Sub On 27/1/07 9:35 AM, in article , "gil" wrote: Yet another try, ... guess I don't post all that often. I hope this formatting works better than what I just posted: I think I've found a work around for initiating new Header/Footers in an existing document. The following code placed at the end or your multipage letter enters an autotext called "sectHF5" which is comprised of an "empty" two lines of non-first page header and a non-first page footer with centered page number. It then substitues some variables ("ptNamx" and "ptDob") and an autotext "myName" from an attached template. The variables and autotext replace invisible white colored text ("z.") in each of two lines of header and then converts them to black. The user has to be aware not to remove the section break at the bottom of the file. One has to make an initial autotext entry for the "blank header" and and save it as "sectHF5" to normal.dot. Making a "blank header section break" can be tricky. When making it, you might need to have a hard page break above the section break in order to reach "different first pages" in the blank headers. Why all this? It seems that Word keeps the initial making of a file's H/F in the last paragraph mark of the entire file. I'm not sure it ever disappears despite make intervening section breaks. By having exactly two lines in the header that are blank, one can code for their removal or replacement. If you try to code deleting 3 header lines here, you might be deleting a first line of footer information. Cheers, Gil ------------------- Sub Macro31() ' ' Macro31 Macro ' Macro recorded 1/26/2007 by Gil Carter ' Application.DisplayAutoCompleteTips = True NormalTemplate.AutoTextEntries("sectHF5").Insert Whe=Selection.Range, _ RichText:=True Selection.MoveUp Unit:=wdLine, Count:=3 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 Selection.TypeText Text:=" " Application.Run MacroName:="Project.NewMacros.makeNormalFont" Selection.MoveLeft Unit:=wdCharacter, Count:=1 Application.Run MacroName:="Project.makelinemedium.MAIN" Selection.TypeBackspace Selection.TypeBackspace Selection.TypeBackspace Selection.TypeText Text:=ptNamx & ", dob " & ptDob & ", date " Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _ "DATE \@ ""MMMM d, yyyy"" ", PreserveFormatting:=True Selection.TypeText Text:=" " Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.TypeText Text:="by " Application.Run MacroName:="Project.NewMacros.makeNormalFont" Application.Run MacroName:="Project.makelinemedium.MAIN" Selection.TypeBackspace Selection.TypeBackspace Application.DisplayAutoCompleteTips = True Templates.Application.NormalTemplate.AutoTextEntri es("myName").Insert _ Whe=Selection.Range, RichText:=True Selection.TypeText Text:=" " ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument End Sub -- Please reply to the newsgroup to maintain the thread. Please do not me unless I ask you to. John McGhie Microsoft MVP, Word and Word for Macintosh. Business Analyst, Consultant Technical Writer. Sydney, Australia +61 (0) 4 1209 1410 |
#23
|
|||
|
|||
10 most common problems for successful headers-footers?
Suzanne, thank you :-)
I believe the limit for the .doc format is 255 section breaks in a single file. For the new .dotx format, it's probably unlimited, but don't quote me on that. Cheers On 29/1/07 3:41 AM, in article , "Suzanne S. Barnhill" wrote: I think John was using "may" in the sense of possibility rather than permission. You can have as many sections as you want. -- Please reply to the newsgroup to maintain the thread. Please do not email me unless I ask you to. John McGhie Microsoft MVP, Word and Word for Macintosh. Business Analyst, Consultant Technical Writer. Sydney, Australia +61 (0) 4 1209 1410 |
#24
|
|||
|
|||
10 most common problems for successful headers-footers?
Hmmm, ... Thanks All.
Gil "John McGhie [MVP - Word and Word Macintosh]" wrote in message ... Suzanne, thank you :-) I believe the limit for the .doc format is 255 section breaks in a single file. For the new .dotx format, it's probably unlimited, but don't quote me on that. Cheers On 29/1/07 3:41 AM, in article , "Suzanne S. Barnhill" wrote: I think John was using "may" in the sense of possibility rather than permission. You can have as many sections as you want. -- Please reply to the newsgroup to maintain the thread. Please do not email me unless I ask you to. John McGhie Microsoft MVP, Word and Word for Macintosh. Business Analyst, Consultant Technical Writer. Sydney, Australia +61 (0) 4 1209 1410 |
Thread Tools | |
Display Modes | |
|
|