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

2023-12-04

我正在根据模板分段构建一个大型文档。每个模板都有一个关键字#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 复制这种字段嵌套。 (宏记录器在这里没用)。有人能找到以编程方式创建这些字段的方法吗?


Solution

我的问题是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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 VBA 在 Word 中设置嵌套字段 的相关文章

  • vba - 扫描文档中的宏并替换宏文本?

    我面临一个谜题 我工作的地方有大量的 Word 模板 它们都包含一个包含一些错误的自动新建事件句柄 这个错误存在于所有模板中 我想知道是否有一种方法可以扫描包含此宏的模板的目录并稍微更改宏代码 这可能吗 是的 你可以这么做 您可以使用以下方
  • 使用VBA删除Excel中的非重复数据

    我尝试删除非重复数据并保留重复数据 我已经完成了一些编码 但什么也没发生 哦 这是错误 哈哈 这是我的代码 Sub mukjizat2 Dim desc As String Dim sapnbr As Variant Dim shortDe
  • 将单元格背景颜色设置为其包含的 RGB 值。如何?

    下面是我希望通过手动复制和粘贴以外的方式实现的屏幕截图 这是材料设计调色板 在 Excel 中看起来很棒 如何循环遍历范围 B2 B15 并将每个单元格背景颜色设置为其相应的包含颜色 也许是一个VBA loop去经历垂直 B 单元格范围 解
  • 将 PDFMaker 与 MS Outlook 结合使用

    我想将 Adob e PDFMaker 插件与 MS Outlook 2013 一起使用 使用 PDFMAKER 将多封电子邮件保存为 pdf https stackoverflow com questions 44723984 savin
  • 将 Excel 文件导入 Access 时更改数据类型

    将 Excel 文件导入 Access 时 有什么方法可以更改默认数据类型吗 顺便说一下 我使用的是 Access 2003 我知道有时我可以自由地将任何数据类型分配给正在导入的每个列 但这只能在我导入非 Excel 文件时进行 EDIT
  • 编辑Word书签更改字体

    我有一个使用 OpenXml 生成文档的 C 程序 它使用以下方法用值替换书签 private void FillBookmark BookmarkStart bookmark string value var text new Text
  • 通过 VBA MS_Access 将 MS Access 表导出为 dBase 5

    如何通过 VBA 将单个表导出为 dBase 5 文件 目前我正在使用这个VBA代码 DoCmd TransferDatabase acExport dBase IV DB Total acTable DB Total C Data Fal
  • 当应用程序继续运行时,如何清理 .NET 中的 COM 引用?

    我正在开发一个 NET 程序 该程序启动 Excel 的新实例 执行一些工作 然后结束 但必须让 Excel 保持运行 稍后 当程序再次运行时 它将尝试挂钩到前一个实例 在这种情况下处理 COM 对象释放的最佳方法是什么 如果我第一次没有对
  • 使用 Excel Interop 关闭 Excel 应用程序而不保存消息

    我正在使用 Excel Interop COM 对象 我正在编写一种方法 其中打开和关闭 Excel 应用程序 然后打开 Excel 工作簿和工作表 完成这些工作后 我将关闭应用程序和工作簿 我的问题是 此方法可以重复调用多次 当工作表和应
  • 如果单元格包含 1 个或多个关键字,则更改不同单元格的值

    我有一个列 其中包含一些字符串描述 例如 Bob davids mowing the lawn tipping cows 此外 我将在不同的工作表或列上列出关键字列表 例如工作关键字列表1 davids work 播放关键字列表 mowin
  • 如何通过VBA代码修复仅在Excel共享模式下发生的运行时错误400

    我真的不知道400错误是什么原因造成的 下面的代码在正常模式下运行得很好 但是一旦我在共享模式下启用 Excel 并尝试使用用户表单 它就会给我 VBA 400 我在这里尝试做的是在向用户显示用户表单后更改形状的文本并禁用其 OnActio
  • Excel 的查找和查找下一个 VBA

    我一直在试图弄清楚如何处理这个问题 但基本上我想要一种方法来打印 B 列中的值 给定与 A 列匹配的特定值 例如 Column A Column B 1 ABC 2 DEF 3 GHI 1 JKL 我想在使用 find findnext 或
  • Excel动态数组运行重复项计数

    我一直在重新设计一些旧的电子表格工具 以便使用 Excel 的较新工具来过滤和格式化动态数据输出动态数组公式 https support microsoft com en us office dynamic array formulas a
  • 求除某些列之外的 SUM

    以下是我所拥有的 A B C D E F G H I J K 1 2 3 4 5 6 7 8 9 10 50 为了找到SUM
  • WebAPI 和 Angular JS Excel 文件下载 - 文件损坏

    我正在 WebAPI 中生成 Excel 文件 我将其 存储 在内存流中 然后放入响应 如下所示 var result new HttpResponseMessage HttpStatusCode OK Content new Stream
  • 从嵌入的谷歌地图中提取标记坐标

    对此还很陌生 所以请耐心等待 我需要从嵌入的谷歌地图中提取标记坐标 示例链接是http www picknpay co za store search http www picknpay co za store search我想提取搜索时地
  • CURL 相当于使用 VBA 的 POST JSON 数据

    我知道这与之前提出的一些问题类似 但有些东西仍然对我不起作用 如何执行以下命令 curl X POST data statements json H Content Type application json user username p
  • 您可以调整用户窗体的这些代码吗:使其小而高效

    当 userfrom 按以下顺序激活时 我想在运行时添加动态用户表单控件 例如 标签 文本框 我想要类似以下的东西 当用户表单激活时 它需要询问用户字段的数量 他 她想要插入 如果用户回答7 则需要按以下顺序添加字段 3 列顺序 标签1 文
  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

    我将数据导入到 MS Access 中的临时表中 如下所示 我添加了需要使用 SQL 查询计算的 Gap 和 Previous Current 列 间隙阈值 是用户输入或范围提供给查询和例如是 300 GlobalID 对 ItemID 进
  • 获取给定日期的周数

    例子 DD MM YYYY 1 1 2009 should give 1 31 1 2009 should give 5 1 2 2009 should also give 5 Format 1 2 2009 ww 回报6 那么 怎样才能得

随机推荐

  • 如何合并2个numpy数组?

    我觉得我缺少一些文档 但我在这个特定示例中找不到任何内容 一切都只是关于连接或堆叠数组 我有数组 x 和数组 y 形状均为 2 3 x 1 2 3 4 5 6 y 7 8 9 10 11 12 x 1 2 3 4 5 6 y 7 8 9 1
  • Visual Studio 2022 创建 Azure TimeTrigger 函数会导致没有文件的空解决方案

    当我尝试从 新解决方案 模板创建 计时器触发器 应用程序时 Visual Studio Professional 2022 创建新项目 gt Azure Functions gt 计时器触发器 会创建空解决方案 0 个项目 当我尝试基于任何
  • C/C++ 算法在不同平台上从相同种子生成相同的伪随机数序列? [复制]

    这个问题在这里已经有答案了 标题说明了一切 我正在寻找最好是独立的东西 因为我不想添加更多的库 性能应该很好 因为我需要在紧密的高性能循环中使用它 我想这将以牺牲随机性为代价 任何特定的伪随机数生成算法都会像这样表现 问题在于rand是它没
  • Vb.Net 将 StrDup 转换为 C#.net

    我有这行代码 strKey Strings StrDup intKeySize intLength chrKeyFill 这段代码在 C 中相当于什么 我好像找不到啊 strKey new String chrKeyFill intKeyS
  • 为继承enable_shared_from_this的类获取unique_ptr

    通常我更喜欢返回unique ptr来自工厂 最近遇到了退货的问题unique ptr对于继承的类enable shared from this 此类用户可能会意外地调用shared from this 尽管它不属于任何人所有shared
  • M2_HOME 和 MAVEN_HOME 有什么区别

    我有两个版本的 Maven Home 环境变量 M2 HOME and MAVEN HOME 需要设置哪一项呢 MAVEN HOME适用于 Maven 1 M2 HOME适用于 Maven 2 及更高版本 Maven 2 是对 Maven
  • 使用 cygwin ssh-agent 正在运行,但 git 仍然提示输入密码

    我在 Windows 7 上使用 cygwin 作为终端 我发现了一些在 cygwin 中运行 ssh agent 的建议 这样我就不必每次运行 git fetch pull push 时都输入密码 我将以下内容添加到我的 bash pro
  • 升级到Flutter 2.5.1后无法构建

    一旦我升级到 Flutter 2 5 1 我的项目就会停止构建和运行 并给出以下错误 Users admin Flutter flutter pub cache hosted pub dartlang org geolocator andr
  • Webkit的transitionEnd事件分组

    我有一个 HTML 元素 我附加了一个webkitTransitionEnd event function transEnd event alert Finished transition var node document getElem
  • python 模块的 vscode 导入错误

    我正在尝试从一级目录向上进行 python 导入 import sys sys path append from cn modules import exception 当我尝试执行 Run Build Task 时 VSCode 出现错误
  • 如何避免视图中的循环?

    当我构建视图时 我想消除尽可能多的处理逻辑 理想情况下 我想只使用 HTML 并使用 Razor 渲染值 因此 假设我有一个 FooModel 其中包含 BarModel 对象列表 public class FooModel public
  • 如何使用 VBScript 列出具有方法的所有 WMI 类?

    使用 VBScript 如何列出所有具有方法的 WMI 类 Run a SELECT 架构查询获取命名空间中所有类的列表 然后检查每个类的Methods Count strComputer strNamespace root cimv2 S
  • Java 6 - 将 java.sql.Type 映射到 Java 类型

    我正在寻找一个表的链接 其中包含 SQL 类型 java sql Types 到 Java 类型之间的映射 你知道我在哪里可以找到一个吗 The JDBC 4 x 规范 由 提供JSR 221 在标题为 附录 B 的附录 B 中提供了此信息
  • 当 server_name 不匹配时,Nginx 会丢弃

    我有两个虚拟主机 一个在domain tld80端口 其他都开sub domain tld端口 443 启用 SSL 我在 DNS 服务器上添加了一个 CNAME 条目 用于重定向我的sub子域到domain tld 一切都按预期进行 但是
  • 当定义和声明分开时,如何一次性初始化数组的所有元素?

    当我们写这样的东西时 int arr 5 0 or int arr 5 0 没有问题 但是当我们做这样的事情时 int arr 5 arr 5 0 发生错误 对此有何解释 数组可以初始化 但不能直接赋值 这只是语言定义的一部分 您可以使用
  • 如何使每次访问状态时都执行控制器块?

    我有一个附加到某个状态的控制器 每次访问该状态时 我都需要我的控制器运行一个进行验证的块 我怎样才能做到这一点 每次您应该提到时重新加载控制器reload true你的选择权 stateui router 的声明 示例代码 statePro
  • 我的 geopy.geocoders 抛出错误:SSL:CERTIFICATE_VERIFY_FAILED。我该如何解决这个问题? [复制]

    这个问题在这里已经有答案了 当我尝试运行这段代码时 from geopy geocoders import Nominatim geolocator Nominatim user agent ryan data location geolo
  • 使用jquery获取两个日期之间的差异

    有人可以建议一个 jQuery 插件来计算两个日期之间的差异 日期也可能包含时间 并将其显示为 32 天 13 小时 20 分钟 等吗 您可以使用添加 减去以及执行许多其他操作nativeJavaScriptDate目的 它是足够强大满足您
  • java 1.4 的 json 库

    我使用的是 JCAPS 5 1 3 只有 Java 1 4 需要处理 Json 数据 不幸的是 我发现的所有库都使用 Java 1 5 及更高版本 我刚刚在这个线程中发现了很多新的实现 但哪一个适用于 1 4 有没有一个稳定且简单的版本可以
  • 使用 VBA 在 Word 中设置嵌套字段

    我正在根据模板分段构建一个大型文档 每个模板都有一个关键字 OVERALLPAGENUMBER 在页脚中 我以编程方式用字段替换 使用 Excel VBA 如果我需要的只是该文档的页码 那么以下内容就足够了 Dim storyRange A