2013-02-07 81 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

相關問題