MS Word-VBA-将文档属性字段添加到页脚中会删除现有页码

时间:2018-08-15 20:36:05

标签: vba ms-word word-vba

我想在文档中每个页面的页脚中标记文档变量字段。我想出了如何添加字段。但是,这样做时,页脚中已经存在的页码字段将被禁用,仅保留文本,而不再充当动态页码。任何帮助将不胜感激。

这是我的代码,该代码添加了该字段,但是以某种方式禁用了页码。 (“ sectionFooter.Range.Text = sectionFooter.Range.Text +”“行是我什至可以找到的页码仍然显示的唯一方法):

For Each docSection In ActiveDocument.Sections
    For Each sectionFooter In docSection.Footers

            sectionFooter.Range.Collapse wdCollapseEnd
            sectionFooter.Range.Text = sectionFooter.Range.Text + " "
            sectionFooter.Range.Collapse wdCollapseEnd
            Dim newPP As Paragraph
            Set newPP = sectionFooter.Range.Paragraphs.Add()

            newPP.Range.Font.Size = 8
            newPP.Range.Font.Name = "Arial"
            ActiveDocument.Fields.Add Range:=newPP.Range, Type:=wdFieldEmpty, Text:="DOCVARIABLE  ndGeneratedStamp", preserveformatting:=False

    Next
Next

3 个答案:

答案 0 :(得分:1)

如果这是您希望新字段定位的方式,请尝试执行以下操作...

Dim docSection As word.Section, sectionFooter As word.HeaderFooter
Dim rng As word.Range
For Each docSection In ActiveDocument.Sections
    For Each sectionFooter In docSection.Footers
        Set rng = sectionFooter.Range
        rng.InsertParagraphAfter
        rng.Collapse wdCollapseEnd
        rng.Font.Size = 8
        rng.Font.Name = "Arial"
        rng.Fields.Add Range:=rng, Type:=wdFieldEmpty, Text:="DOCVARIABLE  ndGeneratedStamp", PreserveFormatting:=False
    Next
Next

答案 1 :(得分:0)

Rich的答案解决了繁重的工作,但是对于发生这种情况的任何人,都想阐明我如何能够隔离新段落并应用字体。

Set rng = sectionFooter.Range

            rng.InsertParagraphAfter
            Set rng = sectionFooter.Range
            rng.Collapse wdCollapseEnd
            Set newPP = rng.Paragraphs.Last
            newPP.Range.Font.Size = 8
            newPP.Range.Font.Name = "Arial"
            rng.Fields.Add Range:=newPP.Range, Type:=wdFieldEmpty, Text:="DOCVARIABLE  ndGeneratedStamp", preserveformatting:=False

答案 2 :(得分:-1)

根据我的测试,我们也可以删除注释的代码。

注意:如果使用这种方式,则需要先设置页码,然后运行宏。

Dim docSection As Word.Section, sectionFooter As Word.HeaderFooter 
For Each docSection In ActiveDocument.Sections
    For Each sectionFooter In docSection.Footers
            'sectionFooter.Range.Collapse wdCollapseEnd
            'sectionFooter.Range.Text = sectionFooter.Range.Text + " "
            sectionFooter.Range.Collapse wdCollapseEnd
            Dim newPP As Paragraph
            Set newPP = sectionFooter.Range.Paragraphs.Add()

            newPP.Range.Font.Size = 8
            newPP.Range.Font.Name = "Arial"
            ActiveDocument.Fields.Add Range:=newPP.Range, Type:=wdFieldEmpty, Text:="DOCVARIABLE  ndGeneratedStamp", preserveformatting:=False

    Next
Next