В моем коде я разбиваю документ Word на многие, используя Range.Find
, чтобы выбрать текст текста (startoftext * endoftext), а затем сохранить его. В этом выделенном тексте я пытаюсь использовать вложенный вызов Range.Find для поиска выделенного фрагмента текста для выделенного полужирного заголовка и использования его как SaveAs [FileName].VBA: Range.Find, вложенный в другой Range.Find
В текущем коде все работает, за исключением вложенных Range.Text
возвращает весь текст в пределах начального заданного диапазона.
Sub DocSplitter()
Dim R As Range
Dim inR As Range
Set R = ActiveDocument.Range.Duplicate
Dim name As String
Application.ScreenUpdating = False
With R.Find
.Text = "^m*^l^t^l" ' <- Copies all text from ^m to "^l^t^l"
.MatchWildcards = True
While .Execute
Set inR = R.Duplicate '<- Setting Range equal to selected text range
With inR.Find
.Format = True
.Font.Bold = True
.Text = "^13([0-9]).([0-9])*^13^13" '<- Selecting header within
.MatchWildcards = True
.Execute
End With
CopyAndSave R, inR
Wend
End With
R.Collapse wdCollapseEnd
R.End = R.Parent.Range.End
CopyAndSave R, inR
End Sub
Static Sub CopyAndSave(R As Range, inR As Range)
Dim D As Document
Dim Count As Long
Count = Count + 1
R.Copy
Set D = Documents.Add
D.Range.PasteAndFormat wdFormatOriginalFormatting
D.SaveAs R.Parent.Path & Application.PathSeparator & _
inR.Text, wdFormatFilteredHTML '<-- File Name ERROR: Too long
D.Close
End Sub
поэтому inR.Text возвращает весь текст, выбранный R.Find.Execute. Любые идеи?
Редактировать: Я обновил Set inR = R.Duplicate
, спасибо за этот улов. Моя проблема оказалась проблемой форматирования с заголовками.
Хорошая находка, я использовал 'Set inR = R.Duplicate', но это не исправить мою проблему. inR по-прежнему охватывает весь диапазон R после '.execute'. Я думаю, что проблема исходит от использования и сохранения '.execute' должным образом. –