Как удалить смайлики из листа Excel с помощью VBA? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть электронная таблица, содержащая смайлики, например, ?, и я ищу решение использовать Excel VBA для замены смайликов на ноль.

Emojis можно удалить с помощью действия замены Excel, поэтому я записал макрос для автоматизации замены. Я открыл записанный макрос, и он отображался следующим образом:

Sub Remove_Emojis()

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

Проблема в том, что VBA не распознает эмодзи (?) и заменяет их на «??», т. Е. Символы Юникода выше определенного значения не распознаются VBA.

Я пытался заменить "??" с ChrW():

Sub Remove_Emojis()

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

но это приводит к ошибке:

Недопустимый вызов процедуры аргумента

потому что функция ChrW () не допускает значение выше 65535. Примечание. Функция ChrW () работает, если значение аргумента находится в диапазоне от -32 767 до 65 535.

Я ожидаю, что должна быть поддержка для этого в VBA, учитывая, что это может быть сделано в Excel.

Ответы [ 2 ]

7 голосов
/ 29 марта 2019

Я выполнил небольшой эксперимент, поставив ваш смайлик в 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 

Так что, очевидно, один символ разделенв 2 внутри VBA.AscW и кулон ChrW имеют дело с 16-битным, а эмодзи - это 32-битный символ, поэтому в VBA этот символ эмодзи обрабатывается так, как если бы в строке было 2 символа

Я добавил следующий код ивуаля, символ смайлика исчез:

Dim x
x = ChrW(-10179) & ChrW(-8701)

s = Replace(s, x, "(smiley)")
ActiveCell.Offset(0, 1) = s

Вероятно, вам придется экспериментировать с различными смайликами, с которыми вы сталкиваетесь, и составить список в своей программе замещения.

1 голос
/ 29 марта 2019

Спасибо 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

В моем реальном решении я поместил это в цикл для удаления всех различных смайликов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...