Я давно писал такой макрос, который искал заголовки по цвету текста. Может какие-то из идей понравятся? Перебирать предложения не нужно, нужно искать абзацы, выделенные жирным и в начале которых стоит цифр.
Sub DivideToChapters()
'Отключаем обновление экрана
Application.ScreenUpdating = False
On Error Resume Next
'Запоминаем основной документ в переменную
Dim oMainDoc As Document: Set oMainDoc = ActiveDocument 'Документ с текстом
'Запоминаем содержимое документа от положения курсора и до конца документа
Dim oRng As Range: Set oRng = oMainDoc.Range(Selection.Range.Start, oMainDoc.Range.End)
'Создаем новый документ и запоминаем его переменную. В этот новый документ будет копироваться _
текст из каждой главы и сохраняться под своим именем
Dim oNewDoc As Document: Set oNewDoc = Documents.Add
'Переменные для работы: путь к каталогу, объект для скриптов, счетчик глав, имя главы
Dim sPath$, FSO, counter%, sName$
'Путь к каталогу, в который будут сохраняться главы. Имя каталога совпадает с именем файла
sPath = oMainDoc.Path & Application.PathSeparator & Mid(oMainDoc.Name, 1, InStrRev(oMainDoc.Name, ".") - 1)
'Создаем каталог на диске
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CreateFolder sPath
'Если каталог уже создан, то пропускаем ошибку
If Err.Number = 5 Then Err.Clear
Dim iStart&, iEnd& 'Переменные для хранения начала и конца главы
iStart = oRng.Start
'Производим поиск в документе по цвету текста. Цвет берем из первого символа после курсора.
With oRng.Find
.Font.Color = oMainDoc.Range(iStart, iStart + 1).Font.Color
'Если текст с таким цветом найден
While .Execute
If .Parent.Start <> iStart Then 'Отсекаем строку в которой находится курсор
counter = counter + 1
iEnd = .Parent.Start 'Конец главы
oMainDoc.Range(iStart, iEnd).Copy 'Копируем главу
oNewDoc.Range.Paste 'Вставляем в новый документ
oNewDoc.SaveAs sPath & Application.PathSeparator & counter & " " & sName & ".txt", wdFormatText 'Сохраняем как обычный текст
iStart = iEnd 'Конец предыдущей главы делаем началом следующей
End If
sName = Trim(Replace(.Parent.Text, vbCr, "")) 'Название главы
Wend
'Сохранение последней главы (до конца документа)
oMainDoc.Range(iStart, oMainDoc.Range.End).Copy
oNewDoc.Range.Paste
oNewDoc.SaveAs sPath & Application.PathSeparator & counter + 1 & " " & sName & ".txt", wdFormatText, addtorecentfiles:=False
End With
oNewDoc.Close False 'Закрываем документ
Application.ScreenUpdating = True: Application.ScreenRefresh 'Обновляем экран
End Sub
Лучше день потерять — потом за пять минут долететь!