【问题标题】:How do I remove emojis from an excel sheet using VBA?如何使用 VBA 从 Excel 工作表中删除表情符号?
【发布时间】:2019-03-29 23:10:17
【问题描述】:

我有一个包含表情符号的电子表格,例如 ????,我正在寻找使用 Excel VBA 将表情符号替换为 null 的解决方案。

可以使用 Excel 替换操作删除表情符号,因此我录制了一个宏来自动替换。我打开录制的宏,显示如下:

Sub Remove_Emojis()

    Cells.Replace What:="??", Replacement:="", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
End Sub

问题在于 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

但这会导致错误:

参数的过程调用无效

因为 ChrW() 函数不允许大于 65535 的值。注意:如果参数的值在 -32,767 到 65,535 范围内,则 ChrW() 函数有效。

鉴于可以在 Excel 中完成,我希望应该支持在 VBA 中执行此操作。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我做了一个小实验,把你的笑脸放到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
    

    我的结果是

     1            ?             -10179 
     2            ?             -8701 
    

    很明显,单个字符在 VBA 中被拆分为 2。 AscW 和它的挂件 ChrW 处理 16 位,而 emoji 是 32 位字符,所以在 VBA 中这个 emoji 字符被处理为好像字符串中有 2 个字符

    我添加了以下代码,瞧,笑脸字符消失了:

    Dim x
    x = ChrW(-10179) & ChrW(-8701)
    
    s = Replace(s, x, "(smiley)")
    ActiveCell.Offset(0, 1) = s
    

    您可能必须尝试使用​​不同的表情符号,并在替换例程中建立一个列表。

    【讨论】:

      【解决方案2】:

      感谢 FunThomas 指出表情符号在 VBA 中表示为 2 个字符。基于此工作的修改后的 VBA 代码:

      Sub Remove_Emojis()
      
          Cells.Replace What:=ChrW(-10197) & ChrW(-8701), Replacement:="", LookAt:=xlPart, SearchOrder _
              :=xlByRows, MatchCase:=True, SearchFormat:=False, ReplaceFormat:=False
      End Sub
      

      在我的实际解决方案中,我将其放入一个循环中以删除所有不同的表情符号。

      【讨论】:

      • 感谢您花时间添加此信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      相关资源
      最近更新 更多