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

时间:2013-02-07 09:03:42

标签: vba header field word-2010

我正在尝试修复Word 2010页面标题,其中包含文件名,保存日期和页码以及每个文本之间的文本字段,如下所示:filename +“”+ save date + tab + page number。但是,我似乎无法在正确的位置得到琴弦。到目前为止我所拥有的是:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

这有点难看,但以下代码似乎做你想要的。请注意,如果我没有将最后一个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

End Sub