2013-02-07 30 views
2

我试图修复了包含文件名的字段一个Word 2010页头,保存日期和页数,以及每个之间的一些文字,像这样:文件名+”“ +保存日期+标签+页码。但是,我似乎无法将字符串放在正确的位置。我到目前为止是这样的:插入在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 

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

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

回答

3

我相信在这里你的问题,从您所设定的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 

结束子

+0

感谢一束,@CuberChase。非常有用的答案。 –

+1

没有问题,Word可以使用它就像当做一些不可预知的东西,这个所以它几乎是值得打破下来,并测试它一步一步来。 :) – CuberChase

相关问题