dirtyshooter Ответов: 2

Как я могу отредактировать всего нет.страниц в заголовке текстового редактора Word.


У меня есть приложение word. Заголовок показывает разбиение на страницы в стиле (1 из 9). Как программно уменьшить общее количество страниц? Я попытался записать макрос, но это не работает так, как ожидалось.
Страница {Страница} из {={NUMPAGES}-1} Я должен достичь этого с помощью кода vba.

Что я уже пробовал:

THE RECORDED MACRO
<pre>Sub Macro3()
'
' Macro3 Macro
'
'
    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
    Application.Templates( _
        "C:\Users\v-abhink\AppData\Roaming\Microsoft\Document Building Blocks\1033\16\Built-In Building Blocks.dotx" _
        ).BuildingBlockEntries("Bold Numbers 3").Insert Where:=Selection.Range, _
        RichText:=True
    ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes
    Selection.TypeText Text:="="
    Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
        PreserveFormatting:=False
    Selection.TypeText Text:="NUMPAGES"
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.TypeText Text:="-1"
    ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes
End Sub

2 Ответов

Рейтинг:
6

dirtyshooter

<pre>Sub InsertFooter()
    Dim rng As Range
    With ActiveDocument.Sections(1)
        With .Headers(wdHeaderFooterPrimary)
          Set rng = .Range.Duplicate
            rng.Collapse wdCollapseEnd
            rng.InsertBefore vbTab & "Page { PAGE } of { = { NUMPAGES } -1 }"
            TextToFields rng
        End With
    End With
End Sub
Sub TextToFields(rng1 As Range)
    Dim c As Range
    Dim fld As Field
    Dim f As Integer
    Dim rng2 As Range
    Dim lFldStarts() As Long
    
    Set rng2 = rng1.Duplicate
    rng1.Document.ActiveWindow.View.ShowFieldCodes = True
 
    For Each c In rng1.Characters
        DoEvents
        Select Case c.Text
            Case "{"
                ReDim Preserve lFldStarts(f)
                lFldStarts(f) = c.Start
                f = f + 1
            Case "}"
                f = f - 1
                If f = 0 Then
                    rng2.Start = lFldStarts(f)
                    rng2.End = c.End
                    rng2.Characters.Last.Delete '{
                    rng2.Characters.First.Delete '}
                    Set fld = rng2.Fields.Add(rng2, , , False)
                    Set rng2 = fld.Code
                    TextToFields fld.Code
                End If
            Case Else
        End Select
    Next c
    rng2.Expand wdStory
    rng2.Fields.Update
    rng1.Document.ActiveWindow.View.ShowFieldCodes = False
End Sub


Рейтинг:
1

Maciej Los

У вас есть 2 способа добиться этого:
способ № 1 Номера страниц.Добавить метод (Word) | Microsoft Docs[^]
способ № 2 Поля.Добавить метод (Word) | Microsoft Docs[^]

Sub AddPageNumbering()
    Dim doc As Document
    Dim header As Range
    Set doc = ActiveDocument 
    Set header = doc.Sections(ActiveDocument.Sections.Count) _
        .Headers(wdHeaderFooterPrimary).Range
    With header
        .Paragraphs(1).Alignment = wdAlignParagraphCenter
        .TypeText Text:="Page "
        .Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
            "PAGE ", PreserveFormatting:=True
        .TypeText Text:=" of "
        .Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
            "NUMPAGES ", PreserveFormatting:=True
    End With
End Sub


Для получения более подробной информации, пожалуйста, смотрите:
Как использовать Word automation для подсчета количества страниц в каждом разделе документа - Office | Microsoft Docs[^]
Поля объекта (слово) | Майкрософт документы[^]


dirtyshooter

Я считаю, что этот код будет полезен для добавления разбиения на страницы. Но мне нужно, чтобы общее количество страниц было уменьшено. Если это "Страница 1 из 9", то она должна отображать "страницу 1 из 8"

Maciej Los

Итак, используйте: Номера страниц.Свойство Count (Word) | Microsoft Docs[^] и вычтите один ;)

dirtyshooter

Извините, что я новичок в этом деле. Как мне это сделать?

Maciej Los

Вы имеете в виду вычесть один?
result = PageNumbers.Count - 1