如何使用Word宏来搜索并替换Unicode字符?

编程语言 2026-07-09

我正在尝试在Microsoft Word的文本字符串中替换几个Unicode字符。

问题是,当我尝试在其他应用程序中使用这些文本字符串时,Unicode字符会被转换为不同的字符。我的目标是把Unicode字符替换为一个常见的文本项。

例如:有一个长破折号在Word中通过Alt+x转换为“2013”。我想把它替换为一个标准短横线(“-”),在Unicode中对应为002D。

我尝试在宏中实现这一点,但找不到正确引用该Unicode字符的方法。我使用了网上找到的多种格式,但都不起作用: “2013”、"^u2013"、"u2013"、"u+2013"、"^2013" 等……

程序会返回信息“已进行0 次替换”,或在输入处停顿,取决于它采用的形式(例如“^u2013”)。

我还有很多其他示例,大多数来自最初用其他语言编写并随后的翻译的线程。许多这些Unicode字符在日常英语用法中并不常见。

我该如何替换这些Unicode字符?

Sub Clean_Unicode()
'
' Removes uncommon characters
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ChrW(2013)
        .Replacement.Text = "-"
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

解决方案

你的代码没有问题。问题出在 CHRW 函数上。该函数需要一个十进制数字作为参数。你要替换的Unicode值(2013)是十六进制数值。最简单的解决办法是将参数以十六进制数值的形式添加,如下所示:

Sub Clean_Unicode()
'
' Removes uncommon characters
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ChrW(&H2013)
        .Replacement.Text = "-"
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章