一个适用于 Word(Mac/Win 通用) 的 VBA 宏:把所有“上角标格式的 0‑9”以及 “Unicode 上角标数字 ⁰‑⁹” 批量删除。
一个适用于 Word(Mac/Win 通用) 的 VBA 宏:把所有“上角标格式的 0‑9”以及 “Unicode 上角标数字 ⁰‑⁹” 批量删除。
'========================================
' StripSupDigitsInWord.bas
' 删除 Word 文档中的所有上角标数字
' 1) 字体属性为 Superscript 的 0-9
' 2) Unicode 上角标数字 ⁰¹²³⁴⁵⁶⁷⁸⁹
'========================================
Option ExplicitSub StripSupDigitsInWord()Dim sr As RangeApplication.ScreenUpdating = False' 遍历正文、页眉页脚、脚注等所有 StoryRangesFor Each sr In ActiveDocument.StoryRangesCall RemoveSupDigitsInRange(sr)Do While Not (sr.NextStoryRange Is Nothing)Set sr = sr.NextStoryRangeCall RemoveSupDigitsInRange(sr)LoopNext srApplication.ScreenUpdating = True
End SubPrivate Sub RemoveSupDigitsInRange(ByVal rng As Range)Dim f As FindDim codes As VariantDim i As Long'——① 删掉“格式为上角标”的普通数字 0-9 ——'Set f = rng.Duplicate.FindWith f.ClearFormatting.Replacement.ClearFormatting.Text = "[0-9]" ' 匹配任意数字.Replacement.Text = "".Forward = True.Wrap = wdFindStop.Format = True.Font.Superscript = True ' 仅找上角标.MatchWildcards = TrueEnd WithDo While f.Executef.Parent.Delete ' 删除命中的字符rng.Collapse wdCollapseStart ' 收缩到起点继续Set f = rng.Duplicate.Find ' 重新绑定范围With f.Text = "[0-9]".Replacement.Text = "".Format = True.Font.Superscript = True.MatchWildcards = TrueEnd WithLoop'——② 删掉 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:=wdReplaceAllEnd WithNext i
End Sub
使用步骤
Word 打开文档 → 工具/开发工具 ▸ Visual Basic (⌥F11)
插入 ▸ 模块
,粘贴上述代码。关闭 VBE,回到 Word:
开发工具 ▸ 宏
,运行StripSupDigitsInWord
。建议先备份文档;如果开启了“修订”,可先关闭或接受更改以提升速度。
想只处理选定文本,把
StripSupDigitsInWord
里遍历 StoryRanges 的部分改成:
Call RemoveSupDigitsInRange(Selection.Range)
即可。