Мне также понадобилось удалить из текста все ударения с кодом 301, и меня заинтересовала эта проблема.
Кажется, мне удалось отделить символ с ударением от первого символа, о чем пишет Антон.
Макрос написан для MS Word, но при необходимости желающие могут преобразовать его в Excel.
Предлагаю следующий макрос для удаления ударений по всему тексту. Он получился не очень элегантным (так как приходится перебирать все символы текста), но должен работать корректно.
Для больших текстов данный макрос может работать долго, и можно порекомендовать обрабатывать большие тексты по частям.
Код |
---|
Sub RemovingAcuteAccents()
Dim rng As Range
' Выделение всего текста
Selection.WholeStory
str1 = Selection
For i = 1 To Len(str1) - 1
' Макрос просматривает все символы. Среди них могут быть символы Ударение с кодом 301 (ChrW(769))
' Символы Ударение удаляются
Set rng = ActiveDocument.Range(Start:=i - 1, End:=i)
' Диапазон rng здесь содержит очередной символ текста, который преобразуется в выделение,
' для того чтобы этот символ можно было при необходимости удалить
rng.Select
' Проверяем, является ли выделенный символ ударением,
' и если да, то удаляем этот символ
If Selection = ChrW(769) Then
Selection.Delete Unit:=wdCharacter, Count:=1
' Так как общее количество символов после удаления ударения меняется,
' приходится изменить и счетчик
i = i - 1
End If
' Так как некоторое количество символов мы удаляем,
' общее количество символов в файле также меняется,
' и это количество приходится пересчитывать
' Выделение всего текста
Selection.WholeStory
If i > Len(Selection) - 1 Then
' Завершение макроса
' Снятие выделения в конце макроса
Selection.MoveRight Unit:=wdCharacter, Count:=1
' Выход из макроса
Exit Sub
End If
Next
End Sub |