在Word 2010标题中插入文本和字段而不使用.Select [英] Inserting text and fields in Word 2010 header without using .Select
问题描述
我试图修复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 +页码+保存日期。我在这里做错了什么?如果可以的话,我宁愿不诉诸。选择
。
<请注意我最近问类似的问题) p>
我相信你的问题源于你设置 myRange
变量为标题文本,当为空时,它只是第一个(空)字符。在添加Savedate之后,它似乎走出了这个原始的范围。您需要添加两件事才能使您的代码正常工作。
首先,您想在每次插入后折叠到最后,但您还需要重新定义标头范围( myRange
变量)添加到Header后插入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,PreserveForma tting:= True
myRange.Fields.Update
End With
End Sub
I am trying to fix up a Word 2010 page header containing fields for filename, save date and page number as well as some text between each, like so: filename+" "+save date+tab+page number. However, I can't seem to get the strings in their right places. What I have so far is this:
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
However, after executing the sub, the different parts are not were I intend. Instead, they show up as filename+" "+tab+page number+save date. What am I doing wrong here? If it is at all possible, I would prefer not resorting to .Select
.
(Please note that I recently asked a similar question.)
I believe your problem here stems from the fact that you set the myRange
variable to the header text which, when empty, is simply the first (empty) character. After you add the Savedate it seems to go out of this original range. You need to add two things to make your code work.
Firstly, you want to collapse to the end after each insertion but you also need to redefine the header range (myRange
variable) to the Header after inserting the SaveDate.
It's a bit ugly but the following code seems to do what you desire. Note that if I don't put the last wdCollapseEnd
in the code it doesn't work.
Finally, I'd update your fields at the end just so you don't have to manually do it yourself.
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
这篇关于在Word 2010标题中插入文本和字段而不使用.Select的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!