如何使用Word宏来搜索并替换Unicode字符?
我正在尝试在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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。