Статьи из блога

Псевдокириллица: макрос замены латиницы на кириллицу

Евгения спрашивает:

Подскажите, пожалуйста, возможно ли в 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

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 17

  1. 28.12.2009 в 00:21 | #1

    Я полагаю что автору нужна была замена символов с одинаковым начертанием.

    А в кириллице - А в латинице

  2. 28.12.2009 в 08:14 | #2

    Спасибо, изменил код макроса.

  3. 29.12.2009 в 15:15 | #3

    Антон, вы могли бы рассказать - как вы осваивали VBA? С чего началось, знаете ли еще какие нибудь языки?

  4. 29.12.2009 в 15:18 | #4

    А Евгении я бы посоветовал повнимательнее присмотреться к тексту. Если он искажен таким образом - автор сделал это не просто так. Он либо пытался обмануть индексирующих роботов поисковых машин, либо копировал этот текст из источника, авторы которого не желают быть найдеными, либо еще почему-то. Опасайтесь.

  5. 29.12.2009 в 15:35 | #5

    40-02, я не настолько хорошо владею VBA, чтобы сказать что я его освоил. Здесь есть люди более грамотные. Тем не менее, я всем рекомендую приобрести хотя бы основную книгу по VBA для Word: Microsoft Word . Комфортная работа с помощью макросов.

  6. 29.12.2009 в 15:37 | #6

    Так как это было и сколько времени заняло? Есть ли разница для чего программировать - для ворда или для экселя?

  7. 29.12.2009 в 16:57 | #7

    Когда я прочитал эту книгу, я уже смог писать небольшие макросы для себя. Потом только практика. Но в любом случае приходится обращаться к книгам-справочникам, так как много забывается, если долго не программируешь.

    Говорить точнее о времени, потраченном на освоение VBA, не могу, так как освоение продолжается. Но, в принципе, язык достаточно простой. При желании и наличии практических задач можно за пару месяцев выйти на вполне нормальный уровень.

    Я знаю, что есть различия в программировании под Excel и Word, связанные с различными объектами в этих программах. Но под таблицы я не программировал никогда.

  8. 29.12.2009 в 20:32 | #8

    Понял Вас, спасибо!

  9. qwest48
    17.03.2010 в 11:24 | #9

    Наверное стоит указать что этот макрос работает только если в документе

    нет англицких слов, а то можно получить такое например Trиe

    Чтоб такого не случилось можно предварительно выделить

    слова исключения цветом, а в макросе добавить строчку

    rDoc.Find.Font.Color = wdColorAutomatic, хотя это пол беды

    есть документы с псевдокирилицей и с псевдолатиницей одновременно

    тут как действовать нужно основательно подумать.

  10. Алекс
    20.02.2013 в 01:30 | #10

    А как добавить в данный макрос опцию не просто замены латинских символов на кириллицу, но и что бы вставляемы кириллические символы были жирным шрифтом и красного цвета

  11. Игорь
    04.03.2013 в 15:08 | #11

    Как сделать так что бы замена была только в выделенном фрагменте документа ?

    Я так понимаю, что нужно поменять строку

    Set rDoc = ActiveDocument.Range

    ???

    Замена на

    Set rDoc = Application.Selection

    Приводит к тому что макрос не работает

    Что я не правильно делаю ?

  12. Аноним
    05.11.2013 в 16:35 | #12

    у меня пишет Range не известный тип данных

  13. Аноним
    23.06.2014 в 14:49 | #13

    Не работает в 2010

  14. Елена
    23.09.2014 в 11:16 | #14

    я заменила на Set rDoc = Selection.Range у меня всё работает в 2010

  15. Иван
    27.06.2017 в 14:55 | #15

    А как будет выглядеть макрос, если мы хотим, к примеру, сделать случайную замену букв, не обязательно всех? т.е. Чтобы он рандомно заменял буквы.

  16. Дмитрий
    20.03.2021 в 18:35 | #16

    Спасибо! А как сделать так чтобы макрос отрабатывал еще и в колонтитулах?

  17. Oldman
    10.12.2021 в 19:14 | #17

    Вижу, в тему давно не заходили, но всё-таки задам вопрос.

    Понадобился такой макрос, нашёл его через Google. С задачей справился хорошо, но обнаружилась такая ошибка: при замене латинской A (прописной) вставляет кирилическую а (строчную) в начале слова или одиночную. Хорошо, когда текст небольшой – исправить легко, а когда несколько сотен или хотя бы десятков страниц – замучаешся искать…

    Отсюда вопрос: можно ли исправить эту ошибку, сам я это сделать не смогу?

Оставьте комментарий!

(обязательно)

^ Наверх