Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

В этом выпуске опубликованы следующие советы:


Word Expert - профессиональная работа с текстом

Выпуск рассылки №139 от 2009-09-12 09:05

В этом выпуске:

  1. Советы и подсказки
  2. Полезные ссылки
  3. Информация об авторских правах

Советы и подсказки

Если у вас есть идея или совет по эффективному использованию редактора Word, то пишите мне через форму контактов на сайте. Любые ваши дельные советы и подсказки будут размещены в очередных выпусках рассылки и на сайте (с указанием вашего авторства).

Поиск и применение стилей к абзацам документа

Вопрос от Андрея:
Между "@" и "" в начале абзацев (не всех) расставлены стили, которые необходимо применить к абзацам, а саму отметку стереть.
Вот, например: @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
Оставить комментарий | Задать вопрос

Автоматическое сохранение документа при его закрытии

Вопрос от Михаила:
Как сделать так, чтобы при закрытии документа Word не выдавал окно с запросом на его сохранение и автоматически сохранял его всегда?

Михаил, если документ изменялся, то сообщение о необходимости сохранения изменений будет выводится всегда. Но вы можете воспользоваться следующим макросом:
Sub AutoClose()
  If ActiveDocument.Saved = False Then ActiveDocument.Save
End Sub
Этот макрос будет сохранять документ всякий раз при его закрытии автоматически.

Если вы не знаете, как подключить к документу и применить эти макросы, изучите следующие заметки с сайта:
Создание макроса из готового кода
Автоматическая запись макроса


Оставить комментарий | Задать вопрос

Как отключить или изменить функцию автозамену

Илья спрашивает:
У коллеги на компьютере установлен Word 2007, который достался ей от другого сотрудника. Когда она вводит фамилию начальника (например, Иванов) срабатывает автоматика и в конец документа добавляются примерно следующие строки: "Директор ООО "Парус" Иванов Иван Иванович".
То же самое происходит, если написать фамилию начальника отдела. Я хотел бы узнать, как отключить данную функцию?

Это срабатывает функция автозамены.
Отключить саму функцию нельзя, но можно удалить или изменить подставляемые фрагменты текста. Для этого откройте диалоговое окно Параметры Word (кнопка Office - кнопка Параметры Word) и перейдите на вкладку Правописание. Далее нажмите кнопку Параметры автозамены. Откроется диалоговое окно, в котором следует открыть вкладку Автозамена (рисунок).
На этой вкладке есть список слов, при вводе которых они заменяются на заданные слова или выражения.
Найдите в этом списке ваши строки и либо удалите их, либо измените (соответствующие кнопки под таблицей слов).
Подсказка: для быстрого поиска искомого слова в поле Заменить введите начальные буквы слова.
Оставить комментарий | Задать вопрос

Удаление текста между двумя фрагментами другого текста

Денис интересуется:
Имеется следующая задача: есть документ, в этом документе имеется ненужный текст. Текст соответственно разбросан по всему документу. Перед началом каждого такого "ненужного" текста имеется фрагмент - фрагмент №1, в конце этого "ненужного" текста имеется фрагмент №2 (то есть в начале ненужного текста написано фрагмент №1 , а в конце фрагмент №2). И так по всему документу.
Хотелось бы макрос, который ищет этот "ненужный" текст и удаляет его. И, соответственно, затем (или одной задачей) удалял эти фрагменты - фрагмент №1 и фрагмент №2.


Денис, вот вариант решения (не макрос, так как он излишен в данном случае), подсказанный Александром Витером.

Допустим, по вашим условиям у вас имеется в документе такой текст:
"фрагмент №1 некий текст фрагмент №2"
Нужно удалить и "некий текст" и обе надписи "фрагмент".
Откройте диалоговое окно Найти и заменить (CTRL+H) и в поле Найти введите следующее выражение:
([Фф]рагмент №1)*([Фф]рагмент №2)
Поле Заменить оставить пустым.
Установить флажок на параметре Подстановочные знаки.
Нажмите кнопку Заменить все и вы получите то, что вы хотели.
Оставить комментарий | Задать вопрос

Полезные ссылки

Информация об авторских правах

Вся информация, представленная на сайте WordExpert.ru и в этой рассылке, никаким образом не связана с корпорацией Microsoft. В рассылке упоминаются компании и продукты, которые могут быть зарегистрированными торговыми марками и принадлежать различным физическим и юридическим лицам как на территории РФ, так и за ее пределами.

Авторские права на все материалы, опубликованные на сайте WordExpert.ru и в этой рассылке (включая текст, фотографии, подборку, расположение и т.п.) принадлежат Кокину Антону Вадимовичу, если не указано иное. Вы можете свободно использовать и распространять эти материалы с обязательной ссылкой вида "Информация с сайта WordExpert.ru" и с обязательным указанием автора материала.

Все материалы, опубликованные на сайте WordExpert.ru и в этой рассылке, представлены на информационной основе. Вы можете использовать любую информацию с сайта WordExpert.ru или из данной рассылки исключительно на свой страх и риск. Тем не менее, я рекомендую перед применением какой-либо информации с сайта WordExpert.ru или из данной рассылки обязательно сохранять и создавать резервные копии ваших документов.

В этой рассылке также упоминаются различные web-страницы с соответствующими ссылками. Эти ссылки указываются исключительно в информационных целях и никакой рекомендации или одобрения с моей стороны данных веб-страниц не подразумевается, если не указано иное.


В избранное