【发布时间】:2016-02-25 16:38:09
【问题描述】:
我正在使用 VBA for Word,并且正在开发一个在 Word 文档中进行批量查找/替换的项目。我从 .csv 导入了查找/替换术语的列表。
我遇到的问题是我想用代表单词的符号替换单词。例如,如果我使用面包这个词,我想将它替换为面包的 UTF-32 符号(Unicode 十进制 127838/十六进制 0x1f35e)。当我使用内置的 MS-Word 查找/替换手动执行此操作时,效果很好,我只需在替换框中输入 alt+127838 即可顺利工作,但在 UTF-32 查找/替换batch 似乎给我带来了麻烦。
如果我使用 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(False, True)
它在我的 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
结束子
【问题讨论】:
-
好吧,首先你不能在你的 VBA 代码中使用 .NET 命名空间。 VBA 对 .NET 一无所知,因此在 VB.NET 中有效的东西在 VBA 中将不会有效,除非该功能在大约十年前已经存在于 VBA 中。所以没有“导入”(只有工具/参考),也没有 UTF32Encoding。如果您尝试在有效的手动搜索中录制宏,会发生什么?当您运行生成的宏时,您是否获得了有效的语法?
-
感谢您的提示!这有助于我更好地理解 VBA/VB。另外,我是宏的新手,所以我不知道您可以录制宏并且会变成代码。再次感谢!当我这样做时,它将符号面包表示为两个 UTF-16 值的组合:ChrW(55356) 和 ChrW(57182) 我可以在这里查看:fileformat.info/info/unicode/char/1f35e/index.htm 我的下一个问题是是否有任何UTF-32 名称和双重 UTF-16 名称之间的直观联系,或者我是否必须重新键入源表中的每个符号。
-
我不知道你的第二个问题,编码不是我的“东西” :-) 最好在一个新问题中提出这个问题,这样你就可以获得更好的可见性。顺便说一句,因为您是 SO 新手:“投票”对您有帮助的事情被认为是一种很好的做法。建议您将内容总结并写到“答案”中,然后将其标记为答案,以便以后有相同问题的其他人可以找到并知道什么有效。