在Word 2010标题中插入文本和字段而不使用.Select [英] Inserting text and fields in Word 2010 header without using .Select

查看:133
本文介绍了在Word 2010标题中插入文本和字段而不使用.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆