2

我正在尝试修复包含文件名、保存日期和页码字段以及每个字段之间的一些文本的 Word 2010 页眉,如下所示:文件名+“”+保存日期+选项卡+页码。但是,我似乎无法将琴弦放在正确的位置。我到目前为止是这样的:

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

但是,在执行 sub 之后,不同的部分并不是我想要的。相反,它们显示为文件名+“”+选项卡+页码+保存日期。我在这里做错了什么?如果可能的话,我宁愿不诉诸.Select.

(请注意,我最近问了一个类似的问题。)

4

1 回答 1

2

我相信您的问题源于您将myRange变量设置为标题文本,当它为空时,它只是第一个(空)字符。添加 Savedate 后,它似乎超出了这个原始范围。您需要添加两件事才能使您的代码正常工作。

首先,您希望在每次插入后折叠到最后,但您还需要myRange在插入 SaveDate 后将标题范围(变量)重新定义为标题。

这有点难看,但以下代码似乎可以满足您的需求。请注意,如果我不把最后一个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

结束子

于 2013-02-07T11:41:15.307 回答