#1
|
|||
|
|||
Restarting page numbering only if Section begins with Heading 1
Hi,
I have a macro that does various different things. I want it to not restart page numbering if the pages go from landscape to portrait, only if the new section begins with a heading 1. Since you need a section break when change from landscape to portrait, it's restarting the page numbering. I even tried to search if the page is landscape, but the restart starts at the next portrait page. Any help would be appreciated. I've attached my macro. Code:
Public Sub setFootersToHeadings() Dim doc As Document Dim s As Section Dim h As HeaderFooter Dim p As Paragraph Dim page As page Dim ctr As Integer 'ActiveDocument.TablesOfContents(1).Update Set doc = ActiveDocument ctr = 0 Dim hFound As Boolean Dim footerLabel As String 'footerLable = "" Dim tStr As String For Each s In doc.Sections For Each p In s.Range.Paragraphs If p.Style = ActiveDocument.Styles("Heading 1") Then footerLabel = Left(p.Range.Text, Len(p.Range.Text) - 1) End If If p.Range.Font.Color = wdColorRed Then p.Range.Select p.Range.Font.Color = wdColorBlack End If Next p 'you have a label, assign it to the section Set h = s.Footers(1) If h.Range.Text <> "Table of Contents" And footerLabel <> "" Then h.LinkToPrevious = False 'set the footer in the section 'first clean out the old one 'ctr = h.Range.Text tStr = h.Range.Text 'set the footer to the label h.Range.Text = Replace(h.Range.Text, tStr, footerLabel) With h.PageNumbers .Add PageNumberAlignment:=wdAlignPageNumberCenter .IncludeChapterNumber = True '.ChapterPageSeparator = wdSeparatorEnDash .RestartNumberingAtSection = True .StartingNumber = 1 End With End If If s.PageSetup.Orientation = wdOrientLandscape Then h.LinkToPrevious = True h.PageNumbers.RestartNumberingAtSection = False End If Next s ActiveDocument.TablesOfContents(1).Update For Each s In doc.Sections For Each p In s.Range.Paragraphs If p.Style.NameLocal = "Heading 1" Then p.Range.Select p.Range.Font.Color = wdColorWhite p.Range.Font.Size = 5 End If If p.Style.NameLocal = "Heading 2" Then p.Range.Select p.Range.Font.Color = wdColorWhite p.Range.Font.Size = 5 End If If p.Style.NameLocal = "Heading 5" Then p.Range.Select p.Range.Font.Color = wdColorWhite p.Range.Font.Size = 5 End If Next p Next s ActiveDocument.TablesOfContents(2).Update ActiveDocument.TablesOfContents(3).Update MsgBox ("Done Macro") End Sub |
#2
|
||||
|
||||
What you'd need to do is to insert a Section break before the heading (only if one isn't already there), then unlink the Section header/footer from the previous Section before er-setting the page numbering.
PS: Your code incorporates numberous '.Select' directives that add nothing to what you're doing other than slowing things down.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#3
|
|||
|
|||
The problem with that is that this is a 500 page document that is automatically generated. That's why I was trying to find a way to do it within the macro.
Thank you for the Select tip. I didn't realize that |
#4
|
||||
|
||||
Try the following:
Code:
Sub ProcessH1Breaks() Application.ScreenUpdating = False Dim Rng1 As Range, Rng2 As Range, Sctn As Section, HdFt As HeaderFooter, i As Long Set Rng1 = ActiveDocument.Range(0) Set Rng2 = ActiveDocument.Range(0) With ActiveDocument.Range With .Find .ClearFormatting .Replacement.ClearFormatting 'Find all Section breaks .Text = "^b" .Replacement.Text = "^&" 'Makes sure the Section break's Style = Normal .Replacement.Style = "Normal" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False .Execute Replace:=wdReplaceAll 'Find all "Heading 1" text .Text = "" .Style = "Heading 1" .Wrap = wdFindStop .Execute End With Do While .Find.Found Rng1.End = .Duplicate.Start + 1 Rng2.End = .Duplicate.Start - 1 'Make sure there is a Next Page Section break before the "Heading 1" paragraph If Rng1.Sections.Count = Rng2.Sections.Count Then Set Sctn = ActiveDocument.Sections.Add(.Duplicate.Characters.First, wdSectionNewPage) Else Set Sctn = .Duplicate.Sections.First End If 'Restart the Section's page numbering For Each HdFt In Sctn.Headers With HdFt .LinkToPrevious = False .PageNumbers.RestartNumberingAtSection = True .PageNumbers.StartingNumber = 1 End With Next .Collapse wdCollapseEnd .Find.Execute Loop 'Repeat making the Sections break Style = Normal With .Find .ClearFormatting .Replacement.ClearFormatting .Text = "^b" .Replacement.Text = "^&" .Replacement.Style = "Normal" .Forward = True .Wrap = wdFindContinue .Execute Replace:=wdReplaceAll End With 'Make sure all changes in page orientation continue page numbering, 'PROVIDED the Section doesn't start with Heading 1. For i = 2 To .Sections.Count If .Sections(i).PageSetup.Orientation <> .Sections(i - 1).PageSetup.Orientation Then If .Sections(i).Range.Paragraphs(1).Style <> "Heading 1" Then For Each HdFt In .Sections(i).Headers With HdFt .LinkToPrevious = True End With Next End If End If Next End With Set Rng1 = Nothing: Set Rng2 = Nothing: Set Sctn = Nothing Application.ScreenUpdating = True End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#5
|
|||
|
|||
Hi
I have a similar task and the provided solution works wonderfully for me. However, I would also need the footer to show the total page number for each Heading 1. Can anyone please show me how? Thanks |
#6
|
||||
|
||||
Word has no means of doing that unless you insert Section breaks either side of your Heading 1 ranges and insert a SECTIONPAGES field in the footer for each of those Sections. The macro code inserts a Section break before each Heading 1, which may suffice, but I really have no idea what your interpretation of a Heading 1 range is; for all I know, it might end at the next Heading 1 (in which case all you need do is insert the SECTIONPAGES field in the footer) or somewhere before then (in which case more work is needed).
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
Thread Tools | |
Display Modes | |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Page numbering with Section 1.1 Page 1 | sunalta | Word | 1 | 05-31-2012 02:48 PM |
Page numbering starting on 2 after section break | pamm13 | Word | 1 | 06-22-2011 11:10 AM |
Heading numbering and section breaks | uby | Word | 2 | 11-22-2010 10:03 PM |
Page number picking up heading numbering?! | Ulodesk | Word | 0 | 09-24-2009 01:56 PM |
Section breaks, footers and page numbering | yeswab | Word | 0 | 03-19-2009 06:37 AM |