Word 2007 Макрос: найти текст и изменить регистр и порядок слов

Автор lapin9126, 05 сентября 2016, 18:45

lapin9126

Здравствуйте. Помогите с макросом поиска определенного слова в тексте и смене его регистра (в нижний регистр)
Ну например: "ОСНОВНОЙ ТЕКСТ" НУЖНЫЙ, а затем, или как-то сразу, поменять порядок: нужный "ОСНОВНОЙ ТЕКСТ". Документ предварительно отредактирован на все прописные. "НУЖНЫЙ" текст всегда одинаков, а "ОСНОВНОЙ ТЕКСТ" меняется.

[вложение удалено администратором]

Администратор

Макрос находит слово "НУЖНЫЙ". Дальше как макросу узнать, сколько слов слева от слова "НУЖНЫЙ"? Через сколько слов слева нужно вставить слово "нужный"? Какая закономерность?

lapin9126

А если добавить еще условие что до "ОСНОВНОЙ ТЕКСТ" НУЖНЫЙ есть цифра, то есть такой вариант:
1000 "ОСНОВНОЙ ТЕКСТ" НУЖНЫЙ. Цифра тоже есть всегда.

[вложение удалено администратором]

lapin9126

Через подстановочные знаки формулу перестановки подобрал:(<[0-9]{1;}>)(^32)(^34*^34)(^32)(<[а-яё]@['а-яё]@>) со строчными, \1\2\5\4\3, осталось заменить весь "НУЖНЫЙ" на строчные буквы.

Администратор

Покажите, лучше, реальную структура файла. Может быть понадобится другой способ поиска. Чтобы не делать ненужные действия.

lapin9126

Мне нужно редактировать тв программы. Я сейчас столкнулся с проблемой, что не знаю, как переставлять слова "сериал" из конца строки в положение между временем и названием:
21-50 "Водить по-русски" сериал
21-50 сериал "Водить по-русски"

[вложение удалено администратором]

Администратор

Пункт 1. Изменение регистра

В ворде можно двумя способами сделать верхний регистр:
1) вкладка "Главная" - Шрифт - Регистр
2) вкладка "Главная" - Шрифт - справа маленькая стрелка - галочка "все прописные"

Если у вас в файле используется первый способ, то с помощью "Найти и заменить" нельзя изменить регистр. Если второй - то можно.
Если в файле используется первый способ, то макрос сначала будет находить слово "сериал", затем будет изменять его регистр. Если в файле используется второй способ. То сначала с помощью "Найти и заменить" можно изменить регистр, а затем переставить.


Пункт 2. Перестановка

Переставить слово "сериал" можно так.
1) Поставьте галочку "подстановочные символы".
2) Поле "Найти:": ([0-9]{2}-[0-9]{2})([!^0013]@)( сериал)(^0013)
3) Поле "Заменить": \1\3\2\4

Примечание
1) Слово "сериал" в тексте должно быть маленькими буквами, т.к. при галочке "подст. символы" учитывается регистр.
2) Расшифровка выражения: [!^0013]@
Один или более любых символов, кроме знака абзаца. Это нужно, чтобы поиск был внутри абзаца.
3) Круглые скобки нужны, чтобы можно было переставить. Каждой круглой скобке присваивается порядковый номер и затем эти порядковые номера указываются в поле "Заменить" в нужном порядке.


Администратор

А регистр вы как будете менять? Я же не написал решение по регистру.

lapin9126

Менять буду следующей командой:
ActiveDocument.Range.Case = wdUpperCase ' заменить на все прописные
а потом поменяю:
    .Text = "СЕРИАЛ"
    .Replacement.Text = "сериал"   'замена с нужным регистром
    .MatchCase = True 'обращает внимание на регистр букв искомого и заменяемого текста

Администратор

Да, не подумал об этом. Подытожу. Если регистр сделан так: вкладка "Главная" - Шрифт - Регистр, то в "Найти и заменить" нет опции для замены регистра. Но есть обходные варианты.

Вариант 1
Ставьте галочку "Учитывать регистр".

Вариант 2
Ставьте галочку "Подстановочные знаки".

В обоих вариантах в поле "Найти" указывайте слово, у которого надо изменить регистр; нужно указывать в том регистре, в котором слово находится в файле. В поле "Заменить" указывайте то же слово, но уже в нужном регистре.

Администратор

Только нужно помнить, что слово "сериал" может быть внутри названия телепрограммы. Поэтому я бы так менял:
1) галочка "Подстановочные знаки"
2) Найти: ( СЕРИАЛ)(^0013)
3) Заменить:  сериал\2