После трудового дня как-то не думается. Вот решение в лоб:
Копирование всех абзацев. чей уровень отличен от основного текста
Sub CopyStructure()
Dim oPar As Paragraph
Dim oNewDoc As Document
Dim bCopied As Boolean
Set oPar = ActiveDocument.Paragraphs.First
Set oNewDoc = Documents.Add(Visible:=False)
'Перебор всех абзацев в тексте, отбирая те, которые не основной текст
Do Until oPar Is Nothing
If oPar.OutlineLevel <> wdOutlineLevelBodyText Then
bCopied = True
oNewDoc.Range.InsertAfter oPar.Range.Text
'Применяем к абзацу соответствующий стиль
If Not StyleExists(oNewDoc, oPar.Style) Then
'Если в новом документе стиля нет, то копируем
Application.OrganizerCopy ActiveDocument.FullName, oNewDoc.FullName, oPar.Style, wdOrganizerObjectStyles
End If
oNewDoc.Paragraphs.Last.Previous.Style = oPar.Style
End If
Set oPar = oPar.Next
DoEvents
Loop
If bCopied Then
Application.Visible = True
Else
oNewDoc.Close False
End If
End Sub
'Функция проверяет наличие стиля в документе
Function StyleExists(Doc As Document, StyleName As String) As Boolean
Dim sName As String
On Error Resume Next
sName = Doc.Styles(StyleName).NameLocal
StyleExists = Err.Number = 0
Err.Clear
End Function
Очень надеюсь, что найдётся более красивое решение.
Лучше день потерять — потом за пять минут долететь!