我正在尝试修复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
然而,在执行了sub之后,不同的部分并不是我想要的。相反,它们显示为文件名+"+选项卡+页码+保存日期。我在这里做错了什么?如果可能的话,我宁愿不使用.Select
。
(请注意,我最近问了一个类似的问题。)
我相信您在这里的问题源于您将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
结束子