![]() |
|
|
|
#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] |
|
|
|
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 |