用于根据选择插入交叉引用的宏

2024-01-11

我目前在一家使用固定内部风格文档的公司工作。这包括我们的 Word 模板中内置的多级编号标题。 IE。

  1. 标题 1

1.1 标题 2

1.1.1 标题 3

etc...

我们当前任务的很大一部分涉及添加对文档中其他部分的交叉引用。当文档有数百页且每页大约有 10 个参考文献时,这可能会非常耗时。

我想知道是否可以设置一个宏来根据光标突出显示的内容添加外部参考。 IE。如果您有一个句子“请参阅第 3.2 条”,您可以突出显示“3.2”部分,运行宏并插入链接到标题 3.2 的外部引用。

不确定这是否可能,但如果有任何建议,我将不胜感激。


该代码将有条件地执行您想要的操作。

Sub InsertCrossRef()

    Dim RefList As Variant
    Dim LookUp As String
    Dim Ref As String
    Dim s As Integer, t As Integer
    Dim i As Integer

    On Error GoTo ErrExit
    With Selection.Range
        ' discard leading blank spaces
        Do While (Asc(.Text) = 32) And (.End > .Start)
            .MoveStart wdCharacter
        Loop
        ' discard trailing blank spaces, full stops and CRs
        Do While ((Asc(Right(.Text, 1)) = 46) Or _
                  (Asc(Right(.Text, 1)) = 32) Or _
                  (Asc(Right(.Text, 1)) = 11) Or _
                  (Asc(Right(.Text, 1)) = 13)) And _
                  (.End > .Start)
            .MoveEnd wdCharacter, -1
        Loop

ErrExit:
        If Len(.Text) = 0 Then
            MsgBox "Please select a reference.", _
                   vbExclamation, "Invalid selection"
            Exit Sub
        End If

        LookUp = .Text
    End With
    On Error GoTo 0

    With ActiveDocument
        ' Use WdRefTypeHeading to retrieve Headings
        RefList = .GetCrossReferenceItems(wdRefTypeNumberedItem)
        For i = UBound(RefList) To 1 Step -1
            Ref = Trim(RefList(i))
            If InStr(1, Ref, LookUp, vbTextCompare) = 1 Then
                s = InStr(2, Ref, " ")
                t = InStr(2, Ref, Chr(9))
                If (s = 0) Or (t = 0) Then
                    s = IIf(s > 0, s, t)
                Else
                    s = IIf(s < t, s, t)
                End If
                If LookUp = Left(Ref, s - 1) Then Exit For
            End If
        Next i

        If i Then
            Selection.InsertCrossReference ReferenceType:="Numbered item", _
                                           ReferenceKind:=wdNumberFullContext, _
                                           ReferenceItem:=CStr(i), _
                                           InsertAsHyperlink:=True, _
                                           IncludePosition:=False, _
                                           SeparateNumbers:=False, _
                                           SeparatorString:=" "
        Else
            MsgBox "A cross reference to """ & LookUp & """ couldn't be set" & vbCr & _
                   "because a paragraph with that number couldn't" & vbCr & _
                   "be found in the document.", _
                   vbInformation, "Invalid cross reference"
        End If
    End With
End Sub

以下是条件:-

  1. 文档中有“编号项目”和“标题”。您要求标题。我做了编号项目,因为我的电脑上没有这种风格。然而,在我的电脑上“标题”are编号的项目。如果该代码不适用于您的文档,请更换wdRefTypeNumberedItem for wdRefTypeHeading在代码中标记的行处。
  2. 我假设编号格式为“1”“1.1”,“1.1.1”。如果你有什么不同的话,也许是“1”。 “1.1.”、“1.1.1.”,代码需要调整。关键点是代码将查找数字后面的空格或制表符。如果后面跟着句点、右括号或破折号,则不起作用。另外,如果您碰巧选择“1.2”。 (最后一个句号)在文本中代码将忽略句号并查找引用“1.2”。请注意,代码对选择中的偶然错误不敏感。它将删除任何前导或尾随空格以及意外包含的回车符或段落标记以及句号。

该代码将用它自己的(相同)文本替换您所做的选择。这可能会导致现有格式发生更改。事实上,插入的参考字段从目标中获取文本。我不太清楚它适用哪种格式,目标的格式还是被替换的格式。如果有的话,我没有处理这个问题。

请查看代码插入的交叉引用的属性。你会看到InsertAsHyperlink是真的。如果您愿意,可以将其设置为 False。IncludePosition是假的。如果将此属性设置为 True,您将看到代码替换的数字中添加了“上方”或“下方”。

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

用于根据选择插入交叉引用的宏 的相关文章

  • 循环浏览文件夹中的工作簿

    我正在尝试从文件夹中的所有工作簿复制某些单元格 下面的代码仅循环遍历第一个文件 VBA 新手 欢迎任何帮助 提前致谢 Sub Get Data Dim Directory As String Dim Filename As String D
  • 如何在VBA中将文本文件读取到数组中

    我正在尝试将制表符分隔的文本文件提取到数组中 我已经知道如何将该文本文件读入电子表格中 以下是我的代码 它运行良好 While Not EOF iFile Line Input iFile LineText Dim arr arr Spli
  • VBA 中的 If 和 Or 多个语句

    我想将包含 14 列的 Excel 文件重新分配到正确的列 包含 12 000 行 为此 我必须使用一些 If And Or 语句将数字放入矩阵中 但显然我没有从中得到正确的东西 它使我的所有单元格为零 而具有值的单元格应保留该值 我哪里出
  • 从 CSV 中去除额外的文本限定符

    我有一个 CSV 其中某些字段由 符号分隔作为文本限定符 参见下面的例子 请注意 每个整数 例如 1 2 3 等 都应该是一个字符串 合格的字符串被 符号包围 1 2 3 qualifiedString1 4 5 6 7 8 9 10 11
  • VBA FreeLibrary 不卸载 DLL

    当我使用完一个 DLL 文件后 我需要删除它 代码完成后清理 我尝试在 Excel VBA 中使用 LoadLibrary 和 FreeLibrary 但无论我做什么 Excel exe 都会坚持 DLL 文件 Public Declare
  • 根据用户名获取广告详细信息

    我有一个代码可以从 AD 检索用户的详细信息 例如电子邮件地址 电话号码等 我当前使用的代码是 Set objSysInfo CreateObject ADSystemInfo strUser objSysInfo UserName msg
  • 将jsp表导出到excel、word、pdf

    任何人都可以建议我任何库 jar 文件 我可以使用它们将我的表导出到 excel pdf word 请告诉我是否有任何可以在 jsp 中创建报告的库 还应该提到的是 您只需输出 HTML 表格并将响应类型设置为即可将表格导出到 Excela
  • 将工作表保存为 CSV,且 Excel 公式完好无损

    我完全使用 VBA for Excel 工作 我的解决方案必须完全是程序化的 而不是用户驱动的 该解决方案的要求是用户启动一个宏来获取工作簿并将 8 个工作表保存到单独的 CSV 文件中 保留公式并丢弃公式分辨率 我有一系列工作表 sht
  • 雅虎财经历史股价动力查询返回301响应

    直到今天我的 Excel 2016 power query 都能够从以下 URL 获取历史股票定价数据https finance yahoo com quote AAL history p AAL https finance yahoo c
  • MS Office SaveAs 类型 FileDialog 在 vb 中带有过滤器

    我想创建一个带有过滤器的 另存为 文件对话框 但这似乎无法使用 FileDialog 类 Microsoft Office 12 0 对象库 实现 文档实际上提到了这一点here http msdn microsoft com en us
  • 通过 VBA MS_Access 将 MS Access 表导出为 dBase 5

    如何通过 VBA 将单个表导出为 dBase 5 文件 目前我正在使用这个VBA代码 DoCmd TransferDatabase acExport dBase IV DB Total acTable DB Total C Data Fal
  • 我可以使用 VBA 将密码“传递”到 Excel 中的外部数据库连接吗?

    我正在尝试使用 VBA 隐藏我在 Excel 工作表中设置的数据连接的密码 由于 Excel 以纯文本形式存储外部数据源的密码 因此我想让 VBA 调用表的刷新并提供密码 我录制了刷新表格并输入密码的宏 但令我沮丧的是 它似乎省略了密码部分
  • 是否有任何公式可用于将特定单元格复制指定次数?

    目前我正在处理一份数据 其中我有一个公司名称列表 例如 1 A 2 B 3 C 还有很多 需要的结果是 1 A 2 A 3 A 4 A 5 A 6 B 7 B 8 B 9 B 10 B 11 C 12 C 13 C 14 C 15 C 等等
  • CURL 相当于使用 VBA 的 POST JSON 数据

    我知道这与之前提出的一些问题类似 但有些东西仍然对我不起作用 如何执行以下命令 curl X POST data statements json H Content Type application json user username p
  • Excel:包括过滤器中的第一行

    我正在特别考虑 Excel VBA 的 AutoFilter 方法 但我认为我的问题也适用于 GUI 当我将筛选器应用于 Excel 工作表时 未选择任何内容 筛选器将应用于所有行从第二次开始 有什么方法可以包含第一行 以便它也可以被过滤掉
  • Outlook 中用于删除重复电子邮件的宏 -

    Public Sub RemDups Dim t As Items i As Integer arr As Collection f As Folder parent As Folder target As Folder miLast As
  • 您可以调整用户窗体的这些代码吗:使其小而高效

    当 userfrom 按以下顺序激活时 我想在运行时添加动态用户表单控件 例如 标签 文本框 我想要类似以下的东西 当用户表单激活时 它需要询问用户字段的数量 他 她想要插入 如果用户回答7 则需要按以下顺序添加字段 3 列顺序 标签1 文
  • 如何使用 C# 将表格粘贴到 Ms-Word 文档的末尾

    我有一个预制的 Word 模板 其中有一个表格 我想打开它 然后在文档末尾添加 粘贴 另一个表格 问题是它不会转到文档的末尾 而是将新表格粘贴到原始表格的第一个单元格中 任何帮助将不胜感激 previous code copied a ta
  • 如何暂停特定时间? (Excel/VBA)

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

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然

随机推荐

  • 如何添加简单的用户角色 - ASP.NET MVC C#

    我对 ASP NET MVC 还很陌生 并且一直在研究添加用户角色的许多不同方法 对于我的 ASP NET MVC 站点 我想使用当您创建新的 ASP NET MVC 项目时自动为您创建的用户数据库 其中包含表 AspNet角色 AspNe
  • 动态控制 @Formula 列的延迟/急切加载

    我们有一些带有 Hibernate 注释的属性的实体 Formula注解 注释中的 SQL 片段主要运行标量子查询 例如COUNT查询 例如 我们有一个四层深的一对多关系层次结构 A lt B lt C lt D where lt 标记一对
  • 在 Rmarkdown 文本中使用变量

    我正在创建一个 Rmarkdown 文档 我的代码块检查数据集中的列 行数并将信息保存在变量中 r echo FALSE warning FALSE df dimenzions lt dim demo 我想使用存储在变量中的数据 信息rma
  • .Net WebApi 中的多个 Await 异步

    我们有许多异步控制器和服务 它们利用await async关键词 许多操作看起来有点像 public async Task
  • 如何将字符串转换为base64字节数组,这有效吗?

    我正在尝试编写一个将字符串转换为 base64 字节数组的函数 我尝试过这种方法 public byte stringToBase64ByteArray String input byte ret System Text Encoding
  • Drupal 7 默认 .htaccess

    我正在寻找 Drupal 7 的默认 htaccess 代码 由于某种原因 安装根本没有更新 htaccess 文件并且它是空白的 任何帮助将不胜感激 因为我在任何地方都找不到这个 实际上 Drupal 官方源代码在 GitHub 上 ht
  • Objective-C:检索 Class 实例的超类的首选方法

    我想知道以下两种方法中的哪一种是检索 a 的超类的正确方法或首选方法Class多变的 Class getSuperclass Class cls return cls superclass Class getSuperclass Class
  • 无法在横向模式下点击 (x,y) 坐标

    在 Xcode 8 Swift 3 中 使用坐标 withNormalizedOffset CGVector 函数与 XCUIElement 交互似乎仅在纵向模式下有效 为了测试此功能 我创建了一个单屏项目 其中一个按钮位于视图中央 然后我
  • 无法执行 Laravel artisan 命令

    我刚刚安装了最新版本的 Laravel 并尝试从 Git Bash 运行以下命令 php artisan migrate make create users table table users create 这会触发以下错误 Could n
  • Python 社交身份验证重定向到同一 URL

    当我使用装饰器 login required 选择某个视图后 用户将被重定向到 http example com login http example com login 下一个 anuncio adicionar right 但是 在我使
  • 你能相信mysql_insert_id吗? [复制]

    这个问题在这里已经有答案了 我有一个注册页面 然后将数据插入 MySQL 中的两个表中 第一个是用户名 密码 电子邮件等技术信息 另一个是姓名 地址等个人信息 我的技术信息表有一个主键自增ID 然后 一旦我在该表中创建了该行 我立即在通用信
  • 条形图后面的情节线

    我想创建一个条形图 其中条形图绘制在水平线的顶部 以下代码完成此操作 y lt c 1 2 3 5 barplot y abline h mean y barplot y add T 然而 我担心add T参数输入barplot 如果重复使
  • MediaPlayer.isplaying() 方法中的 java.lang.IllegalStateException

    public static MediaPlayer mp null public static void playGeneric int name final ImageButton button final ImageButton per
  • 将两个 CGPoint 转换为 CGRect

    鉴于两个不同的CGPoints 将它们变成CGRect Example CGPoint p1 CGPointMake 0 10 CGPoint p2 CGPointMake 10 0 我怎样才能把它变成一个CGRect 这将采用两个任意点并
  • 在 Linux 上开发 C# [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想知道是否有有效的开源工具可以在 Linux Ubuntu 上开发 C 应用程序 特别是 我必须开发
  • 为什么 Python 中的列表理解如此称呼?

    我知道 Python 不是第一个具有列表理解的语言 我只是对这个名字的历史感兴趣 我特别感兴趣的是为什么它被称为理解 为什么 Python 中的列表理解如此称呼 这个名字来源于一个概念集合理解 http en wikipedia org w
  • Python range 函数如何在实际参数之前有一个默认参数?

    我正在编写一个函数 它接受一个可选列表并将其扩展到指定的长度 而不是写成foo n list None 我想知道如何模拟 Python 范围函数的行为 其工作原理如下 gt gt gt range 10 0 1 2 3 4 5 6 7 8
  • 批量上传图片到SSRS

    我们用了优秀的RSBuild http rsbuild codeplex com用于将报告批量上传到 SQL Server Reporting Services SSRS 但我找不到批量上传图像的方法 使用报告管理器一次上传一张图像是愚蠢的
  • (异步() => { })();这是什么?

    async function test async gt var a await this test1 var b await this test2 a var c await this test3 b this doThis a b c
  • 用于根据选择插入交叉引用的宏

    我目前在一家使用固定内部风格文档的公司工作 这包括我们的 Word 模板中内置的多级编号标题 IE 标题 1 1 1 标题 2 1 1 1 标题 3 etc 我们当前任务的很大一部分涉及添加对文档中其他部分的交叉引用 当文档有数百页且每页大