1

Тема: Оптимизировать макрос обработки параграфов

Здравствуйте, помогите добавить в макрос несколько строк:
1) Нужно исключить обработку таблиц и рисунков.
2) Исключить списки.
3) Добавить возможность работать в выделенной области документа.


Sub Indent()
Dim p As Paragraph
For Each p In ActiveDocument.Paragraphs
    If Not p.Style Like "Заголовок*" & "Название таблицы" & "Название объекта" & "Название рисунка" & "Абзац списка" _
    & "Гиперссылка" & "СОДЕРЖАНИЕ" & "Параграф рисунка" Then ' стили исключения
        With p.Range
            .Font.Name = "Times New Roman"
            .Font.Size = 12
            .ParagraphFormat.LineSpacingRule = wdLineSpace1pt0 'одиночный межстрочный
            .ParagraphFormat.SpaceBefore = 6 ' интервал перед
            .ParagraphFormat.SpaceAfter = 6 ' интервал после
            .ParagraphFormat.FirstLineIndent = CentimetersToPoints(1.25) ' отступ
            
        End With
    End If
Next
End Sub

2

Re: Оптимизировать макрос обработки параграфов

по крайней мере

Sub Indent25()
Dim p As Paragraph
For Each p In ActiveDocument.Paragraphs
    If p.Style Like "Заголовок*" _
      Or p.Style Like "Название*" _
      Or p.Style Like "Название таблицы*" _
      Or p.Style Like "Название объекта*" _
      Or p.Style Like "Название рисунка*" _
      Or p.Style Like "Абзац списка*" _
      Or p.Style Like "Гиперссылка*" _
      Or p.Style Like "СОДЕРЖАНИЕ*" _
      Or p.Style Like "Параграф рисунка*" Then ' стили исключения
    Else
        With p.Range
            .Font.Name = "Times New Roman"
            .Font.Size = 12
            .ParagraphFormat.LineSpacingRule = wdLineSpaceSingle 'одиночный межстрочный
            .ParagraphFormat.SpaceBefore = 6 ' интервал перед
            .ParagraphFormat.SpaceAfter = 6 ' интервал после
            .ParagraphFormat.FirstLineIndent = CentimetersToPoints(1.25) ' отступ
            
        End With
    End If
Next
End Sub

3

Re: Оптимизировать макрос обработки параграфов

Slamzor пишет:

1) Нужно исключить обработку таблиц и рисунков.

If Not p.Range.Information(wdWithInTable) And _
    p.Range.ShapeRange.Count =0 And _
    p.Range.InlineShapes.Count = 0 Then
'Выполняем нужные действия
End If
Slamzor пишет:

2) Исключить списки.

If p.Range.ListFormat.ListType = wdListNoNumbering Then
'Выполняем нужные действия
End If
Slamzor пишет:

3) Добавить возможность работать в выделенной области документа.

Вместо ActiveDocument использовать Selection

Лучше день потерять — потом за пять минут долететь!

4

Re: Оптимизировать макрос обработки параграфов

Подскажите, в этом случае (Or p.Style Like "Название объекта*") подстановочные знаки работают? То есть будет ли (Or p.Style Like "Название*") восприниматься как стиль Название объекта и название таблицы (рисунка)?

И можно ли использовать в этом случае:

ActiveDocument.Styles ("Название*")

5

Re: Оптимизировать макрос обработки параграфов

Оператор Like понимает знаки * и ?
С ActiveDocument.Styles такой фокус не пройдёт: нужно полное имя стиля

Лучше день потерять — потом за пять минут долететь!