Статьи из блога
Псевдокириллица: макрос замены латиницы на кириллицу
Евгения спрашивает:
Подскажите, пожалуйста, возможно ли в 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
Рубрика: Вопрос-Ответ, Макросы, Стили и форматирование
Метки: макросы | поиск и замена
Просмотров: 45786
Подписаться на комментарии по RSS
Версия для печати
Метки: макросы | поиск и замена
Просмотров: 45786
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 10 вопросов и ответов по редактору Word (1 часть)
- 3 способа очистки списка недавно открытых документов
- Word 2007: добавляем свою вкладку и свои команды
- Word 2007: полотно, рисунки, линии
- Word 2007: смена формата сохранения файла
- Word 97 - решение проблемы с отображением символов на линейке
- Word 97. Слияние документов как один из способов упростить свою работу
- Абзац с цветным фоном
- Автозаполняемые колонтитулы
- Автоматизация текстового набора в Word
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Автоформат документов
- Белый текст на синем фоне в Word 2007
- Буквица
- Быстрая смена ориентации страниц документа
- Быстрое изменение стиля форматирования текста
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрое удаление границ у таблицы
- Быстрый ввод текста с помощью команды =rand()
Комментариев: 17
Я полагаю что автору нужна была замена символов с одинаковым начертанием.
А в кириллице - А в латинице
Спасибо, изменил код макроса.
Антон, вы могли бы рассказать - как вы осваивали VBA? С чего началось, знаете ли еще какие нибудь языки?
А Евгении я бы посоветовал повнимательнее присмотреться к тексту. Если он искажен таким образом - автор сделал это не просто так. Он либо пытался обмануть индексирующих роботов поисковых машин, либо копировал этот текст из источника, авторы которого не желают быть найдеными, либо еще почему-то. Опасайтесь.
40-02, я не настолько хорошо владею VBA, чтобы сказать что я его освоил. Здесь есть люди более грамотные. Тем не менее, я всем рекомендую приобрести хотя бы основную книгу по VBA для Word: Microsoft Word . Комфортная работа с помощью макросов.
Так как это было и сколько времени заняло? Есть ли разница для чего программировать - для ворда или для экселя?
Когда я прочитал эту книгу, я уже смог писать небольшие макросы для себя. Потом только практика. Но в любом случае приходится обращаться к книгам-справочникам, так как много забывается, если долго не программируешь.
Говорить точнее о времени, потраченном на освоение VBA, не могу, так как освоение продолжается. Но, в принципе, язык достаточно простой. При желании и наличии практических задач можно за пару месяцев выйти на вполне нормальный уровень.
Я знаю, что есть различия в программировании под Excel и Word, связанные с различными объектами в этих программах. Но под таблицы я не программировал никогда.
Понял Вас, спасибо!
Наверное стоит указать что этот макрос работает только если в документе
нет англицких слов, а то можно получить такое например Trиe
Чтоб такого не случилось можно предварительно выделить
слова исключения цветом, а в макросе добавить строчку
rDoc.Find.Font.Color = wdColorAutomatic, хотя это пол беды
есть документы с псевдокирилицей и с псевдолатиницей одновременно
тут как действовать нужно основательно подумать.
А как добавить в данный макрос опцию не просто замены латинских символов на кириллицу, но и что бы вставляемы кириллические символы были жирным шрифтом и красного цвета
Как сделать так что бы замена была только в выделенном фрагменте документа ?
Я так понимаю, что нужно поменять строку
Set rDoc = ActiveDocument.Range
???
Замена на
Set rDoc = Application.Selection
Приводит к тому что макрос не работает
Что я не правильно делаю ?
у меня пишет Range не известный тип данных
Не работает в 2010
я заменила на Set rDoc = Selection.Range у меня всё работает в 2010
А как будет выглядеть макрос, если мы хотим, к примеру, сделать случайную замену букв, не обязательно всех? т.е. Чтобы он рандомно заменял буквы.
Спасибо! А как сделать так чтобы макрос отрабатывал еще и в колонтитулах?
Вижу, в тему давно не заходили, но всё-таки задам вопрос.
Понадобился такой макрос, нашёл его через Google. С задачей справился хорошо, но обнаружилась такая ошибка: при замене латинской A (прописной) вставляет кирилическую а (строчную) в начале слова или одиночную. Хорошо, когда текст небольшой – исправить легко, а когда несколько сотен или хотя бы десятков страниц – замучаешся искать…
Отсюда вопрос: можно ли исправить эту ошибку, сам я это сделать не смогу?