Word 2010 Изменить стили с помощью макроса - PullRequest
0 голосов
/ 24 января 2020

Мне нужно изменить все заголовки в книгах, над которыми я работаю, на «Заголовок 1».

До сих пор я получил это от записи, меняющей две находки и заменяющей:

'
' fixHeadings Macro
'
'
    Selection.Find.ClearFormatting
    With Selection.Find.ParagraphFormat
        .SpaceBeforeAuto = False
        .SpaceAfterAuto = False
    End With
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Heading 1")
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindAsk
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    With Selection.Find.ParagraphFormat
        .SpaceBeforeAuto = False
        .SpaceAfterAuto = False
    End With
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles("Heading 1")
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindAsk
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Я пробовал это, но я немного потерян, когда дело доходит до vba

Dim objDoc As Document
'
' test Macro
' test
'
If objStyle <> "Normal" Or "" Then Set objStyle = "Heading 1"

End Sub

Это то, что я пытаюсь сделать: «Если стиль не равен нормальному или не имеет стиля, тогда установите стиль на заголовок 1»

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 25 января 2020

Попробуйте:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = ""
    .Replacement.Text = ""
    .Format = True
    .Font.Bold = True
    .Forward = True
    .Wrap = wdFindStop
    .Execute
  End With
  Do While .Find.Found
    If .Font.Size >= 14 Then .Paragraphs(1).Range.Style = wdStyleHeading1
    If .End = ActiveDocument.Range.End Then Exit Do
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
Application.ScreenUpdating = True
End Sub
0 голосов
/ 24 января 2020

В ожидании вашего ответа на мой комментарий, вот кое-что, что будет работать. В зависимости от длины вашего документа могут быть более быстрые способы сделать это.

Вы были на правильном пути со своим утверждением if, но обе стороны Or должны быть полными утверждениями. Так что вместо "" вам нужно Or objStyle = "". Я на самом деле использовал vbNullString, потому что это быстрее, но они по сути эквивалентны.

For Each para In ActiveDocument.Paragraphs
    If para.Style <> "Normal" Or para.Style = vbNullString Then
        If para.Range.ListFormat.ListType = 0 Then     
            para.Style = "Heading 1"
        End If
    End If
Next para
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...