у меня есть два блока кода Word VBA здесь, каждый из которых отлично работает отдельно, но который мне нужно объединить, чтобы получить желаемый результат. Один определяет диапазон текста (oRng), а другой выполняет выделение.Найти поиск, чтобы изменить текст. Мне нужно ограничить выбор.Найти поиск в диапазоне, определенном oRng.
Background: у меня есть переменный список новостных статей, разделенных на разделы под заголовками (один абзац в стиле Header1), которые также являются переменными. Мне нужно выделить исходную строку в статье (один абзац жирным шрифтом) и скопировать ее в конец заголовка статьи (один абзац в стиле Header2). Однако некоторые разделы необходимо исключить из этой операции, если заголовок раздела является определенным термином.
ситуация: у меня есть рабочий код, чтобы найти исходные строки статьи и скопировать их в конец заголовков статей (зацикливание всего документа с помощью выделения.Находить.) У меня также есть рабочий код для идентификации разделов текста, где первый набор кода должен быть применен, путем создания диапазонов (oRng) между применимыми заголовками разделов, проходя через документ раздел за разделом. То, что мне нужно сделать, - это запустить первый набор кода (который основан на выборе.Find) в пределах диапазонов, заданных вторым набором кода. Мое намерение состояло в том, чтобы зациклить код для идентификации диапазонов и, поскольку он идентифицирует каждый диапазон, запустите код для копирования исходных строк в заголовки в этом диапазоне, но я не могу найти способ чтобы ограничить выбор.Поиск по определенному диапазону (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
второй блок кода (идентификация исходных строк и копирование в строки заголовка статьи на основе форматирования). Мне нужно изменить это так, чтобы он работал только на диапазоне текста oRng.
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 + страницы открывающего текста и TOC]
заголовок раздела 1 (стиль: Heading1)
заголовок статьи 1 (стиль: Heading2)
Переменные строки заголовка text
Статья 1 название источника (жирным шрифтом)
Больше переменных строк текста заголовка
Тело статьи text
Разрыв страницы
заголовок статьи 2 (стиль: Heading2)
Переменные строки заголовка text
Статья 2 название источника (жирным шрифтом)
Больше переменных строк текста заголовка
Основной текст статьи
Разрыв страницы
заголовок раздела 2 (стиль: Heading1)
заголовок статьи 3 (стиль: Heading2)
Переменные строки заголовка text
Статья 3 название источника (жирным)
Больше переменных строк текста заголовка
Основной текст статьи
Разрыв страницы
[...]