Word宏一键交叉引用

复制代码
Sub Thesis_Final_NoErrors_KeepFormat()
    Dim doc As Document: Set doc = ActiveDocument
    Dim rng As Range, numRng As Range
    Dim refItems As Variant
    Dim i As Long, matchIndex As Long
    Dim citeCount As Long: citeCount = 0
    Dim cleanNum As String
    
    ' 1. 彻底放弃所有会导致报错的 Application 属性
    ' 只保留最基础的屏幕刷新开关
    Application.ScreenUpdating = False
    On Error Resume Next

    ' 2. 直接获取自动编号索引(跳过所有循环扫描,防卡死)
    refItems = doc.GetCrossReferenceItems(wdRefTypeNumberedItem)
    If IsEmpty(refItems) Then
        MsgBox "未识别到自动编号,请确保参考文献有灰色底纹。"
        Exit Sub
    End If

    ' 3. 定义搜索范围
    Set rng = doc.Content
    With rng.Find
        .ClearFormatting
        .Text = "\[[0-9]{1,3}\]"
        .MatchWildcards = True
        .Forward = True
        .Wrap = wdFindStop
    End With

    ' 4. 核心循环:使用 Range 操作,绝不使用 Selection
    Do While rng.Find.Execute
        ' 提取 [12] 中的 12
        cleanNum = rng.Text
        cleanNum = Replace(Replace(cleanNum, "[", ""), "]", "")
        
        matchIndex = 0
        For i = 1 To UBound(refItems)
            ' 匹配编号
            If InStr(1, LTrim(refItems(i)), cleanNum) = 1 Or _
               InStr(1, LTrim(refItems(i)), "[" & cleanNum & "]") = 1 Then
                matchIndex = i
                Exit For
            End If
        Next i

        If matchIndex > 0 Then
            ' 【关键核心】:保留你的方括号,只替换中间的数字
            Set numRng = rng.Duplicate
            numRng.Start = numRng.Start + 1 ' 避开 [
            numRng.End = numRng.End - 1     ' 避开 ]
            
            ' 插入交叉引用:wdNumberRelativeContext 确保只插入编号数字
            numRng.InsertCrossReference ReferenceType:=wdRefTypeNumberedItem, _
                                     ReferenceKind:=wdNumberRelativeContext, _
                                     ReferenceItem:=matchIndex, _
                                     InsertAsHyperlink:=True
            
            ' 将整个 [n] 统一设为上标
            With rng.Font
                .Superscript = True
                .Underline = wdUnderlineNone
                .ColorIndex = wdAuto
            End With
            
            citeCount = citeCount + 1
        End If
        
        ' 每处理一些就给系统喘息机会,防止图片过多导致假死
        If citeCount Mod 10 = 0 Then DoEvents
        rng.Collapse wdCollapseEnd
    Loop

    Application.ScreenUpdating = True
    MsgBox "处理完成!转换了 " & citeCount & " 处引用。" & vbCrLf & "若数字重叠,全选(Ctrl+A)按F9刷新即可。"
End Sub

Sub Remove_Physical_Brackets_Around_Fields()
    Dim fld As Field
    Dim preChar As String, nextChar As String
    Dim i As Long
    
    Application.ScreenUpdating = False
    On Error Resume Next
    
    ' 遍历文档中所有的域
    ' 倒序遍历是为了防止删除字符后索引错乱
    For i = ActiveDocument.Fields.Count To 1 Step -1
        Set fld = ActiveDocument.Fields(i)
        
        ' 检查是否为交叉引用域 (REF 或 NOTEREF)
        If fld.Type = wdFieldRef Or fld.Type = wdFieldNoteRef Then
            
            ' 获取域前后的字符
            preChar = fld.Result.Characters.First.Previous
            nextChar = fld.Result.Characters.Last.Next
            
            ' 如果域前面是 [,删掉它
            If preChar = "[" Then
                fld.Result.Characters.First.Previous.Delete
            End If
            
            ' 如果域后面是 ],删掉它
            If nextChar = "]" Then
                fld.Result.Characters.Last.Next.Delete
            End If
            
        End If
    Next i
    
    ' 针对可能存在的纯文本重叠 [[ ]] 进行最后清理
    With ActiveDocument.Content.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "\[\["
        .Replacement.Text = "["
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
        
        .Text = "\]\]"
        .Replacement.Text = "]"
        .Execute Replace:=wdReplaceAll
    End With

    Application.ScreenUpdating = True
    MsgBox "清理完成!现在应该只剩下一层自带括号的引用了。"
End Sub

视频教程:Word论文一键交叉引用_哔哩哔哩_bilibili

相关推荐
AI导出鸭10 小时前
怎么让文心做表格?AI导出鸭苹果版将文心输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格
人工智能·chatgpt·word·excel·ai导出鸭
wujian83111 天前
AI手机版怎么直接生成word?用“AI 导出鸭”把碎片时间变成专业文档
人工智能·ai·chatgpt·智能手机·word·ai导出鸭
鲲穹AI种草1 天前
多文档批量整理如何选?多款 Word 处理工具能力客观记录
word·文档处理
AI英德西牛仔1 天前
Claude导出word指令的PC端最优解:AI导出鸭电脑版底层逻辑全拆解
人工智能·word·excel·deepseek·ai导出鸭
Am-Chestnuts1 天前
DeepSeek公式怎么复制到Word?用DS随心转保留LaTeX并生成可编辑文档
word
AI英德西牛仔1 天前
Gemini 导出 word 指令 时代,PC 端 AI 工作流的最后一块拼图:AI 导出鸭电脑版深度拆解
人工智能·word·excel·deepseek·ai导出鸭
AI导出鸭1 天前
怎么让Grok做表格?AI导出鸭苹果版通过专属解析引擎,将Grok输出的管道表格智能还原为二维结构,一键导出Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
百事牛科技1 天前
Word部分区域可编辑:先选中再锁,两步搞定
word
DS随心转APP2 天前
AI生成的word怎么下载?AI导出鸭技术架构深度测评
人工智能·ai·架构·word·deepseek·ai导出鸭
Am-Chestnuts2 天前
DeepSeek复制到Word有黑底怎么办?用DS随心转保留原文再整理格式
word