You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Word高亮宏:仅扫描选中文本以提升大文档处理效率

仅针对选中文本的B2词汇高亮宏

原宏的问题是循环中重复拆分词汇列表会额外消耗资源,且未严格限定搜索范围边界。下面是修改后的版本,既能只处理选中的文本,还优化了处理速度:

Sub B2_Highlighter_OnlySelectedText()
    Application.ScreenUpdating = False
    Options.DefaultHighlightColorIndex = wdBrightGreen
    
    ' 判断是否有选中内容
    If Selection.Type = wdSelectionIP Then
        MsgBox "请先选中需要处理的文本!", vbExclamation
        Application.ScreenUpdating = True
        Exit Sub
    End If
    
    Dim FRDoc As Document, FRListArr() As String, i As Long
    Dim targetRange As Range
    
    ' 读取外部词汇文档并一次性拆分成数组(提升效率)
    Set FRDoc = Documents.Open("C:\Users\Milan van Bree\Google Drive\Heerbeeck College\3. Extra materiaal algemeen\Macros for Word\B2words.docx", ReadOnly:=True, Addtorecentfiles:=False, Visible:=False)
    FRListArr = Split(FRDoc.Range.Text, vbCr)
    FRDoc.Close False
    Set FRDoc = Nothing
    
    ' 锁定选中区域作为处理范围
    Set targetRange = Selection.Range
    
    With targetRange.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .MatchWholeWord = True
        .MatchCase = False
        .Replacement.Text = "^&"
        .Replacement.Highlight = True
        .Forward = True
        .Wrap = wdFindStop ' 关键:搜索到选中区域末尾即停止,不涉及文档其他部分
        
        ' 遍历词汇数组,跳过空行
        For i = LBound(FRListArr) To UBound(FRListArr)
            If Trim(FRListArr(i)) <> "" Then
                .Text = Trim(FRListArr(i))
                .Execute Replace:=wdReplaceAll
            End If
        Next
    End With
    
    Set targetRange = Nothing
    Application.ScreenUpdating = True
End Sub

关键修改说明:

  • 新增选中内容判断:未选文本时直接弹出提示,避免无效执行
  • 词汇列表一次性拆分:原宏每次循环都重复拆分文档内容,现在仅拆分一次存入数组,减少冗余操作
  • 锁定搜索边界:设置.Wrap = wdFindStop,确保搜索严格限制在选中区域内
  • 过滤空词汇:跳过外部文档中的空白行,避免无意义的搜索

内容的提问来源于stack exchange,提问作者Milan van Bree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:10:22