Статьи из блога
Статьи из блога
Псевдокириллица: макрос замены латиницы на кириллицу
Рубрика: Вопрос-Ответ, Макросы, Стили и форматирование
Метки: макросы | поиск и замена
Воскресенье, 27 декабря 2009 г.
Просмотров: 5892
Подписаться на комментарии по RSS
Версия для печати
Метки: макросы | поиск и замена
Воскресенье, 27 декабря 2009 г.
Просмотров: 5892
Подписаться на комментарии по RSS
Версия для печати
Евгения спрашивает:
Подскажите, пожалуйста, возможно ли в Word 2007 создать макрос для замены смеси русских и латинских букв на только русские?
Я - редактор, и в присланном мне автором многостраничном - более 11-ти авторских листов - файле практически в каждом слове при наборе были употреблены кириллица и латиница. Выбирать ошибки по одной очень долго, и велика вероятность что-то пропустить. Возможно ли как-то автоматизировать этот процесс?
Обновлено (спасибо комментатору):
Евгения, если я правильно понял, вам нужно заменить латинские буквы на кирилические? То есть, если в тексте встречается буква латинская "a", то ее нужно заменить на русскую "а", так? В этом случае, полагаю, что вам может подойти вот этот макрос:
Sub changeLatToRus()
'Замена во всем документе латинских букв на киррилические
Dim i As Integer
Dim sLat As Variant
Dim sRus As Variant
Dim rDoc As Range
Set rDoc = ActiveDocument.Range
'список латинских букв
sLat = Array("e", "y", "u", "o", "p", "a", "k", "x", "c", _
"E", "T", "O", "P", "A", "H", "K", "X", "C", "B", "M")
sRus = Array("е", "у", "и", "о", "р", "а", "к", "х", "с", _
"Е", "Т", "О", "Р", "А", "Н", "К", "Х", "С", "В", "М")
Application.ScreenUpdating = False ' Запрещаем обновление экрана во время работы макроса
With rDoc.Find
'заменяем все латинские символы на соответствующие кириллические
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindStop
.MatchWildcards = False
.Format = True
.MatchCase = True
For i = LBound(sLat) To UBound(sRus)
.Text = sLat(i)
.Replacement.Text = sRus(i)
.Execute Replace:=wdReplaceAll
Next i
End With
Application.ScreenUpdating = True ' Обновляем экран
End Sub

Поиск
Рубрики
Подписка
Читают
Обсуждают
страницы
сайты
статистика
Комментариев: 9
Я полагаю что автору нужна была замена символов с одинаковым начертанием.
А в кириллице - А в латинице
Спасибо, изменил код макроса.
Антон, вы могли бы рассказать - как вы осваивали VBA? С чего началось, знаете ли еще какие нибудь языки?
А Евгении я бы посоветовал повнимательнее присмотреться к тексту. Если он искажен таким образом - автор сделал это не просто так. Он либо пытался обмануть индексирующих роботов поисковых машин, либо копировал этот текст из источника, авторы которого не желают быть найдеными, либо еще почему-то. Опасайтесь.
40-02, я не настолько хорошо владею VBA, чтобы сказать что я его освоил. Здесь есть люди более грамотные. Тем не менее, я всем рекомендую приобрести хотя бы основную книгу по VBA для Word: Microsoft Word . Комфортная работа с помощью макросов.
Так как это было и сколько времени заняло? Есть ли разница для чего программировать - для ворда или для экселя?
Когда я прочитал эту книгу, я уже смог писать небольшие макросы для себя. Потом только практика. Но в любом случае приходится обращаться к книгам-справочникам, так как много забывается, если долго не программируешь.
Говорить точнее о времени, потраченном на освоение VBA, не могу, так как освоение продолжается. Но, в принципе, язык достаточно простой. При желании и наличии практических задач можно за пару месяцев выйти на вполне нормальный уровень.
Я знаю, что есть различия в программировании под Excel и Word, связанные с различными объектами в этих программах. Но под таблицы я не программировал никогда.
Понял Вас, спасибо!
Наверное стоит указать что этот макрос работает только если в документе
нет англицких слов, а то можно получить такое например Trиe
Чтоб такого не случилось можно предварительно выделить
слова исключения цветом, а в макросе добавить строчку
rDoc.Find.Font.Color = wdColorAutomatic, хотя это пол беды
есть документы с псевдокирилицей и с псевдолатиницей одновременно
тут как действовать нужно основательно подумать.