一个适用于 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) 即可。

相关推荐
MK42220 小时前
Word卡顿,过很久才弹窗网络连接失败解决办法
word·word卡顿·officeplus·网络连接失败
Metaphor6921 天前
Java 将 HTML 转换为 Word:告别手动复制粘贴
java·经验分享·html·word
biter00882 天前
IEEE Transactions 风格补充材料(Word)快速排版教程
word
玩泥巴的3 天前
.NET驾驭Word之力:数据驱动文档 - 邮件合并与自定义数据填充完全指南
c#·word·.net·com互操作
揭老师高效办公5 天前
Word和WPS文字如何从特定的页开始编号(页码)?
word·wps
secondyoung6 天前
Markdown转换为Word:Pandoc模板使用指南
开发语言·经验分享·笔记·c#·编辑器·word·markdown
广都--编程每日问6 天前
deepseek 的对话json导出成word和pdf
pdf·json·word·deepseek·exprot
疯癫的老码农6 天前
【word解析】从OLE到OMML:公式格式转换的挑战与解决方案
java·spring boot·spring·word
睿思达DBA_WGX6 天前
使用 python-docx 库操作 word 文档(1):文件操作
开发语言·python·word