vba-在不使用.Select的情况下在Word 2010标头中插入文本和字段

我正在尝试修复Word 2010页面标题,该标题包含文件名,保存日期和页码以及两者之间的一些文本字段,例如:filename“”保存日期选项卡页码.但是,我似乎无法将字符串放在正确的位置.我到目前为止所拥有的是:

Sub CreateHeader()
    Dim myRange As Range
    With ActiveDocument
        Set myRange = .Sections(1).Headers(wdHeaderFooterPrimary).Range
        .Fields.Add Range:=myRange, Type:=wdFieldFileName, PreserveFormatting:=True
        myRange.Collapse wdCollapseEnd
        myRange.InsertAfter (" ")
        myRange.Collapse wdCollapseEnd
        .Fields.Add Range:=myRange, Type:=wdFieldSaveDate, Text:="\@ YYYY-MM-DD", PreserveFormatting:=True
        myRange.InsertAfter (Chr(9))
        myRange.Collapse wdCollapseEnd
        .Fields.Add Range:=myRange, Type:=wdFieldPage, PreserveFormatting:=True
    End With
End Sub

但是,执行子程序后,不同的部分不是我想要的.相反,它们以文件名“”标签页号保存日期显示.我在这里做错了什么?如果有可能,我宁愿不诉诸.Select.

(请注意,我最近询问了a similar question.)

最佳答案
我相信这里的问题源于您将myRange变量设置为标头文本的事实,该标头文本为空时,它只是第一个(空)字符.添加保存日期后,它似乎超出了此原始范围.您需要添加两件事以使代码正常工作.

首先,您希望在每次插入后都折叠到末尾,但是在插入SaveDate之后,还需要将标头范围(myRange变量)重新定义为Header.

这有点丑陋,但以下代码似乎可以满足您的要求.请注意,如果我不将最后一个wdCollapseEnd放入代码中,它将无法正常工作.

最后,我将在最后更新您的字段,以使您不必自己手动进行操作.

Sub CreateHeader()
    Dim myRange As Range
    With ActiveDocument
        Set myRange = .Sections(1).Headers(wdHeaderFooterPrimary).Range
        .Fields.Add Range:=myRange, Type:=wdFieldFileName, PreserveFormatting:=True
        myRange.Collapse wdCollapseEnd
        myRange.InsertAfter (" ")
        myRange.Collapse wdCollapseEnd
        .Fields.Add Range:=myRange, Type:=wdFieldSaveDate, Text:="\@ YYYY-MM-DD", PreserveFormatting:=True
       Set myRange = .Sections(1).Headers(wdHeaderFooterPrimary).Range
       myRange.Collapse wdCollapseEnd
       myRange.InsertAfter (Chr(9))
       myRange.Collapse wdCollapseEnd
       .Fields.Add Range:=myRange, Type:=wdFieldPage, PreserveFormatting:=True
       myRange.Fields.Update
End With

结束子

转载注明原文:vba-在不使用.Select的情况下在Word 2010标头中插入文本和字段 - 代码日志