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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2009, 15:30   #1
vavilas
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 11
По умолчанию форматирование текста в ворде

Привет всем.
Замучался уже с одной проблемой.
Пытаюсь записать макрос для форматирования текста.
Один макрос работает, другой - отказывается. Пробовал копировать код из второго в первый - ничего не помогает.

Sub Макрос1()

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFor matting
With Selection.Find
.Text = "^v"
.Replacement.Text = "</p><p align=justify>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFor matting
With Selection.Find
.Text = "^p"
.Replacement.Text = "</p>^p<p align=justify>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

А это второй макрос:

Sub Макрос2()

Selection.Find.ClearFormatting
With Selection.Find.ParagraphFormat
.SpaceBeforeAuto = False
.SpaceAfterAuto = False
.Alignment = wdAlignParagraphCenter
End With
Selection.Find.ParagraphFormat.Bord ers.Shadow = False
Selection.Find.Replacement.ClearFor matting
With Selection.Find
.Text = ""
.Replacement.Text = "<h2>^&</h2>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

Во втором случае макрос должен найти полужирный курсивный текст и "обнять" его тэгами <h2></h2>.
Если делать без макроса (тупая замена) все работает, как часы.
В чем может быть проблема в макросе??
vavilas вне форума Ответить с цитированием
Старый 09.02.2009, 16:33   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Попробуй вот так.
Код:
Sub Макрос2()

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Font.Bold=true
.font.italic=true
.Text = "<[A-Za-zА-яЁё]@>"
.Replacement.Text = "<h2>^&</h2>"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 09.02.2009 в 16:55. Причина: Исправил строку поиска, а то искала бы только русские слова
viter.alex вне форума Ответить с цитированием
Старый 09.02.2009, 16:43   #3
vavilas
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 11
По умолчанию

К сожалению, та же проблема - вообще никакой реакции...
Текст как был до запуска, таким же и остался...
vavilas вне форума Ответить с цитированием
Старый 09.02.2009, 16:56   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Я исправил макрос в предыдущем посте. Попробуй. Там зачем-то был еще поиск по междустрочному расстоянию.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 09.02.2009, 17:17   #5
vavilas
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 11
По умолчанию

Все, что было - это результат записи макроса вордом...
По теме: я так понял, что ваш макрос ищет полужирный и курсивный текст, но как-то по-другому...
Вообщем сейчас осталось две шняги: макрос находит нужные места, но обрамляет заданные слова излишними знаками - статья 105. убийство
будет выглядеть как <h2>статья</h2><h2>105.</h2><h2>убийство</h2>
Вот.. а хотелось бы, чтобы все выражение.
И дополнительный параметр: выравнивание по центру полужирного и курсивного.. То есть, если в тексте встречается полужирный и он не по центру, то его надо заключить тегами <b></b>, а курсив соответсвенно <i></i>, а если по центру, то <h2></h2>
vavilas вне форума Ответить с цитированием
Старый 09.02.2009, 17:25   #6
vavilas
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 11
По умолчанию

да и вопрос:
по умолчанию макрос записался как .Text = "", то есть любой параграф центрированный и полужирный
а вы добавили "<[A-Za-zА-яЁё]@>"
видимо набор любых букв. В последнем ответе замтели ошибку: цифры макрос пропускает, то есть будет <h2>статья</h2> <h2>убийство</h2>, а "105." - теряется
Можно, конечно, дописать макрос дополнительной командой - удалить </h2>пробел<h2>
vavilas вне форума Ответить с цитированием
Старый 09.02.2009, 18:52   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Чтобы найти весь параграф, то напиши такое
(<[A-Za-zА-яЁё]@*)^0013
А строка замены будет такая <h2>\1</h2>^0013

Цитата:
Сообщение от vavilas Посмотреть сообщение
…И дополнительный параметр: выравнивание по центру полужирного и курсивного.. То есть, если в тексте встречается полужирный и он не по центру, то его надо заключить тегами <b></b>, а курсив соответсвенно <i></i>, а если по центру, то <h2></h2>
Так в чем проблема? Задай три поиска в том же макросе, только с разными параметрами форматирования для искомого текста, и соответственно разными строками замены.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 09.02.2009 в 18:55.
viter.alex вне форума Ответить с цитированием
Старый 09.02.2009, 19:44   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от vavilas Посмотреть сообщение
…а вы добавили "<[A-Za-zА-яЁё]@>"
видимо набор любых букв.…
Это не набор любых букв, а отдельные слова латинскими или кириллическими буквами. Только слова! Пробелы, как ты убедился, не учитываются.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 10.02.2009, 11:57   #9
vavilas
Пользователь
 
Регистрация: 09.02.2009
Сообщений: 11
По умолчанию

Да, спасибо, вроде получилось.
Но не работало, пока я не добавил .Font.Bold=true и .MatchWildcards = True
Вопрос по синтаксису запросов: где найти всю таблицу символов с расшифровкой, включая те, которые вы указали
^0013
\1
@* и т.д.
Ведь макрос как я понял ищет только параграфы, и как вы справедливо указали, нужно сделать несколько поисков и замен в одном макросе..


Sub Макрос2()
'
' Макрос для сайта юридических услуг http://www.uconst.ru
' Макрос записан 09.02.2009 Admin
'

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFor matting
With Selection.Find
.Font.Bold=true
.Text = "(<[A-Za-zА-яЁё]@*)^0013"
.Replacement.Text = "<h2>\1</h2>^0013"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
vavilas вне форума Ответить с цитированием
Старый 10.02.2009, 12:30   #10
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от vavilas Посмотреть сообщение
…Вопрос по синтаксису запросов: где найти всю таблицу символов с расшифровкой, включая те, которые вы указали
^0013
\1
@* и т.д…
  • ^0013 — это знак абзаца;
  • \1 — означает первое выражение в строке поиска. В нашем случае это (<[A-Za-zА-яЁё]@*);
  • @ — знак, указывающий, что выражение, которое стоит перед ним, может быть, а может и не быть;
  • * — любой символ.
Вообще-то в справке все написано. Это так называемые регулярные выражения. Чтобы они работали нужно обязательно включать MatchWildcards. В диалоге поиска это пункт: «Подстановочные знаки».
В справке все написано, но примеры плохие. Хорошие прикладные примеры, по которым я учился, здесь

При постинге кода, используйте тег [code]Ваш_код[/code]. Это кнопка на панели инструментов сообщения в расширенном режиме
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 10.02.2009 в 12:49.
viter.alex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
форматирование текста с помощью CFontDialog TiLKiSS Общие вопросы C/C++ 5 27.12.2008 21:48
Форматирование текста MAcK Общие вопросы Delphi 3 03.04.2008 11:38
Форматирование текста в RichEdit. Air Общие вопросы Delphi 2 03.03.2008 15:15
Форматирование текста rusif Помощь студентам 1 17.12.2007 22:28
Форматирование текста в Delphi Кириллл Общие вопросы Delphi 3 05.06.2007 14:16