Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2012, 14:17   #1
darthraziel
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 24
По умолчанию Макрос: заключение текста в скобки

Задача: найти в тексте курсивный текст и заключить его в [скобки].
Начальное решение:
Код:
For Each Paragraph In ActiveDocument.Paragraphs
With Paragraph.Range.Find    
    .ClearFormatting
    .Font.Italic = True
    .Text = ""
    .Replacement.Text = "[^&]"
    .Wrap = wdFindStop
    .Format = True
    .Execute Replace:=wdReplaceAll
End With
Next Paragraph
Проблема: для двух курсивных слов, находящихся на стыке абзацев, скобки расставляются следующим образом:

Первый [абзац
Второй]
абзац

Тогда как должно быть:

Первый [абзац]
[Второй]
абзац
darthraziel вне форума Ответить с цитированием
Старый 24.02.2012, 16:17   #2
darthraziel
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 24
По умолчанию

Проблема, судя по всему, в том, что любой символ, который добавляется после ^&, вставляется в начало следующего абзаца. Подскажите пожалуйста, как это устранить?
darthraziel вне форума Ответить с цитированием
Старый 24.02.2012, 16:31   #3
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Попробуйте сделать все знаки абзаца не курсивными, а потом уже Ваш цикл
Код:
With ActiveDocument.Range.Find    
    .ClearFormatting
    .Font.Italic = True
    .Text = "^p"
    .Replacement.Text = "^p"
    .Replacement.Font.Italic = False
    .Wrap = wdFindStop
    .Format = True
    .Execute Replace:=wdReplaceAll
End With
For Each Paragraph In ActiveDocument.Paragraphs
With Paragraph.Range.Find    
    .ClearFormatting
    .Font.Italic = True
    .Text = ""
    .Replacement.Text = "[^&]"
    .Wrap = wdFindStop
    .Format = True
    .Execute Replace:=wdReplaceAll
End With
Next Paragraph
Пименов Александр вне форума Ответить с цитированием
Старый 24.02.2012, 18:22   #4
darthraziel
Пользователь
 
Регистрация: 21.02.2012
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Пименов Александр Посмотреть сообщение
Попробуйте сделать все знаки абзаца не курсивными, а потом уже Ваш цикл
Спасибо большое, я сам до этого додумался где-то буквально час назад Как раз хотел написать об этом.
darthraziel вне форума Ответить с цитированием
Старый 25.02.2012, 00:26   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

А зачем делать поиск, перебирая абзацы? Это же замедляет работу макроса. Почему не запустить просто поиск по всему документу?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для корректировки текста umwelf Microsoft Office Word 12 02.01.2012 22:11
Макрос для копирования текста 6aHaH4uk Microsoft Office Word 6 01.11.2011 00:59
Макрос для замены текста Georgetta Microsoft Office Word 8 05.08.2011 12:00
Макрос форматирования текста DJTreeno Microsoft Office Excel 3 04.07.2011 10:41
Макрос разбивки текста rubbi Microsoft Office Word 1 08.11.2010 23:40