我正在从模板中构建一个大文档。每个模板#OVERALLPAGENUMBER#
在页脚中都有一个关键字,我用一个字段以编程方式替换(使用 Excel VBA)。
如果我只需要该文档的页码,则以下内容就足够了:
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 } }
并在第 1 页正确生成“6”,在第 2 页正确生成“7”,等等...
不管我尝试什么,我都无法使用 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