使用VBA获取word中的所有交叉引用

2024-01-04

我有一个相当大的 Word 文档(> 400 页),其中有很多标题的交叉引用。到目前为止,我一直引用标题的标题,但现在我想更改它并引用标题所在的页面。

我没有通过 GUI 找到解决方案(当然,手动处理除外),所以我正在考虑编写一些 VBA。不幸的是,我只找到了一种列出所有可以交叉引用的目标的方法(通过GetCrossReferenceItems),但我需要一种方法来访问实际的交叉引用字段。

你能帮我吗?交叉引用字段与超链接相同吗?


交叉引用是 Word 文档中的字段,可以通过 Fields 集合 (ActiveDocument.Fields) 进行访问。您可以像任何其他集合一样循环遍历它们并检查它们的类型以查看它是否是您想要处理的类型。看起来对文本的交叉引用是类型 3 (wdFieldRef),对页码的交叉引用是类型 37 (wdFieldPageRef)。更改字段可能有点棘手;以下内容应该可以帮助您入门:

Sub ChangeFields()
    Dim objDoc As Document
    Dim objFld As Field
    Dim sFldStr As String
    Dim i As Long, lFldStart As Long

    Set objDoc = ActiveDocument
    ' Loop through fields in the ActiveDocument
    For Each objFld In objDoc.Fields
        ' If the field is a cross-ref, do something to it.
        If objFld.Type = wdFieldRef Then
            'Make sure the code of the field is visible. You could also just toggle this manually before running the macro.
            objFld.ShowCodes = True
            'I hate using Selection here, but it's probably the most straightforward way to do this. Select the field, find its start, and then move the cursor over so that it sits right before the 'R' in REF.
            objFld.Select
            Selection.Collapse wdCollapseStart
            Selection.MoveStartUntil "R"
            'Type 'PAGE' to turn 'REF' into 'PAGEREF'. This turns a text reference into a page number reference.
            Selection.TypeText "PAGE"
            'Update the field so the change is reflected in the document.
            objFld.Update
            objFld.ShowCodes = True
        End If
    Next objFld   
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用VBA获取word中的所有交叉引用 的相关文章

  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

    我将数据导入到 MS Access 中的临时表中 如下所示 我添加了需要使用 SQL 查询计算的 Gap 和 Previous Current 列 间隙阈值 是用户输入或范围提供给查询和例如是 300 GlobalID 对 ItemID 进
  • 如何暂停特定时间? (Excel/VBA)

    我有一个 Excel 工作表 其中包含以下宏 我想每秒循环一次 但如果我能找到执行此操作的函数 那就很危险了 难道不可能吗 Sub Macro1 Macro1 Macro Do Calculate Here I want to wait f
  • Excel VBA 用户窗体 - 当发生变化时执行 Sub

    我有一个包含很多文本框的用户表单 当这些文本框的值发生变化时 我需要通过调用子例程 AutoCalc 根据文本框值重新计算最终结果值 我有大约 25 个框 我不想向每个调用上述子例程的文本框单独添加 Change 事件 当某些值发生变化时调
  • 强制刷新工作表的“最后一个”单元格

    Pressing Ctrl End in Excel takes you to the bottom right most cell of the worksheet 如果删除最后的行或列并保存工作簿 最后一个单元格以及滚动条都会更新 我记
  • 打开 Excel 工作簿时自动运行 VBA 代码

    我有 VBA 代码 我想在打开 Excel 工作簿时运行 我尝试在代码应该运行的工作表中创建一个公共过程 Public Sub Workbook Open Some code here End Sub 工作簿打开时它不会运行 它应该在其中一
  • 当存储在集合中时,如何更改类属性的值

    我想将一个类存储在集合中 并且能够更改该类的属性 而不必删除集合项并再次将其添加回来 我的研究表明 如果不进行删除 替换操作 则无法更改项目本身 但是项目的属性又如何呢 下面的代码展示了如何执行此操作 当您运行宏时 调试窗口将显示存储对象的
  • 在Excel中显示毫秒

    我正在尝试在 Excel 宏中显示毫秒 我有一列整数 它们是以毫秒为单位的时间戳 例如 28095200 是上午 7 48 15 200 我想在它旁边创建一个新列 以保持运行平均值并以hh mm ss 000格式 Dim Cel As Ra
  • 向用户显示多条验证消息

    在 MS Access 中 如何将从 SELECT 语句检索到的行存储在数组中 并在一个消息框中显示多行 Dim rSEL rSUM rDes As DAO Recordset Dim vItem id vQnty vSum As Inte
  • 如何获取 Word 应用程序的 Hwnd/进程 ID,并将其设置为前台窗口

    我希望我的 Word 应用程序在自动化完成后进入前台 Excel 中的等效项很简单 Excel Application 对象有一个 Hwnd 属性 您可以将其与 Windows API 结合使用 SetForegroundWindow In
  • 查找最后一列并按最后一列排序

    我需要 Excel 来检测我拥有的最后一列并对该列进行排序 我有一个宏 每次使用它时都会生成一个新列 因此我无法使用常量 Sub sortyness Dim sortdata A1 Cells LastRow LastColumn As R
  • VB:在 Adob​​e Illustrator、Photoshop 中分配给布尔属性

    在使用 VBA 自动化 Adob e Illustrator CS3 时 我发现分配一个布尔变量 to a 布尔属性结果总是分配 False Dim New Path As Illustrator PathItem Dim v As Boo
  • 从单元格中具有多种颜色的单元格中提取字体颜色

    我有一个 Excel 工作表 我正在尝试将其存入 MySQL 数据库 我使用 VBA 将数据作为文本写入文件 然后将其上传到数据库 在工作表的单元格中 有一些已用颜色编码的字符串 颜色具有一定的含义 因此当我将值移入数据库时 我想保留它们
  • 如何根据文本框值过滤列表框值

    我在用户窗体上有一个文本框和一个列表框 我想根据我在文本框中输入的值过滤列表框中的值 名为 TMP 的工作表具有值 我根据文本框更改事件对其进行过滤 但在将该值添加到列表框中时它 会自动退出 Private Sub Textbox1 Cha
  • 使用 Excel 2010 通过存储过程读取/写入 SQL Server 2008 数据库

    我们有一个 SQL Server 2008 数据库 它有存储过程来处理读 写等 这些过程由各种应用程序内部使用 需要一个人直接更新数据库中名为 Employee 的表 更新非常简单 更新 VARCHAR 和 INT 外键 字段 问题是 Sh
  • 如何通过VBA宏遍历Word文档中的文本

    我想通过宏来计算 Word 文档中的字符 我不知道如何获取 Visual Basic 宏中文本的两个参考并浏览它 我想计算文档中每个字符的数量 例如文档中 ABZBB A x 1 B x 3 Z x 1 Sub Macro1 Dim Box
  • 使用 python 制作本地服务器应用程序的最佳方法

    我想要简单轻松地集成 python 和 vba 人们 如果他们在阅读本文后亲自见到我 阅读本文可能会杀了我 但我正在使用 django 开发服务器来实现此目的 有没有什么简单又好的方法 仅举个例子 我想使用 python 模块 openpy
  • 在 Word 2010 中开发功能区选项卡,在组标签名称中使用 & 符号

    我正在开发一个用于模板的功能区选项卡 MyTemplate dotm 对于 Word 2010 我的问题 我想在组的标签中使用与号 我尝试了很多方法 也用谷歌搜索了很多关于这个问题的信息 但没有任何效果 named amp decimal
  • 运行时错误“13”:IF 与 OR 语句组合的类型不匹配

    在我使用 Excel 的 VBA 代码中 Dim Field2 As String Field2 Cells i 4 Value If Right Field2 3 A 1 Or A 2 Or B 1 Or B 2 Or C 1 Or C
  • 如何创建动态变量名VBA

    我正在尝试根据单元格中的值在 VBA 中创建动态数量的变量 本质上我想要的结果是这样的Team1 Team2 to TeamX 任何帮助是极大的赞赏 Dim i x As Integer Set x Range J4 Value Dim T
  • 转置 CopyFromRecordset Excel VBA

    我的 Excel VBA 中有以下代码 可将 SQL 中的表中的数据复制到 Excel 中 该数据从单元格 C2 开始水平插入 但我希望将其垂直插入到 C 列 Sheets Control Range C2 CopyFromRecorset

随机推荐