Статьи из блога
Поиск и применение стилей к абзацам документа
Вопрос от Андрея:
Между "@" и "" в начале абзацев (не всех) расставлены стили, которые необходимо применить к абзацам, а саму отметку стереть. Вот, например: @MIH_HEAD_F АУДИТОРСКОЕ ЗАКЛЮЧЕНИЕ. После работы макроса получаем:"АУДИТОРСКОЕ ЗАКЛЮЧЕНИЕ" стилем MIH_HEAD_F. При этом в тексте могут встречаться и простые @ (например e-mail) без знака. Все возможные стили уже в ворде.
Я предложил следующий пример макроса:
Sub styleApply_Delete() 'Ищем вхождение строки типа "@MIH_HEAD_F ", 'применяем к текущему параграфу стиль, имя которого взято из найденного вхождения, 'удаляем найденное вхождение строки, 'удаляем лишние пробелы перед абзацами Dim myStyle As String Dim par As Paragraph On Error Resume Next With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = "(\@)([A-z]{1;}^32)" .Forward = True .MatchWildcards = True .Wrap = wdFindContinue Do While .Execute With Selection If Right(.Range, 1) = Chr(32) Then .MoveLeft unit:=wdCharacter, count:=1, Extend:=wdExtend End If .MoveStart unit:=wdCharacter, count:=1 'сужаем выделение слева myStyle = Selection.Text 'запоминаем выделение .MoveStart unit:=wdCharacter, count:=-1 'расширяем выделение слева .Paragraphs(1).Style = myStyle 'применяем к текущему параграфу стиль с именем выделения .Delete 'удаляем выделение End With Loop End With 'Удаляем лишние пробелы перед параграфами (абзацами) For Each par In ActiveDocument.Paragraphs If Left(par.Range.Text, 1) = Chr(32) Then par.Range.Text = LTrim(par.Range.Text) End If Next par End Sub
Чуть позже Андрей сообщил:
Благодарю за участие!
Макрос рабочий.
Если интересно, привожу способ, на котором остановились. Маска поиска тэгов оказалась неработоспособной, так как в некоторых текстах встречались адреса электронной почты, которые приводили к некорректной работе.
Поскольку тэгов было порядка 15 штук - для каждого был создан подобный фрагмент кода:
' Обрабатываем каждый тэг стиля и применяем к соответствующему абзацу With ActiveDocument.range.find .Text = "\@EMPTY_LS = ": .MatchWildcards = True While .Execute 'Определяем имя стиля из найденного текста, убирая @, = и обрезая пробелы sStyleName = Trim(Replace(Replace(.Parent.Text, "@", ""), "=", "")) 'Применяем стиль к абзацу, в котором найден текст .Parent.Paragraphs(1).range.ParagraphFormat.Style = ActiveDocument.Styles(sStyleName) 'Обработчик ошибки, на тот случай, если стиль в документе отсутствует. Если ошибки нет, 'то найденный текст удаляем. If Err.Number = 5941 Then Err.Clear Else: .Parent.Delete Wend End With
Рубрика: Вопрос-Ответ, Макросы, Стили и форматирование
Метки: макросы | стили | форматирование
Просмотров: 16979
Подписаться на комментарии по RSS
Версия для печати
Метки: макросы | стили | форматирование
Просмотров: 16979
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 10 вопросов и ответов по редактору Word (1 часть)
- 3 способа очистки списка недавно открытых документов
- Word 2007: добавляем свою вкладку и свои команды
- Word 2007: полотно, рисунки, линии
- Word 2007: смена формата сохранения файла
- Word 97 - решение проблемы с отображением символов на линейке
- Word 97. Слияние документов как один из способов упростить свою работу
- Абзац с цветным фоном
- Автозаполняемые колонтитулы
- Автоматизация текстового набора в Word
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Автоформат документов
- Белый текст на синем фоне в Word 2007
- Буквица
- Быстрая смена ориентации страниц документа
- Быстрое изменение стиля форматирования текста
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрое удаление границ у таблицы
- Быстрый ввод текста с помощью команды =rand()
Комментариев: 2
БОльшое спасибо за очень нужный сайт! Я много работаю с текстом и мне Ваш сайт очень помогает.
У меня возникла такая проблема.
С какого-то момента текстовые страницы, с которыми я работаю ни с того ни с сего вдруг стали открываться с различными hiperlink вместо нормальных цифр, например, номеров страниц. Я понимаю, что это показываются какие-то ВЕБ-компоненты. Но я с ВЕБ и с интернетом в текстовом редакторе не работаю и откуда все это мне не понятно. Причем, никак не могу вернуть нормальный вид.
Помогите пожалуйста советом!
Игорь, посмотрите вот эту заметку: http://wordexpert.ru/page/kodyi-poley-vmesto-ssyilok-kak-vosstanovit-vid-ssyilok