1

Тема: Макросы для работы со стилями в Word

В ветке http://wordexpert.ru/forum/viewtopic.php?id=1353 состоялось интересное обсуждение обработки стилей документов Word с помощью макросов.

После распознавания текстов и импортирования результатов распознавания в Word часто создается большое количество излишних ("мусорных") стилей.

Для комплексной    работы с данными стилями необходимо знать их номера, которые обычно идут подряд. Следующий макрос позволяет вывести в конец текущего файла список номеров стилей и их наименований, с помощью которого можно определить диапазоны "мусорных" стилей.

Sub ShowStyles()
    Dim i As Integer
    MsgBox "Количество стилей: " & ActiveDocument.Styles.Count
    Selection.EndKey Unit:=wdStory
    For i = 1 To ActiveDocument.Styles.Count
        'вывод номеров стилей и их наименований в конец текущего файла
        Selection.Range.Text = i & " " & ActiveDocument.Styles(i).NameLocal
        Selection.EndKey Unit:=wdLine
        Selection.TypeParagraph
    Next i
End Sub

Далее в настоящей ветке блога будут рассмотрены макросы, преобразующие текст документа из "мусорных" стилей в стандартные, и удаление ненужных стилей.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

2

Re: Макросы для работы со стилями в Word

Удаление избыточных стилей

Как уже отмечалось, избыточные стили обычно имеют номера, идущие подряд (соответствующие номера определяются предыдущим макросом ShowStyles). Это позволяет удалить избыточные стили с помощью цикла:

Sub DeleteSomeStyles()
    Dim i As Integer
    For i = [начальный_номер_диапазона_избыточных_стилей] To [конечный_номер_диапазона_избыточных_стилей]
        ActiveDocument.Styles(i).Delete
    Next i
End Sub

В приведенный макрос вместо выражения [начальный_номер_диапазона_избыточных_стилей] нужно внести начальный номер диапазона избыточных стилей, а вместо выражения  [конечный_номер_диапазона_избыточных_стилей] - конечный номер указанного диапазона.

Можно также воспользоваться следующим макросом, запрашивающим ввод начального и конечного номеров диапазона избыточных стилей:

Sub DeleteSomeStyles()
    Dim intNStart As Integer
    Dim intNEnd As Integer
    intNStart = InputBox("Введите начальный номер диапазона избыточных стилей: ")
    intNEnd = InputBox("Введите конечный номер диапазона избыточных стилей: ")
    'удаление избыточных стилей
    Dim i As Integer
    For i = intNStart To intNEnd
        ActiveDocument.Styles(i).Delete
    Next i
End Sub

Примечание. Обычно при использовании данного макроса отрывки, набранные избыточными стилями, заменяются на стиль Обычный, однако необходимо это проверить и убедиться, что потери текста не происходит.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

3

Re: Макросы для работы со стилями в Word

А чем определяются избыточные стили? Я уже говорил, что лучше всего использовать в документе стили отмеченные каким нибудь значком, тогда в макросе при переборе стилей, если в имени стиля нет этого значка, то он удаляется.

4

Re: Макросы для работы со стилями в Word

aap77 пишет:

А чем определяются избыточные стили? Я уже говорил, что лучше всего использовать в документе стили отмеченные каким нибудь значком, тогда в макросе при переборе стилей, если в имени стиля нет этого значка, то он удаляется.

В моей практике такие избыточные стили формируются автоматически в процессе распознавания текстов. Обычно они называются x1, x2 и т.д. В принципе, по признаку наличия буквы x в наименовании их можно различить и удалить.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

5

Re: Макросы для работы со стилями в Word

А я вот только вчера работал со стилями Char Style_

6

Re: Макросы для работы со стилями в Word

Сейчас выложу более гибкий макрос

7

Re: Макросы для работы со стилями в Word

aap77 пишет:

А я вот только вчера работал со стилями Char Style_

Со стилями Char Style - это интересно! smile

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

8

Re: Макросы для работы со стилями в Word

Ничего интересного, просто при распознавании текста, в зависимости от настроек файнридера имена стилей и нумерация может быть разной, поэтому вот макрос который сначала запрашивает имя стиля, потом диапазон, например 101-110, а потом удаляет их, если диапазон не назначен, удаляются все стили в которых присутствует название

Public Sub DeleteSomeStyles()
Dim intStyle As String
Dim intIndex As Variant
Dim i As Integer, Sty As Style, NStart As Integer, NEnd As Integer
    intStyle = InputBox("Введите имя стиля: ")
    intIndex = InputBox("Введите диапазон (10-52): ")
    If intIndex = "" Then
        For Each Sty In ActiveDocument.Styles
            If InStr(1, Sty.NameLocal, intStyle) > 0 Then
                Sty.Delete
            End If
        Next Sty
    Else
        intIndex = Split(intIndex, "-")
        NStart = Val(intIndex(0))
        NEnd = Val(intIndex(UBound(intIndex)))
            For i = NStart To NEnd
                On Error Resume Next
                Set Sty = ActiveDocument.Styles(intStyle & i)
                     If Err.Number > 0 Then
                        Set Sty = ActiveDocument.Styles(intStyle & " " & i)
                    End If
                Sty.Delete
            Next i
    End If
End Sub

9

Re: Макросы для работы со стилями в Word

Следующий макрос печатает только встроенные стили (свойство BuiltIn):

Sub ShowBuiltInStyles()
    Dim i As Integer
    Dim i1 As Integer
    'счетчик встроенных стилей
    Selection.EndKey Unit:=wdStory
    For i = 1 To ActiveDocument.Styles.Count
        If ActiveDocument.Styles(i).BuiltIn = True Then
        'печать перечня встроенных стилей с номерами стилей в коллекции
            Selection.Range.Text = i & " " & ActiveDocument.Styles(i).NameLocal
            Selection.EndKey Unit:=wdLine
            Selection.TypeParagraph
            i1 = i1 + 1
        End If
    Next i
    Selection.EndKey Unit:=wdLine
    Selection.TypeParagraph
    Selection.Range.Text = "Общее количество стилей: " & ActiveDocument.Styles.Count
    Selection.EndKey Unit:=wdLine
    Selection.TypeParagraph
    Selection.Range.Text = "Количество встроенных стилей: " & i1
End Sub

В моем файле оказалось 264 встроенных стиля из общего количества стилей 283.
При попытке удаления встроенного стиля выдается ошибка.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

10

Re: Макросы для работы со стилями в Word

Есть документ (см.вложение), в нем нет никакого текста, макрос ShowStyles выдает 266 стилей

Sub ShowStyles()
    Dim i As Integer
    MsgBox "Количество стилей: " & ActiveDocument.Styles.Count
    Selection.EndKey Unit:=wdStory
    For i = 1 To ActiveDocument.Styles.Count
        'вывод номеров стилей и их наименований в конец текущего файла
        Selection.Range.Text = i & " " & ActiveDocument.Styles(i).NameLocal
        Selection.EndKey Unit:=wdLine
        Selection.TypeParagraph
    Next i
End Sub


Вот этим макросом пробую удалять неспользованные стили

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

Никаках стилей не удалил, осталоись все те же. Пробовал другим макросом

Sub Удалить_стили()
    Debug.Print "<<< Старт " & Now
Dim myStyle As Word.Style
Dim i&, N1&, N2&
Dim S$
    N1 = 0: N2 = 0
    For i = ActiveDocument.Styles.Count To 1 Step -1
        Set myStyle = ActiveDocument.Styles(i)
        If myStyle.BuiltIn = True Then
        ElseIf myStyle.InUse <> True Then
        Else
            S = myStyle.NameLocal
            With ActiveDocument.Content.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Format = True
                .Style = S
                .Execute Replace:=Word.wdReplaceNone
                If .Found = True Then
                Else
                    On Error Resume Next
                    myStyle.Delete
                    If Err.Number <> 0 Then
                        N2 = N2 + 1
                        Debug.Print _
                            "- Ошибка " & CStr(Err.Number) & " (" & Err.Description & ")" & _
                            " при удалении стиля """ & S & """"
                    End If
                    If IsObjectValid(myStyle) Then
                        Debug.Print "- Не был удален стиль """ & S & """"
                    Else
                        N1 = N1 + 1
                        Debug.Print "+ Удален стиль """ & S & """"
                    End If
                End If
            End With
        End If
    Next i
    Debug.Print "= Удалено: " & CStr(N1)
    Debug.Print "= Ошибок: " & CStr(N2)
    Debug.Print ">>> Финиш " & Now
End Sub

то же ничего не удалил.

через "Организатор" удаление не устраивает, т.к. там остаются только встроенные стили, а надо чтобы в документе оставались еще и использованные стили.

Post's attachments

Опытный файл.docx 57.13 Кб, 5 скачиваний с 2012-08-23 

You don't have the permssions to download the attachments of this post.

11

Re: Макросы для работы со стилями в Word

Уважаемый Владимир, ваш макрос DeleteUnusedStyles прекрасно удаляет стили! Но дело в том, что все 266 стилей, о которых вы пишете - встроенные. Поэтому они и не удаляются.

Проблема в том, что макрос DeleteUnusedStyles удалил у меня все стили, а не только неиспользуемые. Я немного изменил программу - добавил логическую переменную и кое-что переместил (изменения выделены).

Sub DeleteUnusedStyles()
  Dim oSt As Style, sMsg As String, oStrRange As Range
  Dim boolA As Boolean
  boolA = False
  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
        End With
        If (oStrRange.Find.Found) Then
            'Если нашли такой текст, то переменная boolA = True
            boolA = True
        End If
      Next oStrRange
        If (Not boolA) 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 If
  Next
  MsgBox sMsg, vbInformation, "Результаты удаления стилей"
End Sub

Теперь используемые стили, как мне кажется, не удаляются.
Большое спасибо за макрос!

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

12

Re: Макросы для работы со стилями в Word

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

13

Re: Макросы для работы со стилями в Word

vladimir23 пишет:

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

К сожалению, мне также непонятно, почему так происходит, но, так или иначе, в моем Word'е все эти стили имеют параметр BuiltIn=True.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

14

Re: Макросы для работы со стилями в Word

Александр Львович!
Что бы не сильно заморачиваться со стилями я изначально создал шаблон с ограниченным количеством последних и обозвав их My_Style сохранил как свой стиль в W2007-10.
А уж потом по этой одёжке протягиваю ножки...
Но...по наущению Эндрю Ципиховича вернулся к Word 2003, слегка напрягает выбор между используемыми, специальными и доступными стилями...Вроде худо бедно сохранил по этому принципу шаблон My_Style. Но никак не вытравляются два странных стиля в группе "используемых" "Обычный+по центру и 0 пт" и "Обычный 0пт" и ещё какая-то фигня.
Узнаете их среди моих названий...Странно они и не выделяются и кликаньем удалить их не удаляет...Почему. Посмотрите пожалуйста.
Шаблон прилагаю

Post's attachments

TO_Gurevitch.rar 132.73 Кб, 8 скачиваний с 2012-09-25 

You don't have the permssions to download the attachments of this post.
Yeah, really?

15

Re: Макросы для работы со стилями в Word

Валентин, почему-то приложенные RAR-ы у меня уже второй раз не открываются. Приложите, пожалуйста, без архива.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

16

Re: Макросы для работы со стилями в Word

Вложение

Post's attachments

TO_Gurevitch.dot 286.5 Кб, 17 скачиваний с 2012-09-25 

You don't have the permssions to download the attachments of this post.
Yeah, really?

17

Re: Макросы для работы со стилями в Word

Александр Львович! Вот сверху в цитате с вашим именем вложение - без архива вроде скачивается.
Гляньте одним глазом - два стиля - если выставить фильтр "Используемые". В других шаблонах у меня их нет только в этом остаются и по наследству передаются на Word 2003. Между стилями "Без интервала" и "Строгий". : типа 0ПТ+ обычный.
Я их выбираю удалить, или показать - они не показываются и не удаляются.... sad

Yeah, really?

18

Re: Макросы для работы со стилями в Word

Valentine для начала хотелось бы сказать:
1. Удаление Встроенных стилей и Созданных(или вставленных) это 2 разных процесса, причем здесь также играет роль привязка к другому стилю.
Встроенный стиль, если он не имеет привязки не удаляется, а скрывается, заменяясь на настройки шрифта и абзаца стиля Обычный. Если же он привязан к другому стилю, то Word будет предлагать поменять настройки на привязанный стиль до тех пор, пока не дойдет до стиля без привязки, который под операцией Удалить скроет Встроенный стиль заменив на стиль Обычный.
Созданный(или вставленный) стиль удалиться без проблем заменившись на Обычный.
2. Стили типа Связанный знак и абзац, обычными макросами корректно смогут удалиться тогда, когда применены целиком к абзацу. А не к отдельно выделенным словам.
3. Свойство Style.Visibility также имеет свой нюанс, True скрывает стиль от использования, а также из окна Стили. False открывает стиль, но может показывать или нет в зависимости от настройки Показать используемые.
4. Для избегания большинства связанных со Стилями проблем, есть несколько основополагающих рекомендаций.

19

Re: Макросы для работы со стилями в Word

Уважаемый Валентин,
Я прошу прощения за длительное молчание. На меня навалилось много работы (и сейчас ее еще немало). Постараюсь узнать все, что смогу про описанный вами стиль.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

20

Re: Макросы для работы со стилями в Word

Печать созданных стилей:

Sub ShowBuiltInStyles()
    Dim i As Integer
    Dim i1 As Integer
    'счетчик встроенных стилей
    Selection.EndKey Unit:=wdStory
    For i = 1 To ActiveDocument.Styles.Count
        If ActiveDocument.Styles(i).BuiltIn = False Then
        'печать перечня созданных стилей с номерами стилей в коллекции
            Selection.Range.Text = i & " " & ActiveDocument.Styles(i).NameLocal
            Selection.EndKey Unit:=wdLine
            Selection.TypeParagraph
            i1 = i1 + 1
        End If
    Next i
    Selection.EndKey Unit:=wdLine
    Selection.TypeParagraph
    Selection.Range.Text = "Общее количество стилей: " & ActiveDocument.Styles.Count
    Selection.EndKey Unit:=wdLine
    Selection.TypeParagraph
    Selection.Range.Text = "Количество встроенных стилей: " & i1
End Sub
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

21

Re: Макросы для работы со стилями в Word

Валентин, высылаю вам в приложении результаты работы описанных выше макросов.
К сожалению оказалось,  что данные макросы выявляют не все стили. Выявились только следующие созданные стили:

3 msonospacing
49 Мелочь
53 Ненужный
54 Ненужный 1
55 Ненужный 2
207 Таблица
266 Центр 3
267 Центр1
268 Центр2

Общее количество стилей: 273
Количество встроенных стилей: 9

Например, не удалось выявить стили:
Выделение + надстрочные
По центру После:  0 пт Междустр.интервал:  одинарный
После:  0 пт Междустр.интервал:  одинарный

Вероятно, все эти стили были созданы автоматически, поскольку у вас установлены флажки Отображать как стили: Форматирование абзацев, Форматирование текста и Форматирование списков.
Почему так происходит, мне пока непонятно.

Вероятно, такие автоматически созданные стили почему-то не включаются в коллекцию стилей? Или я допустил какую-то ошибку при перечислении коллекции ActiveDocument.Styles?

Post's attachments

Стили - To Valentine.docx 18.84 Кб, 6 скачиваний с 2012-10-15 

You don't have the permssions to download the attachments of this post.
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

22

Re: Макросы для работы со стилями в Word

Александр!
Попробуйте Методом Найти найти в TO_Gurevitch.dot стиль Мелочь. Word выдаст что ничего не найдено. Хотя шрифт этого стиля в документе используется. big_smile

23

Re: Макросы для работы со стилями в Word

aap77 пишет:

Александр!
Попробуйте Методом Найти найти в TO_Gurevitch.dot стиль Мелочь. Word выдаст что ничего не найдено. Хотя шрифт этого стиля в документе используется. big_smile

У меня в списке стилей метода Найти вообще нет стиля Мелочьroll
Чудеса какие-то!
Александр, как вы думаете, почему так происходит?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

24

Re: Макросы для работы со стилями в Word

В списке он есть.
А найти его нельзя, потому, что стиль Мелочь является Стилем Связанного абзаца и знака, а в документе используется только форматирование Шрифта этого стиля.

25

Re: Макросы для работы со стилями в Word

А почему стили Выделение + надстрочные; По центру После:  0 пт Междустр.интервал:  одинарный; После:  0 пт Междустр.интервал:  одинарный не входят в коллекцию Styles?
Можно ли к ним, каким-то образом, обратиться?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

26

Re: Макросы для работы со стилями в Word

Выделение + надстрочные является видоизменением стиля и Выделение, который имеет тип Стиль знака. И обратиться можно к стилю Выделение. Напрямую к Выделение + надстрочные обратиться нельзя.

27

Re: Макросы для работы со стилями в Word

aap77 пишет:

Выделение + надстрочные является видоизменением стиля и Выделение, который имеет тип Стиль знака. И обратиться можно к стилю Выделение. Напрямую к Выделение + надстрочные обратиться нельзя.

Хорошо, а стили По центру После:  0 пт Междустр.интервал:  одинарный и После:  0 пт Междустр.интервал:  одинарный являются стилями абзаца.
Почему же к ним нельзя обратиться?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

28

Re: Макросы для работы со стилями в Word

aap77 пишет:

В списке он есть.
А найти его нельзя, потому, что стиль Мелочь является Стилем Связанного абзаца и знака, а в документе используется только форматирование Шрифта этого стиля.

Кстати, я выделил стилем Мелочь целый абзац. Все равно его в окне Найти не видно!...
В чем же тут дело? Что нужно выделить этим стилем, чтобы он стал виден в окне Найти?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

29

Re: Макросы для работы со стилями в Word

По той же причине. Только здесь стиль не Знака Абзаца. Это все из-за структуры объектной модели Word. Хотя казалось бы прога работает с текстом, а таких элементарных вещей как группировка стилей и создание стиля в группе нет. Так же как и для стилей Связанный знак и абзац нет выбора привязки отдельного стиля Шрифта к стилю Абзаца. Так же нет функций сравнения например Выделения к Настройкам Стилей. smile
Но все это можно сделать в VBA, для удобства создав отдельную Надстройку.

30

Re: Макросы для работы со стилями в Word

aap77 пишет:

По той же причине. Только здесь стиль не Знака Абзаца. Это все из-за структуры объектной модели Word. Хотя казалось бы прога работает с текстом, а таких элементарных вещей как группировка стилей и создание стиля в группе нет. Так же как и для стилей Связанный знак и абзац нет выбора привязки отдельного стиля Шрифта к стилю Абзаца. Так же нет функций сравнения например Выделения к Настройкам Стилей. smile
Но все это можно сделать в VBA, для удобства создав отдельную Надстройку.

Александр, к сожалению, никак не вижу закономерности:
Стиль Выделение + надстрочные - стиль шрифта; не виден в Найти, нет в коллекции.
Стиль Мелочь - связанный стиль; не виден в Найти, есть в коллекции.
Стиль Ненужный - стиль абзаца; виден в Найти, есть в коллекции.
Стиль После:  0 пт Междустр.интервал:  одинарный - стиль абзаца; не виден в Найти, нет в коллекции.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

31

Re: Макросы для работы со стилями в Word

После:  0 пт Междустр.интервал:  одинарный, есть стиль Обычный с измененным форматированием.
То есть стиль Обычный в данном шаблоне создан автоматически и Междустр.интервал у него 1.5, отступ после 10 пт. И автор, чтобы не мучится, вручную выделил текст и придал настройкам абзаца После:  0 пт Междустр.интервал:  одинарный и рядышком с названием ним нет ни значка абзаца, ни значка знака, то есть Word После:  0 пт Междустр.интервал:  одинарный не воспринимает как шрифт.

32

Re: Макросы для работы со стилями в Word

aap77 пишет:

И автор, чтобы не мучится, вручную выделил текст и придал настройкам абзаца После:  0 пт Междустр.интервал:  одинарный и рядышком с названием ним нет ни значка абзаца, ни значка знака, то есть Word После:  0 пт Междустр.интервал:  одинарный не воспринимает как шрифт.

Вероятно, все же, что этот стиль создался автоматически, из-за установленных флажков Отображать как стили: Форматирование абзацев, Форматирование текста и Форматирование списков.
Вероятно, показателем таких автоматически установленных стилей является то, что "рядом с их названием нет ни значка абзаца, ни значка знака". Такой стиль, скорее всего, действительно воспринимается программой не как отдельный стиль, а как модификация стиля.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

33

Re: Макросы для работы со стилями в Word

Не скорее, а точно.
Сейчас создаю собственный класс Font, автоматически будут сравниваться свойства Selection.Font или Range.Font со свойством Font, базового стиля.

34

Re: Макросы для работы со стилями в Word

Уважаемые Александр Львович и aap77!
Спасибо что откликнулись и заглянули в мои каракули...
Я почему и заполз в эту тему, так как ясности с этими всякими стилями у меня не хватает.
И вообще, только появляется ощущение, что что-то начал понимать в этом Word, как он словно издеваясь сунет тебе очередну фигню типа неубираемых этих стилей...
что б вы только знали сколько раз я зубами скрежетал с этим автотекстом - пишешь, набираешь, сохранишь в шаблоне, шаблон поменяешь или при переноске с работы домой что сделается и...вместо многодневных наработок одни пустые окна... Вот это трагедия.
Это потом я наконец понял зачем шаблоны, а зачем файлы на их основе...
Да в одиночку всё... из окружения никому это не надо... А тут как написать тоже по-первости вроде как неудобно. Это сейчас вроде что-то начал понимать, да вот вы да ещё Ципихович Эндрю вроде приободрил...
Зато, потом какая радость, когда шаблон на глазах у тебя превращается в инструмент - вроде бошевского перфоратора...и писать получается не нудная обязанность, а даже удовольствие...
Я не поверите записал автоматической записью макрос - вставить пробел... Ну не ахти какая автоматизация...Вроде во всех местах есть - Вставка- вставить пробел- начать с новыой страницы... Вот три раза кликнуть...
Но...потребность такая возникает, когда не укладываюсь в заранее заготовленный протокол на одной странице... То есть материал получается сложнее обычного...То есть мозгозатрат на такой случай надо больше...как правило в таких случаях приходит ещё и ощущение - "возишься, хватит выписывать, отпускай человека, очередь создал".
И странное чувство именно с этими плёвыми пробелами получаются мучения из-за двух лишних кликов... Ну мозгами понимаю, - это психологически только. Но зубами уже не один раз скрежетал.
А тут раз - макрос, картиночку на него выбрал приметную - кружочек красный внутри перечёркнутый... Теперь нажимаю - получаю удовольствие... smile
Вы молодцы много всего разного хорошего тут пишите.
Вот со стилями меня удивило...
Тут с этим шаблоном как получилось... Я там со слепу мог что угодно наворотить...
Шаблон со стилями Без интервала, основной, строгий, Заголовок1-3, их модификации Центр 1-3, потом таблица и мелочь... Я вначале склепал в Word 2007-2010.
Каюсь, собирал их не особо понимая что делаю. Думал сделаю один шаблон Шапки-заголовки и буду на их основе клонировать остальные...
Долго получается - извините.
Короче когда я вернулся от Word 2010 назад к Word 2003 я взял за основу  привычные стили с Колибри... Мне нравятся эти шрифты ну и как-то так перенёс их. Что-то помню не срасталось я на глазок попереименовывал...
В других шаблонах вроде у меня в списке "Используемые" не возникает проблем, хотя постоянно нет нет да и выплывет очередной "nospaсe + кака-то хрень..."
Я так понимаю это из глубин всплывают, предустановленные стили с неблагозвучными именами...
Особо раздражает предположим Стиль Нормальный и тут же какой-то "Нормальный Знак"
Блин что за знак какой знак? Затёр как-то знак такой - всё порушилось...Больше не трогаю...
Выбрал вот 6-7 стилей и выбираю их из "Специальные" или "Используемые" Вот...
Ну короче я ещё тут почитаю, может вопросы позадаю, потом, а то и так много тут накарлюкал....
Слушал Гришковца у нас выступал вчера..."Прощание с бумагой"... Очень порадовала, что он про слово "карлюкать" сказал... Так казалось это только из моего детства...оказалось не только из моего  smile

Yeah, really?

35

Re: Макросы для работы со стилями в Word

Особо раздражает предположим Стиль Нормальный и тут же какой-то "Нормальный Знак"
Блин что за знак какой знак?

Уважаемый Valentine!
1. Все встроенные и вновь создаваемые стили типа Связанные Абзац и Знак состоят практически из 2-х стилей. Стиля Абзаца и Стиля Знака. Ворд в меню стилей отображает название стиля Абзаца. А стиль Знака, который состоит из названия Абзаца + Знак не отображает.
2. Стиль Абзаца определяется по значению Стиля невидимого знака конца абзаца «¶» и если Вы в каком-то выделили слово и присвоили ему значение другого стиля типа связанного Абзаца и Знака, то чтобы найти это слово через Найти и Заменить надо выбирать не название стиля абзаца, а стиль его знака Абзаца + Знак.

36

Re: Макросы для работы со стилями в Word

Спасибо дорогой aap77.
Скажите, что имеется в виду когда мы говорим Стиль Знак - этот знак относится к тому какой мы шрифт употребляем. То есть, был стиль "Встроенный" условно говоря. Я поменял Aria 10 на Colibry 12 и Word обозвал его "Встроенный Знак"?
А если я (вернее даже не я, а команда Word 2007-2010  что то неведомое мне сотворила предположим с красной строкой или этим загадочным 0Пт - без интервала, то получается, что Word 2003 связывает Встроенный Знак -nospacing, а просто так его не найти даже поиском так как в голову не приходит как в результате таких трансформаций он может называться...
На самом деле я как и говорил ранее являюсь минималистом... Попытки менять стили меня не очень интересуют... И все проблемы возникать начинают, когда я шесть "табельных" стилей затрудняюсь найти только... Поэтому у меня интерес скорее познавательный...
Лично меня угнетает огромное количество "строгое выделение для оглавления списка литературы"...
И я их делаю невидимыми вынося в W2010 "табельные" стили на ленту в экспресс-стили... B Word 2003 я увидел забытые фильтры уже Специальные и Используемые и слегка растерялся...
Тем более не понял почему в этом шаблоне в списке Используемые стоит два непонятных стиля, которые не убираются простым стереть...И не выделяются, но обозначаются как пристуствующие...
Вот например у меня в примере :0ПТ Междкстрочный интервал:одиинарный интервал после :0Пт. Стоит есть 4 вложения этого стиля... Кликаешь выделить - их не выделяется...А убрать нет вообще - затемнено у меня... То есть искать мне его не надо он в используемых стоит и не уходит  smile
Он что из встроенных почему он в используемых если его не выделяет?
Я бы плюнул там слишком много автотекста уже стоит и панелей.
Ну так мне не очень мешает, я понять такой невидимости не могу...

Yeah, really?

37

Re: Макросы для работы со стилями в Word

1. Все стили в Ворде после названия должны иметь значок либо «», либо «а», либо «¶а». Если в списке рядом с названием не стоят эти значки, то это говорит о том, что в документе вы нарушили установки стиля.
2. Стили без значков являются только информативными. Отдельного класса в VBA и доступа к ним напрямую через код нет. Они лишь только говорят о том, что вы изменили в настройках шрифта и абзаца Основного стиля (не путайте с Базовым). Внести изменения на данном этапе развития Ворда Вы можете только глобально и только через интерфейс. Стандартно такие стили состоят из Названия стиля + Список внесенных изменений. Когда изменений много, то они не помещаются, как правило в меню стилей, но отображаются во всплывающем окне при наведении курсора на стиль.
Если название стиля не указано, изменения касаются стиля Обычный.
3. Нарушение настроек стилей не указывается, если Вы в абзаце применили какой-нибудь существующий стиль Шрифта без изменений. Например, если Вы к стилю Обычный, 2-му слову примените стиль шрифта Сильное выделение, то в меню стиле эти изменения не появятся. С другой стороны, если к тому же слову Вы примените настройки шрифта по отдельности, вручную, то эти изменения отобразятся. Если же к тому же слову Вы примените Связанный стиль «¶а», например Цитата, то фактически к нему применится стиль Цитата Знак. А в меню стили отобразится только название Цитата. Что в основном при поиске и замене запутывает пользователей, т.к. не понятно к чему применен данный стиль к абзацу или шрифту.

38

Re: Макросы для работы со стилями в Word

Нарушение настроек стилей не указывается, если Вы в абзаце применили какой-нибудь существующий стиль Шрифта без изменений. Например, если Вы к стилю Обычный, 2-му слову примените стиль шрифта Сильное выделение, то в меню стиле эти изменения не появятся. С другой стороны, если к тому же слову Вы примените настройки шрифта по отдельности, вручную, то эти изменения отобразятся. Если же к тому же слову Вы примените Связанный стиль «¶а», например Цитата, то фактически к нему применится стиль Цитата Знак. А в меню стили отобразится только название Цитата. Что в основном при поиске и замене запутывает пользователей, т.к. не понятно к чему применен данный стиль к абзацу или шрифту.

Твою ж мать... Зачем так сделано? Что бы продемонстрировать гибчайший интерфейс?
Мусор можешь раскидывать куда хочешь, а достать из дальнего угла тебе никто не достанет потом?
Грустно это... Впрочем не первый раз уже грустно... sad

Yeah, really?

39

Re: Макросы для работы со стилями в Word

Грустно, поэтому и создал свойство StylesFontLinkedInDocument в классе clsStylesSort о котором рассказывал в своем Блоге.

40

Re: Макросы для работы со стилями в Word

aap77 пишет:

Грустно, поэтому и создал свойство StylesFontLinkedInDocument в классе clsStylesSort о котором рассказывал в своем Блоге.

См.: http://wordexpert.ru/forum/viewtopic.php?id=1514

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

41

Re: Макросы для работы со стилями в Word

aap77 пишет:

...Свойство Style.Visibility также имеет свой нюанс...

Причем не один.  Видимо не зря свойство Visibility не документировано.
Запускаю макрос, он опрашивает Visibility у всех стилей документа - в результате все опрошенные стили получают InUse=True, а документ Saved=False smile

P.S. InUse=True - означает что стиль использовался, но не обязательно используется сейчас. Например, применили к тексту и удалили этот текст, результат - InUse=True .

Отредактировано Вождь (09.11.2012 11:39:44)

Макросы под заказ и готовый пакет - mtdmacro.ru

42

Re: Макросы для работы со стилями в Word

Здравствуйте!
Десять лет прошло, а у меня вопрос возник.
Можно ли макросом найти и выделить фрагменты текста в документе, где стиль модифицировался вручную, то есть, в окнах Инспектора стилей у него появились "плюсы"?