Word Макрос. Как удалить лишние стили?

Автор Посетитель, 11 июня 2017, 16:31

Посетитель

Интересует, как можно удалить все стили, даже свои, созданные пользователем, кроме стандартных (которые присутствуют в документе по умолчанию при создании нового документа Word).

Администратор

Макрос
Sub Макрос()
   
    Dim style As style
    Dim i As Long
   
   
    ' Цикл по всем стиялм в активном файле от последнего к первому.
    For i = ActiveDocument.Styles.Count To 1 Step -1
        ' Присваиваем стилю имя "style" (чтобы удобнее писать код).
        Set style = ActiveDocument.Styles(i)
        ' Если стиль не встроенный, то удаляем.
        If style.BuiltIn = False Then
            style.Delete
        End If
    Next i
   
    ' Сообщение, чтобы было понятно, что макрос закончил работу.
    MsgBox "Готово.", vbInformation
   
End Sub
[свернуть]

Посетитель

Спасибо!
Вот только результат немного не тот, который я ожидал.
У текста, если удалить стиль вручную, структура не сбрасывается. А тут получается, что макрос везде заменяет все пользовательские стили на обычный.
Это поправимо или только так?

Администратор

Напишите, куда вы щёлкаете, чтобы удалить стиль вручную.

Посетитель

Подвожу указатель мыши к панели стилей, навожу на стиль, нажимаю правую кн. мыши, в выпадающем меню выбираю пункт  Удалить из коллекции экспресс-стилей.

Администратор

В этом случае стиль не удаляется, а только удаляется стиль из коллекции стилей.
Вы хотите удалить стиль совсем или из коллекции стилей? Коллекция стилей - это то, что вы показали на скриншоте в другой теме.

Администратор

Макрос удаляет из коллекции стилей пользовательские стили:
Макрос
Sub Макрос()
   
    Dim style As style, i As Long
   
   
    ' Цикл по всем стиялм в активном файле от последнего к первому.
    For i = ActiveDocument.Styles.Count To 1 Step -1
        ' Присваиваем стилю имя "style" (чтобы удобнее писать код).
        Set style = ActiveDocument.Styles(i)
        ' Если стиль есть в коллекции стилей (или если это спецстиль, которого может быть
            ' не видно в коллекции, но он там есть).
        If style.QuickStyle = True Then
            ' Если стиль невстроенный, то удаляем.
            If style.BuiltIn = False Then
                style.QuickStyle = False
            End If
        End If
    Next i
   
    ' Сообщение, чтобы было понятно, что макрос закончил работу.
    MsgBox "Готово.", vbInformation
   
End Sub
[свернуть]

Посетитель

Спасибо за вариант! Оба мне пригодятся!

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