Я пересмотрел ваш код, чтобы использовать функцию для сброса стиля и изменил long if ifif на выбранный регистр, как я и предлагал. Я также упростил вещи, используя имена стилей, а не стили. Я думаю, что приведенный ниже код точно представляет логику в приведенном выше коде, но теперь вы сможете гораздо яснее увидеть, верна ли эта логика.
Если есть ключевые слова, которые вы не понимаете, тогда в VBAВ IDE наведите курсор на ключевое слово и нажмите F1. Откроется страница справки MS для этого ключевого слова.
Вам также следует установить надстройку RUbberduck для VBA, поскольку в нее встроен индентор, а также множество других полезных и полезных инструментов.
Вытакже заметит использование .Item. Это свойство по умолчанию, которое может быть опущено, но его лучше оставить.
Option Explicit
Public Sub ChangeStyles()
Dim objPara As Paragraph
Dim previousOriginalStyle As String
'junk style to use for first item
previousOriginalStyle = ActiveDocument.Styles.Item("Quote").NameLocal
For Each objPara In ActiveDocument.Paragraphs
Select Case objPara.Style.NameLocal
Case "Header"
UpdateStyle objPara, "SCT"
Case "Heading 1"
UpdateStyle objPara, "PRT"
previousOriginalStyle = "Heading 1"
Case "Heading 2"
UpdateStyle objPara, "ART"
previousOriginalStyle = "Heading 2"
Case "Heading 3"
UpdateStyle objPara, "PR1", previousOriginalStyle, "PR1"
previousOriginalStyle = "Heading 3"
Case "Heading 4"
UpdateStyle objPara, "PR2", previousOriginalStyle, "PR1lc"
previousOriginalStyle = ActiveDocument.Styles.Item("Heading 4").NameLocal
Case "Heading 5"
UpdateStyle objPara, "PR3", previousOriginalStyle, "PR3lc"
previousOriginalStyle = "Heading 5"
Case "Heading 6"
UpdateStyle objPara, "PR4", previousOriginalStyle, "PR4lc"
previousOriginalStyle = "Heading 6"
Case "Heading 7"
UpdateStyle objPara, "PR5", previousOriginalStyle, "PR5lc"
previousOriginalStyle = "Heading 7"
Case "Footer"
UpdateStyle objPara, "EOS"
objPara.Range.ListFormat.RemoveNumbers NumberType:=wdNumberParagraph
Case Else
' do nothing at the moment
End Select
Next
End Sub
Public Sub UpdateStyle _
( _
ByRef ipPara As Word.Paragraph, _
ByVal ipPrimaryStyle As String, _
Optional ByVal ipPreviousStyle As Variant, _
Optional ByVal ipAltStyle As Variant _
)
If IsMissing(ipPreviousStyle) And IsMissing(ipAltStyle) Then
ipPara.Range.ParagraphFormat.Style = ActiveDocument.Styles.Item(ipPrimaryStyle).NameLocal
Exit Sub
End If
If ipPara.Range.ParagraphFormat.Style.NameLocal = ipPreviousStyle Then
ipPara.Range.ParagraphFormat.Style = ActiveDocument.Styles.Item(ipAltStyle).NameLocal
Else
ipPara.Range.ParagraphFormat.Style = ActiveDocument.Styles.Item(ipPrimaryStyle).NameLocal
End If
End Sub
Обратите внимание, что пока этот код компилируется нормально, у меня не было возможности запустить его, так как я этого не делаюесть образец вашего документа. Но, по крайней мере, это должно помочь вам задуматься.