gpt4 book ai didi

vba - 使用 VBA 在 Word 中设置嵌套字段

转载 作者:行者123 更新时间:2023-12-04 20:00:32 25 4
gpt4 key购买 nike

我正在从模板中分段构建一个大型文档。每个模板在页脚中都有一个关键字 #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

最佳答案

我知道这已经过时了,但昨天尝试这样做时,我发现创建嵌套字段的解决方案比使用 Selection 对象更简单。我在网上找到的唯一解决方案错误地说,如果不使用 Selection 对象,就无法插入嵌套字段。但是,我发现可以在 Field.Code 范围内插入一个嵌套的字段,这使得代码更容易操作,速度更快,更直观。如:

Dim storyRange As Object 'Word.Range
For Each storyRange In oDoc.StoryRanges
Do
With storyRange.Find
.Text = "#OVERALLPAGENUMBER#"
.Wrap = 1 'wdFindContinue
.Execute
While .Found
Set fld1 = storyRange.Fields.Add(Range:=storyRange, Type:=-1, Text:="=p+" & OverallPageNumber, PreserveFormatting:=False)
Set fld2 = storyRange.Fields.Add(Range:=fld1.Code.Characters(3), Type:=-1, Text:="PAGE", PreserveFormatting:=False)
fld1.Update
.Execute
Wend
End With
On Error Resume Next
Set storyRange = storyRange.NextStoryRange
On Error GoTo 0
Loop While Not storyRange Is Nothing
Next

关于vba - 使用 VBA 在 Word 中设置嵌套字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15338309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com