У меня есть два блока кода Word VBA, каждый из которых отлично работает по отдельности, но который мне нужно объединить, чтобы получить желаемый результат. Один идентифицирует диапазон текста (oRng), а другой запускает выделение.Найти поиск, чтобы изменить текст. Мне нужно ограничить выбор.Найти поиск в диапазоне, определенном oRng.
Предыстория: у меня есть переменный список новостных статей, разделенных на разделы под заголовками (один абзац в стиле Header1), которые также являются переменными. Мне нужно выбрать исходную строку в статье (один абзац выделен жирным шрифтом) и скопировать ее в конец заголовка статьи (один абзац в стиле Header2). Тем не менее, некоторые разделы должны быть исключены из этой операции, если заголовок раздела является конкретным термином.
Ситуация: у меня есть рабочий код, чтобы найти исходные строки статьи и скопировать их в конец заголовков статьи (циклически просматривая весь документ с помощью Selection.Найти). У меня также есть рабочий код для определения разделов текста, где необходимо применить первый набор кода, путем создания диапазонов (oRng) между применимыми заголовками разделов, циклически проходя по документу раздел за разделом. Что мне нужно сделать, это запустить первый набор кода (который основан на Selection.Найти) в пределах, указанных вторым набором кода. Мое намерение состояло в том, чтобы зациклить код для определения диапазонов и, поскольку он идентифицирует каждый диапазон, запустить код, чтобы скопировать строки исходного текста в заголовки в этом диапазоне, но я не могу найти способ ограничить выбор.Найти поиск по определенному диапазону (oRng).
Кто-нибудь может мне помочь с этим, пожалуйста?
Первый блок кода (определение диапазонов между применимыми заголовками разделов)
Sub SourceToArticleHeadersP2()
Dim oRng As Range
Dim oRngstart As Range
Dim oRngend As Range
Dim ArticleSource As Range
Dim ArticleHeader As Range
Dim excludedTerms(1 To 5) As String
excludedTerms(1) = "Term1"
excludedTerms(2) = "Term1"
excludedTerms(3) = "Term1"
excludedTerms(4) = "Term1"
excludedTerms(5) = "Term1"
Selection.HomeKey Unit:=wdStory
With Selection.Find
.Forward = True
.ClearFormatting
.Wrap = wdFindStop
.Style = ActiveDocument.Styles(wdStyleHeading1)
.Text = ""
.Execute
End With
Do While Selection.Find.Found
For i = 1 To 5
If InStr(1, Selection.Text, excludedTerms(i), vbTextCompare) Then
Selection.Collapse wdCollapseEnd
MsgBox excludedTerms(i) & " detected - skipping"
Selection.Find.Execute
End If
Next i
Set oRngstart = Selection.Range
MsgBox "Start = " & oRngstart
Selection.Collapse wdCollapseEnd
With Selection.Find
.Forward = True
.ClearFormatting
.Wrap = wdFindStop
.Style = ActiveDocument.Styles(wdStyleHeading1)
.Text = ""
.Execute
End With
If Selection.Find.Found Then
Set oRngend = Selection.Range
MsgBox "End = " & oRngend
Set oRng = ActiveDocument.Range(Start:=oRngstart.End, End:=oRngend.Start)
Selection.Collapse wdCollapseStart
Selection.Find.Execute
Else
MsgBox "End = End of Document"
Set oRng = ActiveDocument.Range(Start:=oRngstart.End, End:=ActiveDocument.Range.End)
End If
Loop
[SECOND BLOCK OF CODE GOES HERE]
End Sub
Второй блок кода (идентифицируйте исходные строки и копируйте в заголовки статей, основываясь на форматировании). Мне нужно изменить это так, чтобы оно работало только на диапазоне текста.
With Selection.Find
.Forward = True
.ClearFormatting
.Wrap = wdFindStop
.Style = ActiveDocument.Styles(wdStyleHeading2)
.Text = ""
.Execute
End With
Do While Selection.Find.Found
Set ArticleHeader = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End - 1)
With Selection.Find
.Forward = True
.ClearFormatting
.Wrap = wdFindStop
.Font.Bold = True
.Text = ""
.Execute
End With
Set ArticleSource = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End - 1)
ArticleHeader.InsertAfter " (" & ArticleSource & ")"
Selection.Collapse wdCollapseEnd
With Selection.Find
.Forward = True
.ClearFormatting
.Wrap = wdFindStop
.Style = ActiveDocument.Styles(wdStyleHeading2)
.Text = ""
.Execute
End With
Loop
Целевой документ имеет макет, подобный этому (количество разделов и статей является переменным). Строки, которые я ищу в приведенном выше коде, выделены жирным шрифтом:
[2+ Страницы начального текста и оглавления]
Заголовок раздела 1 (Стиль: Заголовок1)
Заголовок статьи 1 (Стиль: Заголовок2)
Переменные строки текста заголовка
Название источника статьи 1 (выделено жирным шрифтом)
Более переменные строки текста заголовка
Основной текст статьи
Разрыв страницы
Заголовок статьи 2 (Стиль: Заголовок2)
Переменные строки текста заголовка
Название источника статьи 2 (жирным шрифтом)
Более переменные строки текста заголовка
Основной текст статьи
Разрыв страницы
Заголовок раздела 2 (Стиль: Заголовок1)
Заголовок статьи 3 (Стиль: Заголовок2)
Переменные строки текста заголовка
Название источника статьи 3 (жирным шрифтом)
Более переменные строки текста заголовка
Основной текст статьи
Разрыв страницы
[...]