我正在尝试修复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。)
答案 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