我正在使用 VBA for Word,并且正在开发一个在 Word 文档中进行批量查找/替换的项目。我从 .csv 导入了查找/替换术语的列表。
我遇到的问题是我想用代表单词的符号替换单词。例如,如果我使用面包这个词,我想将它替换为面包的 UTF-32 符号(Unicode 十进制 127838/十六进制 0x1f35e)。当我使用内置的 MS-Word 查找/替换手动执行此操作时,效果很好,我只需在替换框中输入 alt+127838 即可顺利工作,但在 UTF-32 查找/替换批处理似乎给我带来了麻烦。
如果我使用 ChrW() 它将超出范围,因为 ChrW 只接受高达 65,535 的值。它无法处理第 17 位。如果我尝试插入它,它会给我一个运行时错误。
我尝试使用 \U 转义字符,但它只是用“\U127838”字面替换它,这不是很有帮助。不确定 VBA 是否甚至支持 unicode 转义字符。如果我不把它放在引号中,它会给我一个语法错误。
虽然我对编程并不陌生,但我对 VBA 和 VB 还是很陌生。我在网上查了一下,似乎 VB 的 UTF32Encoding 类不适用于 VBA
https://msdn.microsoft.com/en-us/library/system.text.utf32encoding(v=vs.90).aspx
可能是我不熟悉 VB 和 VBA 之间的细微差别,但是当我尝试初始化程序时:
将 u32LE 调暗为新的 UTF32Encoding(假,真)
它在我的 VBA 代码中给了我一个语法错误。
我尝试使用 Imports 语句,但这也使我的编译器感到困惑。我不确定我是否做错了什么,或者 VBA 是否不支持此类。
如果 VBA 不支持打印 UTF32 字符,请告诉我,我应该尝试使用 Python 或 Java 之类的东西。非常感谢您的帮助!
这是我正在编写的函数。我注释掉了 Imports 行,因为它给了我一个错误(它说找不到突出显示“.Text”的方法或成员)
Sub findReplaceUnicode(ByVal findItem As String, unicode As Long)
'Imports System.Text
Dim u32LE As New UTF32Encoding(False, True)
Selection.find.ClearFormatting
Selection.find.Replacement.ClearFormatting
With Selection.find
.Text = findItem
.Replacement.Text = ChrW(unicode)
.Replacement.font.Name = "Segoe UI Symbol"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.find.Execute replace:=wdReplaceAll
结束子