我有一个包含表情符号(例如)的电子表格,并且我正在寻找一种使用Excel VBA将表情符号替换为null的解决方案。
可以使用Excel替换操作删除表情符号,因此我记录了一个宏来自动执行替换。我打开了录制的宏,它显示如下:
Sub Remove_Emojis()
Cells.Replace What:="??", Replacement:="", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
End Sub
Run Code Online (Sandbox Code Playgroud)
问题在于,VBA无法识别表情符号()并将其替换为“ ??”,即,VBA无法识别高于特定值的Unicode字符。
我尝试替换“ ??” 与ChrW():
Sub Remove_Emojis()
Cells.Replace What:=ChrW(128515), Replacement:="", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
End Sub
Run Code Online (Sandbox Code Playgroud)
但这会导致错误:
参数的无效过程调用
因为ChrW()函数不允许大于65535的值。注意:如果参数的值在-32,767到65,535之间,则ChrW()函数将起作用。
我希望应该在VBA中支持这样做,因为它可以在Excel中完成。
我做了一个小实验,将您的笑脸放入excel,并运行以下代码:
Dim s
s = ActiveCell
Dim i As Long
For i = 1 To Len(s)
Dim c
c = Mid(s, i, 1)
Debug.Print i, c, AscW(c)
Next i
Run Code Online (Sandbox Code Playgroud)
我的结果是
1 ? -10179
2 ? -8701
Run Code Online (Sandbox Code Playgroud)
因此很明显,单个字符在VBA中被分成2个。AscW并且它的吊坠ChrW处理为16位,而表情符号为32位字符,因此在VBA中,此表情符号字符的处理方式就像字符串中有2个字符一样
我添加了以下代码,然后笑脸字符消失了:
Dim x
x = ChrW(-10179) & ChrW(-8701)
s = Replace(s, x, "(smiley)")
ActiveCell.Offset(0, 1) = s
Run Code Online (Sandbox Code Playgroud)
可能您必须尝试面对的不同表情符号,并在替换例程中建立一个列表。
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |