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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2009, 00:23   #1
DrManual
 
Регистрация: 12.02.2009
Сообщений: 4
Вопрос Макрос "дописывает" не нужные параметры

Здравствуйте, All
Прошу помощи.

Есть -Word 2003 SP3

Задача форматирования включала изменение выравнивания текста. Записал рекордером:

Цитата:

Sub ReplaceAlignment()
'
' ReplaceAlignment
' 19.02.2009 AlexeyTerekhov
'
Selection.Find.ClearFormatting
With Selection.Find.ParagraphFormat
.SpaceBeforeAuto = False
.SpaceAfterAuto = False
.Alignment = wdAlignParagraphLeft
.OutlineLevel = wdOutlineLevelBodyText
End With
Selection.Find.ParagraphFormat.Bord ers.Shadow = False
Selection.Find.Replacement.ClearFor matting
With Selection.Find.Replacement.Paragrap hFormat
.SpaceBeforeAuto = False
.SpaceAfterAuto = False
.Alignment = wdAlignParagraphJustify
.OutlineLevel = wdOutlineLevelBodyText
End With
Selection.Find.Replacement.Paragrap hFormat.Borders.Shadow = False
With Selection.Find
.Text = ""
.Replacement.Text = ""
.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
При записи отрабатывается замена на ура. НО!!
При повторном использовании макроса обнаруживаю, что в свойствах окна "Find" появляются параметры "Границы"



Данный кошмар повторяется на двух совершенно разных машинах. При этом листинг макроса без изменений.

Что не так?
DrManual вне форума Ответить с цитированием
Старый 20.02.2009, 00:52   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Макрос не думает за вас

Не хватало очистки формата (что и покал далее Алекс).

Раз уж совершенствуем код, то давайте уберём лишнее.

Код:
Sub AlignmentText()
' AlignmentText' 

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.ParagraphFormat
        .Alignment = wdAlignParagraphLeft
        .OutlineLevel = wdOutlineLevelBodyText
    End With
    With Selection.Find.Replacement.ParagraphFormat
        .Alignment = wdAlignParagraphJustify
        .OutlineLevel = wdOutlineLevelBodyText
    End With

    Selection.Find.Execute Replace:=wdReplaceAll 'вот тут и выполняется (Execute) вышеопределённая замена'

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
End Sub

Последний раз редактировалось Sasha_Smirnov; 20.02.2009 в 18:50. Причина: сокращение лишнего.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 20.02.2009, 01:08   #3
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Просто сохраняются условия последнего поиска/замены.
Допиши в конце макроса
Код:
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
и будет тебе счастье.
Первая строка очищает форматирование для искомого текста, вторая — для текста замены.
В макросе эти строки есть. Они в макрорекордере всегда предваряют поиск/замену, чтобы старые условия не влияли на происходящее.
В диалоговом окне это аналогично тому, что ты поставишь курсор в нужное поле и нажмешь кнопку «Снять форматирование»


P.S. Для оформления кода пользуйся тегом [code][/code], а не [quote][/quote]
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 20.02.2009 в 01:13.
viter.alex вне форума Ответить с цитированием
Старый 20.02.2009, 16:56   #4
DrManual
 
Регистрация: 12.02.2009
Сообщений: 4
По умолчанию

Спасибо за реальную помощь!

В конечном варианте код выглядит (и работает) так:
Код:

Sub AlignmentText()
'
' AlignmentText 
' 
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.ParagraphFormat
        .Alignment = wdAlignParagraphLeft
        .OutlineLevel = wdOutlineLevelBodyText
    End With
    With Selection.Find.Replacement.ParagraphFormat
        .Alignment = wdAlignParagraphJustify
        .OutlineLevel = wdOutlineLevelBodyText
    End With
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .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.ClearFormatting
End Sub
Еще раз спасибо!
DrManual вне форума Ответить с цитированием
Старый 20.02.2009, 17:25   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Лучшая благодарность — это когда следуют твоим советам.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах mihali4 Свободное общение 1 17.01.2009 01:43
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Word 2003 не работает "Параметры" tatav Microsoft Office Word 4 01.04.2008 15:00
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49