一个适用于 Word(Mac/Win 通用) 的 VBA 宏:把所有“上角标格式的 0‑9”以及 “Unicode 上角标数字 ⁰‑⁹” 批量删除。

一个适用于 Word(Mac/Win 通用) 的 VBA 宏:把所有"上角标格式的 0‑9"以及 "Unicode 上角标数字 ⁰‑⁹" 批量删除。

vbnet 复制代码
'========================================
' StripSupDigitsInWord.bas
' 删除 Word 文档中的所有上角标数字
'   1) 字体属性为 Superscript 的 0-9
'   2) Unicode 上角标数字 ⁰¹²³⁴⁵⁶⁷⁸⁹
'========================================
Option Explicit

Sub StripSupDigitsInWord()
    Dim sr As Range
    Application.ScreenUpdating = False
    
    ' 遍历正文、页眉页脚、脚注等所有 StoryRanges
    For Each sr In ActiveDocument.StoryRanges
        Call RemoveSupDigitsInRange(sr)
        Do While Not (sr.NextStoryRange Is Nothing)
            Set sr = sr.NextStoryRange
            Call RemoveSupDigitsInRange(sr)
        Loop
    Next sr
    
    Application.ScreenUpdating = True
End Sub


Private Sub RemoveSupDigitsInRange(ByVal rng As Range)
    Dim f As Find
    Dim codes As Variant
    Dim i As Long
    
    '------① 删掉"格式为上角标"的普通数字 0-9 ------'
    Set f = rng.Duplicate.Find
    With f
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "[0-9]"          ' 匹配任意数字
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Format = True
        .Font.Superscript = True ' 仅找上角标
        .MatchWildcards = True
    End With
    
    Do While f.Execute
        f.Parent.Delete                ' 删除命中的字符
        rng.Collapse wdCollapseStart   ' 收缩到起点继续
        Set f = rng.Duplicate.Find     ' 重新绑定范围
        With f
            .Text = "[0-9]"
            .Replacement.Text = ""
            .Format = True
            .Font.Superscript = True
            .MatchWildcards = True
        End With
    Loop
    
    '------② 删掉 Unicode 上角标数字 ------'
    codes = Array(&H2070, &HB9, &HB2, &HB3, _
                  &H2074, &H2075, &H2076, &H2077, &H2078, &H2079)
    For i = LBound(codes) To UBound(codes)
        With rng.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Text = ChrW(codes(i))
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchWildcards = False
            .Execute Replace:=wdReplaceAll
        End With
    Next i
End Sub

使用步骤

  1. Word 打开文档 → 工具/开发工具 ▸ Visual Basic (⌥F11)

  2. 插入 ▸ 模块,粘贴上述代码。

  3. 关闭 VBE,回到 Word:开发工具 ▸ 宏,运行 StripSupDigitsInWord

  4. 建议先备份文档;如果开启了"修订",可先关闭或接受更改以提升速度。

想只处理选定文本,把 StripSupDigitsInWord 里遍历 StoryRanges 的部分改成:
Call RemoveSupDigitsInRange(Selection.Range) 即可。

相关推荐
格兰芬多呼神护卫21 小时前
python实现Latex格式的公式转OMML并写入word
python·c#·word
不坑老师2 天前
利用不坑盒子在WPS中插入网页,放映的电脑无需安装插件,直接就能显示网页!
microsoft·word·powerpoint·wps
ljh_learn_from_base2 天前
【spring boot 使用apache poi 生成和处理word 文档】
java·spring boot·word·apache
2501_920955572 天前
Word崩溃打不开?实测三款Word文档修复工具!
word
乘风!3 天前
前端Jquery,后端Java实现预览Word、Excel、PPT,pdf等文档
pdf·word·excel·jquery
程序员小羊!3 天前
Flink(用Scala版本写Word Count 出现假报错情况解决方案)假报错,一直显示红色报错
flink·word·scala
Eiceblue3 天前
React 前端实现 Word(Doc/Docx)转 HTML
前端·react.js·word
usdoc文档预览3 天前
前端Word文件在线预览-文件预览修改背景色,动态修改在线预览颜色
前端·word
huluang3 天前
XML文档差异分析工具:深入解析Word XML结构变化
xml·word
nongcunqq4 天前
Latex 转 word 在线
word