1

Тема: Удаляем не нужные стили

Задача состоит в том что бы удалить не используемые стили из документа (о встоенных, то есть не удаляемых не говорим).
Когда документ правится в нём нередко появлются стили, которые потом не используются, но в документе они есть.
Есть ли какой-нибудь способ выявлеия таких стилей с последующим удалением.
Если в ручную просматривать каждый стиль, то тут тоже есть сложность: если стиль используется в колонтитуле, то указывается, что он не используется. Если он является родительским, а сам на прямую не используется, то тоже указывается, что он не используется.
Как сделать, чтобы нужное осталось, а остальное удалить. wink

2

Re: Удаляем не нужные стили

А какой в этом смысл? В размере файла не выиграешь сильно, а Word настраивается так, что показываются только используемые стили!! Если есть смысл ограничить форматирование, опять таки можно (в 2007-ом) разрешить использовать конкретных стилей? На кой их удалять?

Нет дверей которые не открываются. Любая задача имеет минимум 2 решения.

3

Re: Удаляем не нужные стили

Этот вопрос неоднократно поднимался. Я делал макрос, удаляющий неиспользуемые в документе стили, попробуйте:

Sub DeleteUnusedStyles()
  Dim oSt As Style, sMsg As String, oStrRange As Range
  For Each oSt In ActiveDocument.Styles
    On Error Resume Next
    If Not oSt.BuiltIn Then'Если стиль не встроенный
      For Each oStrRange In ActiveDocument.StoryRanges
        With oStrRange.Find
          .Style = oSt.NameLocal 'Ищем все вхождения текста, оформленного заданным стилем
          .Execute
          If (Not .Found) And Err.Number = 0 Then 'Если не нашли такой текст, и нет ошибок, то стиль удаляем
            sMsg = sMsg & "Удален """ & oSt.NameLocal & """" & vbCr: oSt.Delete
          ElseIf CBool(Err.Number) Then 'Если есть ошибка, то сообщаем об этом
            sMsg = sMsg & "Невозможно удалить """ & oSt.NameLocal & """" & ". Причина: " & Err.Description & vbCr
            Err.Clear
          End If
        End With
      Next oStrRange
    End If
  Next 
  MsgBox sMsg, vbInformation, "Результаты удаления стилей"
End Sub
Лучше день потерять — потом за пять минут долететь!

4

Re: Удаляем не нужные стили

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

Отредактировано Александр П. (26.02.2010 16:35:02)

5

Re: Удаляем не нужные стили

Жаль, но макрос не работает.
Вернее работает, но уж очень круто!
Я его запустил на пробу в небольшом документе. Он убрал стили: незадействованые; стили, которые используются в колонтитулах; и стиль, который был создан ручным форматированнием (для таблицы).
Ладно вроде ничего страшного. Создаю именной стиль применяю его. Запускаю макрос, он его опять удалил. Получается, что после применения макроса, стили созданные после этого всё равно удаляются. sad

Отредактировано Александр П. (01.03.2010 10:38:48)

6

Re: Удаляем не нужные стили

Александр П. пишет:

работает, но уж очень круто!

Макрос ищет встроенные "фирменные" стили Word. Остальные удаляет.
Можно попробовать заменить в этой строке

viter.alex пишет:

If Not oSt.BuiltIn Then

свойство BuiltIn на InUse (встроенные, созданные и используемые)

Отредактировано Денис (04.03.2010 21:05:56)

7

Re: Удаляем не нужные стили

Макрос не работает т.к. проверяет не весь документ.