我正在從模板構建一個大型文檔。每個模板在腳本中都有一個關鍵字#OVERALLPAGENUMBER#
,我用編程方式替換(使用Excel VBA)的字段。使用VBA在Word中設置嵌套字段
如果我需要的是該文件的頁碼,以下就足夠了:
Dim storyRange As Object 'Word.Range
For Each storyRange In oDoc.StoryRanges
Do
With storyRange.Find
.Text = "#OVERALLPAGENUMBER#"
.Wrap = 1 'wdFindContinue
.Execute
While .found
storyRange.Fields.Add Range:=storyRange, Type:=-1, Text:="PAGE", PreserveFormatting:=True
.Execute
Wend
End With
On Error Resume Next
Set storyRange = storyRange.NextStoryRange
On Error GoTo 0
Loop While Not storyRange Is Nothing
Next
我已經測試此代碼,併成功把在頁腳中的頁碼。然而,我想要的是一個嵌套(公式)字段,它爲頁碼添加了一個固定數字,以便我可以在多個文檔中顯示頁數。我的解決辦法,如果我做手工(用Ctrl + F9),給人看起來像這樣的域代碼:
{ = 5 + { PAGE } }
,正確地產生「6」第1頁,「7」第2頁等上..
無論我嘗試什麼,我都無法使用VBA複製這種字段嵌套。 (宏記錄器在這裏是無用的)。任何人都可以找到一種方法來編程創建這些領域?
解決方案
我的問題是,有PreserveFormatting:=True
是其他內讓我嘗試的方式窩一個字段。現在,下面簡單的解決方案的工作原理:
With storyRange.Find
.Text = "#POLICYPAGENO#"
.Wrap = 1 'wdFindContinue
.Execute
While .found
storyRange.Select
With oDoc.ActiveWindow
.Selection.Fields.Add Range:=.Selection.Range, Type:=-1, Text:="PAGE", PreserveFormatting:=False
.Selection.MoveLeft Unit:=1, Count:=1, Extend:=1
.Selection.Fields.Add Range:=.Selection.Range, Type:=-1, PreserveFormatting:=False
.Selection.TypeText Text:="= " & OverallPageNumber & " +"
End With
.Execute
Wend
End With
那麼,我的查找方法沒有自動選擇文本,所以沒有成功的蝙蝠。然後我修改了你的代碼,首先執行'storyRange.Select',但即便如此,所有代碼最終都是在純文本中插入兩個空白字段,導致{\ * MERGEFORMAT} = {+ * * MERGEFORMAT} PAGE – Alain 2013-03-11 12:47:03
好的,你只需要在'storyRange.Select'後面添加第一個字段後,將'Selection'移動到Field Code內部。沒有看到你的文檔有點難,但像'Selection.MoveLeft Unit:= wdCharacter,Count:= 1'。它可能沒有工作,因爲'\ * MERGEFORMAT',讓我看看。 – CuberChase 2013-03-11 12:51:07
請參閱最新的答案。我相信如果現在使用'storyRange.Select',這應該可以工作。 – CuberChase 2013-03-11 12:54:16